之前的一些学习目标和计划
前言
好久没有更新过博客了,去年接触了很多大数据技术相关的东西,也做过一些基准测试。但是很多东西依然了解的相对浅显,只停留在使用层面,想下笔却又不知道从何写起。2021 年结束的时候曾列过一些计划,也算是学习过程中的一份指南吧。
计划
Hadoop
- yarn 官方文档,要搞明白 yarn ui 上的参数,比如容量调度这些
- yarn 架构
- yarn 的容量调度策略,常见参数,作业帮采用的就是容量调度策略 https://cloud.tencent.com/developer/article/1195056
- yarn 的公平调度策略
- RM 的重启和 HA
- NM
- 分层次来看的话,就是 yarn 的整体架构(例如整个 job 的提交流程和通信) -> 各个组件内部的子组件(例如 RM 中的 schedual 和 AM) -> 子组件常见的一些策略(比如 failrecover, HA,调度策略,状态管理,资源模型)。这其中涉及到一些常见的配置,对于集群运维和平常的信息集群查看比较有用。另外可以拓展的来看,其和 flink 和 spark 等框架提交任务的过程都是异曲同工之妙。
- MR 官方文档,主要是执行计划
- HDFS 存储
- yarn 官方文档,要搞明白 yarn ui 上的参数,比如容量调度这些
数仓
- 业界提供的只是一个思想,大部分需要结合内部业务场景做灵活调整,并且要结合技术选型,确定常用维度,schema 的设计很重要。大体上分为如下步骤
- 数仓规划,数据域和业务过程的划分,数仓建设的基础。
- 数据标准,词根表,字段命名,字段业务含义和口径,强依赖于产品提供。
- 数据指标,指标含义及口径,强依赖于产品提供。
- 模型设计,需要着重考虑易用性,拓展性,规范性,定义分层数据流向标准,并且要考虑从表模型的设计及存储索引的简历来优化 SQL 的开发。
- 模型评审,上面每一步都录入建模平台以保证业务一致性及可查性,避免歧义。
- 资源预估,ETL 资源的合理预估,不限于存储,计算队列。
- 离线拓展到实时,避免重复消费原始 topic,通过分发服务分发计算好的指标供各个分析主题链路消费
- 业界提供的只是一个思想,大部分需要结合内部业务场景做灵活调整,并且要结合技术选型,确定常用维度,schema 的设计很重要。大体上分为如下步骤
Hive
- hive 参数优化、
- 主要是扫描小文件,join 的倾斜,怎么定位出问题的 sql 逻辑。
- hive on spark & hive on tez & hive on mr
- 小文件主要存在三个方面的问题,存储压力(无法充分利用压缩),查询(扫描小文件,尤其是某些情况下的串行扫描,耗时非常长),元数据管理(增加元数据压力)
Flink
Flink 官方入门+进阶教程
- Flink overview
- Flink 的一些基础概念,比如有界无界流,状态,window + watermark
- Flink 部署运行,常见命令
- Flink DataStream API
- Flink 客户端操作,比如实验性的 sql client
- Flink Table API,在作业帮主要用的是 Table API,并且开发平台屏蔽掉了大部分的底层逻辑
- Flink SQL
- Flink Runtime 运行机制,比如提交流程,streamGraph -> jobGraph -> ExecutionGraph 的转换,语法树的解析,DAG 的生成,任务的重启策略
- Flink Time 的概念和机制,以及要解决的问题
- 以分层的角度来看 Flink 任务的提交过程,目前有个大致了解,但是说不上来,需要总结下
- Flink 执行作业解析
- Flink 网络流控和反压
- Flink metrics
- Flink Connector
- Flink State
- Flink Table SQL
Flink 的优化
- 重点在于前期良好的资源评估,主要结合业务高峰期 qps
- 因为本身资源足够,碰到的纯性能问题不多,优化点主要是分区不均匀的 topic,空跑的 slot 造成的资源利用率过低。以及释放掉高峰期数据处理空闲的内存。
Flink 官方文档阅读笔记
Kafka
- Kafka 视频教程
Spark
- spark catalyst 优化器源码
Doris
- Dorisdb 执行计划查看,DAG 查看
- 使用 dorisdb 过程总遇到的问题,大部分性能问题是通过重建 schema 来解决的,让存储更均匀,并且尽量命中前缀索引。
- dorisdb 对 value 列的索引支持不太好
- doris 的实时摄入性能测试及优化
- doris 的离线摄入性能测试及优化
Druid
- 官方文档
- 常见优化
- 摄入任务优化,hadoop based && kafka based,任务性能和最终生成的 segment 大小,分片的的折衷。
- segment 存储优化
- Druid 和 Doris 的不同地方,哪些场景下用 druid 比较好
- druid 全列索引。dorisdb 只有 key 列上的前缀索引,bitmap 索引,大数据量下,低基维的检索可能不如 druid 好。
- druid 无法存储明细数据,但是实施摄入相对简单,本身集成支持足够。doris 可以存储明细数据,但是实时摄入的话需要自己开发代码,受限于基建服务的问题,整个链路比较长。
- Druid 离线摄入过程及优化
- Druid 实时摄入过程及优化
- Druid 集群运维,metrics 收集
- Druid 物化视图
ElstaicSearch
- 官方文档书籍
ElstaicSearch 权威指南
- 基本原理
- 深入的不多,只知道设置字段类型的时候需要考虑是否用到倒排索引,尤其是数字类型的低基维
- 官方文档书籍
常见数据结构
- bitmap
- 倒排索引
- HLL
- 前缀索引
- LSM
- 稀疏索引
metrics 监控
- 常见监控指标
- kafka metrics
- spark metrics
- flink metrics
- druid metrics
- 对于部分计算系统,如何集成预期的自定义指标,比如处理错误量等
- grafana + prometheus 简单配置