大数据项目一: 叽呤本地生活app大数据离线分析系统
项目描述: 使用阿里云的EMR作为任务调度系统,以及相关服务器,搭建叽呤本地生活离线数仓,主要用于离线的报表展示,提供运营同学T+1的数据支撑。
一、数仓架构设计 主要是分为 数据采集层 ods层 dwd层 dwm层 dws层 app层
1.数据采集层 数据采集层主要是使用 datalink 作为业务数据库的binlog采集框架,将变更的binlog数据落入Kafka
2.落盘完毕的业务数据表,通过T+1 的方式,使用统一的Spark任务将 数据进行合并,这里的合并分为两种类型,一种是全量 最新状态的合并 合并每一张业务库表的所有数据最新状态的ods层表,一种是将每日的数据进行快照的形式放到Hive分区表中
3.ODS层: 操作数据层,保存一份完整的原始数据并设置分区
4.DWD层: 明细数据层,对ODS层进行清洗(去除空值、脏数据、超范围数据、部分列裁剪),维度退化,脱敏等。
5.Dim层:维度数据层,对Dwd层的维度数据进一步抽象获取,得到维度层 如用户维度表,渠道维度表等
6.DWM 层 中间汇总数据层,以Dwd层为基础 进行数据的预聚合操作
7.DWS层:汇总数据层,以DWM或者Dim层为基础按相关主题和时间进行汇总 商户主题 达人主题等等
8.APP 层:应用数据层,为各种统计报表提供数据。例如 达人的活跃量 达人探店产生的GMV 签约的商户量等指标
二、 数据建模:采用维度建模,以星型模型为基础,进行业务流程设计。
三、业务数据同步: 对不同的业务数据表采用不同的数据同步策略
四、主题设计:根据运营部门的要求确定相关主题,以及实际的业务需求定主题
五、表制作:根据业务和查询性能,对表进行扩宽和拆分。
六、流程调度 : EMR平台根据表的血缘关系,数据量大小,指标优先级等因素确定调度顺序。
七、数据质量: EMR平台 对表的数据量以及重要字段,脚本完成时间等指标进行监控。
八、数据监控: 对数仓执行的各个job进行监控,如果数据有执行报错,可以及时的通过钉钉或者短信通知相应的负责人员
技术要点:
1)使用Spark共享变量机制,实现自定义累加器 统计Spark读取Hive表数据到Mysql的 ;
2)SparkSql中当小表join大表的时候,可以使用广播变量,将小表的数据广播出去,增加join的效率
3)自定义UDF函数,例如 根据输入ip地址获取埋点数据无法确定的地区信息,实现离线统计需求;
4)使用开窗函数实现数据排序 TopN 以及某些指标累计的需求 获取;
5)因为公司Spark集群内存及CPU有一定的富余,在项目中优先使用mapPartition及 foreachPartition,为了避免数据倾斜filter与coalesce配合使用;
6)在SparkSql中使用 临时视图存储计算过程中的临时表数据
7)数据计算过程中,使用repartition 增加 Spark计算的并行度,使用coalesce 缩小Spark计算的并行度,防止产生过多的小文件。
8)Spark RDD的持久化 ,对常用的数据量小的RDD进行cache缓存,对常用且数据量大的RDD 进行checkPoint;
9)本项目中Spark集群采用统一内存管理,提高了堆内和堆外内存资源的利用率,将shuffle过程设置为SortShuffle能较大的提高shuffle过程的效率;
10)对Hive查询效率进行相应的优化。
大数据项目二:Hobby 社区 app 埋点数据采集以及 日常离线数据开发
开发环境:IntelliJ IDEA + JDK1.8 + Maven+gitlab+Jenkins+flume+
项目架构:Nginx + Tomcat + Flume + Kafka + Hadoop + Hive + MySQL + Spark +
Zookeeper
项目描述:1. 务需求实现对Hobby App相关日志的收集,对采集到的日志跟产品使用情况完成相应的数据分析,以优化产品的使用功能;并为产品业务功能新增提供相应的数据支持,完成相应的业务功能指标。2.根据业务库提供的业务数据,比如Hobby社区的星卡,星社,
责任描述:
1)【定制化日志模块】根据业务需求定制日志采集的信息内容和结构,设计不同日志的属性,对应的存储表格设计,如启动日志的信息存储,createdAtMs、appId、 appVersions、deviceId、
appVersion、osType、userId、appPlatforms等属性确立,设计启动日志、错误日志、页面日志、事件日志、曝光日志、等相关日志并发送信息到日