业务分层划分
-
边缘部分
- 数据收集,高效、不丢、资源消耗低、可审计监控
- 数据传输,域名、链路选择
- 数据开发,部分数据开发需要下沉到边缘
-
中央部分
-
通用基础设施
- 机器选型,针对不同服务选择合适的机型
- 集群搭建,选择合适的发行版本
- 配置管理,做到自动化下发配置,管理集群,服务
- 监控管理,监控大数据平台组建,为调优、扩容提供数据支撑
-
数据平台基础
- 数据接入,选择Flume,易扩展,方便接入各类数据
- 数据计算,选择Spark,MR
- 数据存储,Kafka、HDFS、HBase、ClickHouse、ES、Mongodb
- 计算管理,yarn进行计算资源管理
- 任务调度,选择azkaban
- 数据分析,hiveSQL、sparkSQL
-
数据管理
- 数据开发,工具封装、任务调度、测试等
- 数据仓库,ODS、DW(视情况细分为DWD,DWS)、DM(亦或者为ADS)
- 数据治理,元数据管理、数据质量管理
-
数据使用
- 数据查询,提供给运维
- 数据运营,提供给项目
- 数据报表,提供给老板
- 数据API,提供给客户
-
平台建设总结
-
边缘
- Flume、FileBeat的收集传输数据
- 做好监控,保障不丢数据,延迟低,资源消耗可控
-
中央
-
通用基础设施
- 了解硬件选型需要注意的问题点,选择合适的硬件
- 针对不同的服务,做合适的系统配置优化
- 熟练掌握大数据集群的搭建,并结合ansible做到近100%的自动化创建、管理、维护
- 采用Telegrafa、influxdb、grafana,监控内部大数据集群和spark等计算状态信息
-
数据平台基础
- 数据接入
- 代理层,采用Haproxy,4层代理,可以在升级后端时,选择性的摘除backend
- 接收层,采用flume,研读过Flume的Memory channel代码,开发过Flume插件
- 数据计算
- 涉及流数据开发、离线统计开发,涵盖实时监控、通用用户数据统计、特殊客户需求开发等多方面,
- 对计算进行了二次封装,该工具计算采用spark,配置采用yaml,配置后提交azkaban调度,完成计算需求,支持流和文件两大类输入,支持多种存储输出,大大提升了计算开发
- ETL相关,该部分主要涉及到ODS、DW、DM之间数据的流动,主要是用hivesql,调度采用azkaban,hivesql 底层引擎测试过tez,部分job 使用该引擎
- 数据存储
- kafka,作为日志消息队列,深度了解kafka,熟悉kafka读写过程,针对kafka做过大量的调优
- HDFS,ODS、DW的存储介质,了解HDFS的内部机制,内部HDFS的维护者,HDFS存储的数据为parquet格式,计算效率高,方便和Hive结合
- DB存储,HBase 作为海量OLTP存储,有很高效的写入性能,略微可以的查询性能,部分高度聚合的专用数据存储在HBase中;ClickHouse 作为一款优秀MPP架构的OLAP 数据库支持实时写入,查询聚合能力极强,并发略低,用于各类多维不确定数据分析存储;ES 检索能力,多维查询能力很棒,是部分特殊日志的存储介质,可以方便查询和画图
- 计算资源管理
- yarn,目前大数据集群最大的占有,数量的掌握yarn计算资源调度管理,针对不同部分,配置不同的队列,进行资源隔离,并且鉴于不用时段任务状态各异,会动态的调整yarn各个队列的capacity
- 任务调度
- 目前较为常用的是azkaban、airflow,我们选择了azkaban,用它来调度hive,spark,mr等,内置了多种job type,方便易用
- 数据分析
- 临时需求,使用的是hivesql/spark sql,查询的数据涉及DM、DW或者ODS,视穿透情况而定;
- 通用需求,使用的是封装的计算工具,一般涉及到数据的输出
- 数据接入
-
数据管理
- 数据开发套件,目前还比较简陋,但是可以方便快捷的将计算开放给使用方,简单配置即可进行数据开发
- 离线数据仓库
- ODS层,数据接入统一以parquet的格式持久化到HDFS形成ODS,根据内外部需求开发ETL,将ODS数据转化写入DW,ODS层数据保存至少6个月
- DW层,目前根据量级和数据复杂度划分为一层或者两层,数据量小且计算频次低,则这部分业务只有DWS层;针对一些负责多维的数据,增加一层通用聚合层DWD层,形成数据宽表,为DWS层服务;DW数据保存1-3年
- DM(亦或者为ADS)层,则是最终数据提供层,高度聚合数据存储到hbase或者hdfs,对于维度较多,查询不太确定的数据存储到clickhouse,永久保存,对于过老的数据,可以同步到廉价存储进行保存
- 实时数据仓库
- DW层,通用聚合层DWD层,存储数据到kafka;DW数据保存1-3天
- DM(亦或者为ADS)层,则是最终数据提供层,实时消费kafka计算写入,高度聚合数据存储到hbase或者hdfs;对于维度较多,查询不太确定的数据存储到clickhouse
- 数据治理
- 元数据管理,目前比较简陋,wiki记录或者gafana查询平台选择对应数据源
- 数据质量管理,目前采用边缘独立计算和中央抽样实时计算进行实时对比,结果集成在grafana
-
数据使用
- 数据查询,需求方为运维,提供的工具有命令行查询工具、勾选式查询平台、kibana查询平台
- 数据运营,需求方为项目,提供勾选式查询平台
- 数据报表,需求方是项目或者客户,对内提供勾选式查询平台;对外提供API查询;或者自动化报表生成发送
- 数据API,需求方是客户,提供形式是API服务
-
个人技能总结
-
通用基础设施
- 熟悉硬件选型,完成过多种服务的硬件选型,曾在单一服务优化中成本提升7%,单机性能提升50%
- 优秀的运维技能,发现并排查到一个系统内核bug
- 熟练掌握大数据集群的搭建,并结合ansible做到近100%的自动化创建、管理、维护
- 采用Telegrafa、influxdb、grafana,监控内部大数据集群和spark等计算状态信息
- 大数据配套组件,引入过azkaban调度平台、dr-elephant等
-
数据平台基础
- 数据接入
- 熟悉flume开发,研读过Flume的Memory channel、kafkasink 等多个核心组件的代码,开发过Flume interceptor插件
- 数据计算
- 涉及流数据开发、离线统计开发,涵盖实时监控、通用用户数据统计、特殊客户需求开发等多方面,熟练掌握spark、hive、mr
- 语言涉及java、golang、scala
- 为了方便计算封装了一个通用计算工具,提升了开发效率
- 开发过IP转换的hive UDF模块
- 数仓建设
- 做过简单的数仓分层建设、建表规范话、etl规范化等
- 数据存储
- kafka,熟练掌握kafka,作为ODS数据前置日志队列和实时计算存储,了解过部分组件的代码,内部解决过kafka出现的各类问题
- HDFS,熟练掌握HDFS的搭建、维护,深入了解过hdfs读写、高可用、配置优化等
- 数据格式,大量使用过parquet,测试使用过orc,carbondata,了解avro、thrift等rpc格式,开发过filebeat的thrift output,对接flume 的thrfit source
- DB存储
- Mysql,数据迁移、分区表、更换引擎、数据备份、读写分离、主从同步
- MongoDB,数据迁移、数据备份、部分小优化
- Hbase,结合phoenix使用,了解hbase底层原理,做过hbase的深度测试调优
- Clickhouse,了解使用过clickhouse多个mergeTree 引擎,打架维护过两大通用集群架构
- ES,熟悉ES 上下游组件,熟练掌握logstash、hangout等数据写入工具
- 其他调研了解,仅搭建使用,了解了大概
- prestodb
- kudu
- carbondata
- Maxwell & canel
- 数据接入
-
数据使用
- 简陋版统一数据查询平台,基于grafana simple-json-datasource做数据源开发
- 尝试过superset和zepplin场景不太适用,放弃了
-
开发技能
- 熟练掌握java,golang开发,了解scala,学习过akka
- 熟悉了解JVM,JMM相关知识
- 熟悉了解golang gpm和内存管理相关知识
- 熟练掌握hive SQL,spark 开发,FLume开发,MR开发
有疑问加站长微信联系(非本文作者)