Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大数据教育数仓之在线教育项目回顾

大数据教育数仓之在线教育项目回顾

作者头像
Maynor
发布于 2023-07-28 07:49:47
发布于 2023-07-28 07:49:47
8260
举报

大数据教育数仓之在线教育项目回顾

01:在线教育项目需求

  • 目标:掌握在线教育项目需求
  • 实施
    • 常规的需求:通过对数据进行数据分析处理,得到一些指标,来反映一些事实,支撑运营决策
    • 行业:在线教育行业
    • 产品:课程
    • 需求提高学员报名的转换率,实现可持续化的运营发展
      • 需求1:分析学员从访问到报名每个环节的留存率和流失率,发现每个环节存在的问题,解决问题,提高报名率
        • 访问分析
        • 咨询分析
        • 意向分析
        • 报名分析
        • 通过各个环节的分析,来发现每个环节流失原因,解决问题,实现提高每一步转化率
      • 需求2:持续化发展需要构建良好的产品口碑,把控学员学习质量:通过对考试、考勤、作业做管理和把控
        • 考勤分析
  • 小结
    • 掌握在线教育项目需求
  • 面试:项目介绍

02:需求主题划分

  • 目标掌握在线教育中需求主题的划分
  • 实施
    • 数据仓库数据管理划分
      • 数据仓库【DW】:存储了整个公司所有数据
        • 数据集市/主题域【DM】:按照一定的业务需求进行划分:部门、业务、需求
          • 主题:每一个主题就面向最终的一个业务分析需求
    • 在线教育中的需求主题
      • 数据仓库:业务系统数据【客服系统、CRM系统、学员管理系统】
        • 业务数据仓库:结构化数据
      • 数据集市/主题域
        • 运营管理集市/运营域
        • 销售管理集市/销售域
        • 学员管理集市/用户域
        • 产品管理集市/产品域
        • 广告域
        • ……
      • 数据主题
        • 来源分析主题、访问分析主题、咨询分析主题
        • 销售分析主题、线索分析主题、意向分析主题、报名分析主题
        • 考勤分析主题、考试分析主题、作业分析主题
        • 产品访问主题、产品销售主题、产品付费主题
        • 表名:层 _ 【域】 _ 主题 _ 维度表
  • 小结
    • 掌握在线教育中需求主题的划分
    • 面试:项目中划分了哪些主题域以及有哪些主题?

03:数据来源

  • 目标掌握在线教育平台的数据来源
  • 实施
    • 访问分析主题、咨询分析主题
      • 客服系统:客服系统数据库
      • 需求:统计不同维度下的访问用户数、咨询用户数
        • 指标:UV、PV、IP、Session、跳出率、二跳率
        • 维度:时间、地区、来源渠道、搜索来源、来源页面
      • web_chat_ems
      • web_chat_text_ems
    • 线索分析主题、意向分析主题、报名分析主题
      • CRM系统:营销系统数据库
      • 需求:统计不同维度下意向用户个数、报名用户个数、有效线索个数
        • 维度:时间、地区、来源渠道、线上线下、新老学员、校区、学科、销售部门
      • customer_relationship:意向与报名信息表
      • customer_clue:线索信息表
      • customer:学员信息表
      • itcast_school:校区信息表
      • itcast_subject:学科信息表
      • employee:员工信息表
      • scrm_deparment:部门信息表
      • itcast_clazz:报名班级信息表
    • 考勤分析主题
      • 数据来源:学员管理系统
      • 需求:统计不同维度下学员考勤指标:出勤人数、出勤率、迟到、请假、旷课
      • tbh_student_signin_record:学员打卡信息表
      • student_leave_apply:学员请假信息表
      • tbh_class_time_table:班级作息时间表
      • course_table_upload_detail:班级排课表
      • class_studying_student_count:班级总人数表
  • 小结
    • 记住核心的表与字段
    • 面试:数据来源是什么?

04:数仓设计

  • 目标掌握业务分析主题中每个主题数仓的实现流程
  • 实施
  • 访问分析主题
    • ODS:web_chat_ems、web_chat_text_ems
    • DWD:将两张表进行合并,并且实现ETL
    • DWS:基于不同维度统计所有访问数据的用户个数、会话个数、Ip个数
  • 咨询分析主题
    • ODS:web_chat_ems、web_chat_text_ems
    • DWD:直接复用了访问分析的DWD
    • DWS:基于不同维度统计所有咨询【msg_count > 0】数据的用户个数、会话个数、Ip个数
  • 意向分析主题
    • ODS:customer_relationship、customer_clue
    • DIM:customer、employee、scrm_department、itcast_shcool、itcast_subject
    • DWD:对customer_relationship实现ETL
    • DWM:实现所有表的关联,将所有维度和事实字段放在一张表中
    • DWS:实现基于不同维度的聚合得到意向人数
  • 报名分析主题
    • ODS:customer_relationship
    • DIM:customer、employee、scrm_department、itcast_clazz
    • DWD:对customer_relationship实现ETL并且过滤报名数据
    • DWM:实现四张表的关联,将所有维度和事实字段放在一张表中
    • DWS:基于小时维度对其他组合维度进行聚合得到指标
    • APP:基于小时的结果累加得到天、月、年维度下的事实的结果
  • 考勤管理主题
    • ODS:tbh_student_signin_record、student_leave_apply
    • DIM:tbh_class_time_table、course_table_upload_detail、class_studying_student_count
    • DWD:没有
    • DWM
      • 学员出勤状态表:基于学员打卡信息表
      • 班级出勤状态表:基于学员出勤状态表
      • 班级请假信息表:基于请假信息表得到的
      • 班级旷课信息表:总人数 - 出勤人数 - 请假人数
    • DWS:基于天构建天+班级维度下的出勤指标:24个
    • APP:基于人次进行Sum累加重新计算月、年的出勤指标
  • 小结
    • 掌握业务分析主题中每个主题数仓的实现流程
    • 面试:分层怎么设计的?
      • ODS:原始数据层:存储原始数据
      • DWD:明细数据层:ETL以后的明细数据
      • DWM:轻度汇总层:对主题的事务事实进行构建,关联所有事实表获取主题事实,构建一些基础指标
      • DWS:汇总数据层: 构建整个主题域的事实和维度的宽表
      • APP:拆分每个主题不同维度的子表
      • DIM :维度数据层:所有维度表

05:技术架构

  • 目标掌握整个项目的技术架构
  • 实施
  • 数据源:MySQL数据库
  • 数据采集:Sqoop
  • 数据存储Hive:离线数据仓库
  • 数据处理:HiveSQL【MapReduce】 =》 以后简历中要改为SparkSQL等工具来实现
  • 数据结果:MySQL
  • 数据报表:FineBI
  • 协调服务:Zookeeper
  • 可视化交互:Hue
  • 任务流调度:Oozie
  • 集群管理监控:Cloudera Manager
  • 项目版本管理:Git
  • 小结
    • 掌握整个项目的技术架构
    • 面试:项目介绍或者项目的技术架构?

06:项目优化

目标:掌握Hive的常见优化

实施

属性优化

本地模式

代码语言:javascript
AI代码解释
复制
hive.exec.mode.local.auto=true;

JVM重用

代码语言:javascript
AI代码解释
复制
mapreduce.job.jvm.numtasks=10

推测执行

代码语言:javascript
AI代码解释
复制
mapreduce.map.speculative=true
mapreduce.reduce.speculative=true
hive.mapred.reduce.tasks.speculative.execution=true

Fetch抓取

代码语言:javascript
AI代码解释
复制
hive.fetch.task.conversion=more

并行执行

代码语言:javascript
AI代码解释
复制
hive.exec.parallel=true
hive.exec.parallel.thread.number=16

压缩

代码语言:javascript
AI代码解释
复制
hive.exec.compress.intermediate=true
hive.exec.orc.compression.strategy=COMPRESSION
mapreduce.map.output.compress=true
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.DefaultCodec

矢量化查询

代码语言:javascript
AI代码解释
复制
hive.vectorized.execution.enabled = true;
hive.vectorized.execution.reduce.enabled = true;

零拷贝

代码语言:javascript
AI代码解释
复制
hive.exec.orc.zerocopy=true;

关联优化

代码语言:javascript
AI代码解释
复制
hive.optimize.correlation=true;

CBO优化器

代码语言:javascript
AI代码解释
复制
hive.cbo.enable=true;
hive.compute.query.using.stats=true;
hive.stats.fetch.column.stats=true;
hive.stats.fetch.partition.stats=true;

小文件处理

代码语言:javascript
AI代码解释
复制
#设置Hive中底层MapReduce读取数据的输入类:将所有文件合并为一个大文件作为输入
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
#如果hive的程序,只有maptask,将MapTask产生的所有小文件进行合并
hive.merge.mapfiles=true;
hive.merge.mapredfiles=true;
hive.merge.size.per.task=256000000;
hive.merge.smallfiles.avgsize=16000000;

索引优化

代码语言:javascript
AI代码解释
复制
hive.optimize.index.filter=true

谓词下推PPD

代码语言:javascript
AI代码解释
复制
hive.optimize.ppd=true;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4UGgQtXE-1690355726417)(J:/baidudownload/09-第九阶段spark项目-一站式制造/Day5_数仓事实层DWB层构建/02_随堂笔记/Day5_数仓事实层DWB层构建.assets/image-20210518184328346.png)]

  • Inner Join和Full outer Join,条件写在on后面,还是where后面,性能上面没有区别
  • Left outer Join时 ,右侧的表写在on后面,左侧的表写在where后面,性能上有提高
  • Right outer Join时,左侧的表写在on后面、右侧的表写在where后面,性能上有提高
  • 如果SQL语句中出现不确定结果的函数,也无法实现下推

Map Join

代码语言:javascript
AI代码解释
复制
hive.auto.convert.join=true
hive.auto.convert.join.noconditionaltask.size=512000000

Bucket Join

代码语言:javascript
AI代码解释
复制
hive.optimize.bucketmapjoin = true;
hive.auto.convert.sortmerge.join=true;
hive.optimize.bucketmapjoin.sortedmerge = true;
hive.auto.convert.sortmerge.join.noconditionaltask=true;

Task内存

代码语言:javascript
AI代码解释
复制
mapreduce.map.java.opts=-Xmx6000m;
mapreduce.map.memory.mb=6096;
mapreduce.reduce.java.opts=-Xmx6000m;
mapreduce.reduce.memory.mb=6096;

缓冲区大小

代码语言:javascript
AI代码解释
复制
mapreduce.task.io.sort.mb=100

Spill阈值

代码语言:javascript
AI代码解释
复制
mapreduce.map.sort.spill.percent=0.8

Merge线程

代码语言:javascript
AI代码解释
复制
mapreduce.task.io.sort.factor=10

Reduce拉取并行度

代码语言:javascript
AI代码解释
复制
mapreduce.reduce.shuffle.parallelcopies=8
mapreduce.reduce.shuffle.read.timeout=180000

SQL优化

  • 核心思想:先过滤后处理
    • where和having使用
    • join中on和where使用
    • 将大表过滤成为小表再join

设计优化

  • 分区表:减少了MapReduce输入,避免不需要的过滤
  • 分桶表:减少了比较次数,实现数据分类,大数据拆分,构建Map Join
  • 文件存储:优先选用列式存储:parquet、orc

小结

  • 熟练掌握Hive中的优化
  • 面试:项目中做了哪些优化?Hive做了哪些优化?

07:项目问题

目标:掌握Hive的常见优化

实施

内存问题:现象程序运行失败

  • OOM:out of memory

堆内存不足:给Task进程分配更多的内存

代码语言:javascript
AI代码解释
复制
mapreduce.map.java.opts=-Xmx6000m;
mapreduce.map.memory.mb=6096;
mapreduce.reduce.java.opts=-Xmx6000m;
mapreduce.reduce.memory.mb=6096;

物理内存不足

  • 允许NodeManager使用更多的内存
  • 硬件资源可以扩充:扩充物理内存
  • 调整代码:基于分区处理、避免Map Join

虚拟内存不足:调整虚拟内存的比例,默认为2.1

数据倾斜问题:程序运行时间长,一直卡在99%或者100%

现象

  • 运行一个程序,这个程序的某一个Task一直在运行,其他的Task都运行结束了,进度卡在99%或者100%

基本原因

  • 基本原因:这个ReduceTask的负载要比其他Task的负载要高
    • ReduceTask的数据分配不均衡

根本原因:分区的规则

  • 默认分区:根据K2的Hash值取余reduce的个数
    • 优点:相同的K2会由同一个reduce处理
    • 缺点:可能导致数据倾斜

数据倾斜的场景

  • group by / count(distinct)
  • join

解决方案

group by / count(distinct)

开启Combiner

代码语言:javascript
AI代码解释
复制
hive.map.aggr=true

随机分区

方式一:开启参数

代码语言:javascript
AI代码解释
复制
hive.groupby.skewindata=true
  • 开启这个参数以后,底层会自动走两个MapReduce
  • 第一个MapReduce自动实现随机分区
  • 第二个MapReduce做最终的聚合

方式二:手动指定

代码语言:javascript
AI代码解释
复制
distribute by rand():将数据写入随机的分区中
代码语言:javascript
AI代码解释
复制
distribute by 1 :将数据都写入一个分区

join

方案一:尽量避免走Reduce Join

  • Map Join:尽量将不需要参加Join的数据过滤,将大表转换为小表
  • 构建分桶Bucket Map Join

方案二:skewjoin:避免数据倾斜的Reduce Join过程

代码语言:javascript
AI代码解释
复制
    --开启运行过程中skewjoin
    set hive.optimize.skewjoin=true;
    --如果这个key的出现的次数超过这个范围
    set hive.skewjoin.key=100000;
    --在编译时判断是否会产生数据倾斜
    set hive.optimize.skewjoin.compiletime=true;
    --不合并,提升性能
    set hive.optimize.union.remove=true;
    --如果Hive的底层走的是MapReduce,必须开启这个属性,才能实现不合并
    set mapreduce.input.fileinputformat.input.dir.recursive=true;

小结

  • 掌握Hive中常见的内存溢出及数据倾斜问题
  • 面试:数据倾斜怎么解决?
    • 调大分区个数:重分区
    • Join时候, 可以将小的数据实现广播
    • 自定义分区规则:RDD五大特性:对于二元组类型的RDD,可以指定分区器
      • reduceByKey(partitionClass = HashPartition)

技术面试:理论为主

  • HadoopHDFS读写原理,YARN中程序运行流程、端口号、哪些进程、MapReduce运行过程
  • Hive:SQL语句,函数应用
    • 字符串函数、日期函数、判断函数、窗口函数
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
知行教育大数据分析数仓项目_面试题精华版
1.简介一下当前这个项目 能够介绍一下你写的项目: 我们这个大数据项目主要是解决了教育行业的一些痛点。 首先,受互联网+概念,疫情影响,在线教育,K12教育等发展火热,越来越多的平台机构涌现。但是由于信息的共享利用不充分,导致企业多年积累了大量数据,而因为信息孤岛的问题,一直没有对这些数据进一步挖掘分析,因此也不能给企业的管理决策层提供有效的数据支撑。 有鉴于此,我们做的这个教育大数据分析平台项目,将大数据技术应用于教育行业,用擅长分析的OLAP系统为企业经营提供数据支撑。具体的实现思路是,先建立企业的数据仓库,把分散的业务数据预处理,其次根据业务需求从海量的用户行为数据挖掘分析,定制出多维的数据集合,形成数据集市,供各个场景主题使用,最后用BI工具,进行前端展示。 用到的技术架构包括:mysql,sqoop,基于CM的Hive,Oozie和FineBi。由于OLTP系统中数据大多存储在mysql,所以我们最终选择Sqoop作为导入导出工具,抽取数据到数仓,并使用基于CM管理的Hive进行数据清洗+分析,然后sqoop导出到mysql,最后用FineBI展示OLAP的数据分析结果。 所以,我们的技术解决了企业的三大痛点。一是数据量太大问题,传统数据库无法满足;二是系统多,数据分散问题,无法解决数据孤岛问题;三是,统计工作量太大,分析难度高问题,无法及时为企业提供数据参考。
Maynor
2021/04/09
1.6K0
最新数仓面试题_知行教育数仓项目
包含: •项目做了什么 我们的教育大数据分析平台项目就是将大数据技术应用于教育行业,为企业经营提供数据支撑
Maynor
2021/04/09
1.7K0
金三银四V2.0之大数据面试常见的10个问题
面试官你好,我是面试咱们公司大数据开发实习岗位的xxx,曾就读于xx学校数据科学与大数据专业,2022年毕业。
Maynor
2023/02/01
1.2K0
大数据数仓项目--知行教育_访问咨询主题_全量流程
OLTP原始数据(mysql)——》数据采集(ODS)——》清洗转换(DWD)——》统计分析(DWS)——》导出至OLAP(Mysql),如图:
Maynor
2021/04/09
8820
基于大数据技术的开源在线教育项目
毫无疑问最近几年是在线教育和内容付费的风口期,尤其是今年,大量做教育的公司都获得数额不小的投资。我们不是要去追这个风口,而是因为在线教育的成熟,开始产生巨量有价值的数据,率先采用和融合大数据和AI技术的公司,必将强力推动公司的发展,从而转型成为科技公司。
soundhearer
2020/12/18
1.5K3
知行教育项目介绍
开发环境: jdk:Jdk1.8 Scala:2.11.8 CDH6.2.1: zookeeper-3.4.5-cdh6.2.1、hadoop-3.0.0-cdh6.2.1,hive-2.1.1-cdh6.2.1、hue-4.3.0-cdh6.2.1 Sqoop:sqoop-1.4.7-cdh6.2.1 Mysql:5.7 Zeppelin:0.8.0
Maynor
2021/04/09
1.1K0
离线报表之五大看板主题需求分析(SQL版)
客户访问和咨询主题,顾名思义,分析的数据主要是客户的访问数据和咨询数据。但是经过需求调研,这里的访问数据,实际指的是访问的客户量,而不是客户访问量。原始数据来源于咨询系统的mysql业务数据库。 用户关注的核心指标有:1、总访问客户量、2、地区独立访客热力图、3、访客咨询率趋势、4、客户访问量和访客咨询率双轴趋势、5、时间段访问客户量趋势、6、来源渠道访问量占比、7、活跃页面排行榜。 总访问客户量 说明:统计指定时间段内,访问客户的总数量。能够下钻到小时数据。 展现:线状图 指标:访问客户量 维度:年、季度、月 粒度:天 条件:年、季度、月 数据来源:咨询系统的web_chat_ems_2019_12等月表
Maynor
2022/05/03
1.6K0
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
文件中有两个配置,删除其中任意一个,修改剩下的一个配置将address改为系统新分配的mac地址,将NAME改成eth0,保存退出
Maynor
2021/12/07
1.1K0
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
基于大数据技术的开源在线教育项目 二
模拟日志的数据格式如下,详细请参见我的开源项目 https://github.com/SoundHearer/kuaiban
soundhearer
2020/12/18
1.4K0
助力工业物联网,工业大数据之服务域:项目总结【三十九】
开启动态分区裁剪:自动在Join时对两边表的数据根据条件进行查询过滤,将过滤后的结果再进行join
Maynor
2023/08/24
4540
助力工业物联网,工业大数据之服务域:项目总结【三十九】
助力工业物联网,工业大数据之分层总体设计【六】
Oracle:hostname、port、username、password、sid
Maynor
2023/02/17
6390
助力工业物联网,工业大数据之分层总体设计【六】
Hive Tuning(一) 连接策略
群里共享了一本hive调优的书记,名叫《Hive Tunning》,就忍不住开始看了,也顺便记录一下自己学到的东西,备忘! 首先,这是hive的数据摘要,别问我什么意思,我也没看懂。 好,我们正式
岑玉海
2018/02/28
1.5K0
Hive Tuning(一) 连接策略
数仓建设 | ODS、DWD、DWM等理论实战(强烈建议收藏~)
数仓在建设过程中,对数据的组织管理上,不仅要根据业务进行纵向的主题域划分,还需要横向的数仓分层规范。本文作者围绕企业数仓分层展开分析,希望对你有帮助。
大数据老哥
2022/04/07
8.9K0
数仓建设 | ODS、DWD、DWM等理论实战(强烈建议收藏~)
(学习之路)Hive数据倾斜解决办法
hive是基于大数据开发的一组用于数据仓库的api,其主要功能是将HQL(HIVE SQL)转换成MapReduce执行。所以对hive的优化几乎等于对MapReduce的优化,主要在io和数据倾斜方面进行优化。
木野归郎
2023/02/25
1.3K0
(学习之路)Hive数据倾斜解决办法
知行教育项目_Hive参数优化
我们知道传统的OLTP数据库一般都具有索引和表分区的功能,通过表分区能够在特定的区域检索数据,减少扫描成本,在一定程度上提高查询效率,我们还可以通过建立索引进一步提升查询效率。在Hive数仓中也有索引和分区的概念。
Maynor
2021/04/09
9040
数仓分层
数仓分层是数据仓库设计中十分重要的一个环节,优秀的分层设计能够让整个数据体系更容易理解和使用 本文的大纲 001,介绍数据分层的作用 002,分层设计的原则以及介绍一种通用的数据分层设计 003,具体案例 004,落地实践意见 005,思考
全栈程序员站长
2022/07/21
6930
数仓分层
[数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念「建议收藏」
1.2.2 DWM 轻度汇总层(MID或DWB, data warehouse basis)
全栈程序员站长
2022/08/03
22.2K0
[数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念「建议收藏」
数仓命名规范大全
来源:蜜獾报告 本文约3200字,建议阅读5分钟本文介绍了数仓命名规范。 0X00 前言 数据仓库的建设实施和落地需要团队中不同成员的参与和配合,需要各种各样的规范,规范的分层定义和表命名能让使用者轻而易举地明白该表的作用和含义。因此本文档重点介绍分层规范和可落地的表命名规范。 01XX 数据分层 一、数据运营层:ODS(Operational Data Store) ODS层,是最接近数据源中数据的一层,为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据
数据派THU
2023/05/11
1.2K0
数仓命名规范大全
实操 | Hive 数据倾斜问题定位排查及解决
多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例。当工作中遇到了倾斜问题,这些理论很难直接应用,导致我们面对倾斜时还是不知所措。
五分钟学大数据
2021/09/22
2.8K0
数据仓库设计和规范—数仓分层和规范
通常的命名方式是:ODS_应用系统名(或缩写)_数据库类型_(数据库名称可省略)_数据表名_加载方式(增量还是全量),表名不能太长,一般不超过30字。如:
礼兴
2021/07/02
5.9K0
数据仓库设计和规范—数仓分层和规范
推荐阅读
相关推荐
知行教育大数据分析数仓项目_面试题精华版
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档