简介
本课程的大纲设置,注重的是系统性的讲解当代大数据的核心技术,如Spark,HBase,Elasticsearch,Flink。主要涉及企业应用的最佳实践和深入源码级别的性能优化经验,让企业学员能够在学习完这些大数据技术知识后,具备将其应用到实际生产环境中的能力,通过短时间的技术学习,为公司创造价值和提高技术生产的效率。
此课程共三天,第一天为Spark,HBase的实战、性能优化、源码解析;第二天为Elasticsearch的企业实践方法和性能优化方法;第三天为Flink的系统性知识介绍和企业实战项目。
目标
充分了解业界最新的大数据技术
课程时长
3天(18H)
分享对象
本课程不仅适合大数据 Hadoop, Flink, Spark 相关从业人员,同时也适合热爱或者希望未来从事大数据相关工作的在校学生,软件开发工程师,运维工程师以及架构师学习。通过本课程,学员将能够快速熟悉和掌握大数据利器,在生产中解决实际问题。
分享提纲
时间 | 主题 | 内容 |
第一天 | 一、Spark Streaming & Spark SQL 实战和性能优化实践 | 1. Spark RDD 原理和源码深入分析 1.1 有向无环图(Directed Acyclic Graph,DAG) 1.1.1 什么是DAG 1.1.2 DAG的生成机制 1.1.3 DAG的逻辑视图 1.2 RDD内部的计算机制 1.2.1 RDD的计算任务(Task) 1.2.2 RDD的计算过程 1.3 RDD中缓存的适用场景和工作机制 1.3.1 缓存的使用 1.3.2 缓存的适用场景 1.3.3 缓存工作机制解析 1.4 RDD的检查点(Checkpoint)的适用场景和工作机制 1.4.1 Checkpoint的触发 1.4.2 Checkpoint的适用场景 1.4.3 Checkpoint工作机制解析 1.5 RDD容错原理及其四大核心要点 1.5.1 RDD容错原理 1.5.2 RDD容错的四大核心要点
2. Spark调度器(Scheduler)运行机制 2.1 Spark运行的核心概念 2.1.1 Spark运行的基本对象 2.1.2 Spark运行框架及各组件的基本运行原理 2.2 Spark Driver Program剖析 2.2.1 什么是Spark Driver Program 2.2.2 SparkContext原理剖析 2.2.3 SparkContext源代码解析 2.3 Spark Job的触发 2.3.1 Job的逻辑执行(General Logical Plan) 2.3.2 Job具体的物理执行 2.3.3 Job触发流程源代码解析 2.4 高层的DAG调度器(DAGScheduler) 2.4.1 DAG的定义 2.4.2 DAG的实例化 2.4.3 DAGScheduer划分Stage的原理 2.4.4 DAGScheduer划分Stage的具体算法 2.4.5 Stage内部Task获取最佳位置的算法 2.5 底层的Task调度器(TaskScheduler) 2.5.1 TaskScheduer原理剖析 2.5.2 TaskScheduer源代码解析 2.6 调度器的通信终端(SchedulerBackend) 2.6.1 SchedulerBackend原理 2.6.2 SchedulerBackend源代码解析 2.6.3 Spark程序的注册机制 2.6.4 Spark程序对计算资源Executor的管理
3. 执行器(Executor) 3.1Executor的创建、分配、启动及异常处理 3.1.1Executor的创建 3.1.2Executor的资源分配 3.1.3Executor的启动 3.1.4Executor的异常处理 3.2执行器的通信接口(ExecutorBackend) 3.2.1ExecutorBackend接口与Executor的关系 3.2.2ExecutorBackend的不同实现 3.2.3ExecutorBackend中的通信 3.3执行器(Executor)中任务的执行 3.3.1Executor中任务的加载 3.3.2Executor中的任务线程池 3.3.3任务执行失败处理 3.3.4剖析TaskRunner
4. Spark Shuffle机制 4.1 Shuffle概述 4.2 Shuffle的框架 4.2.1 Shuffle的框架演进 4.2.2 Shuffle的框架内核 4.2.3 Shuffle框架的源代码解析 4.2.4 Shuffle 的注册 4.2.5 Shuffle读写数据的源代码解析 4.3 基于Hash的Shuffle 4.3.1 基于Hash的Shuffle内核 4.3.2 基于Hash的Shuffle写数据的源代码解析 4.4 基于Sort的Shuffle 4.4.1 基于Sort的Shuffle内核 4.4.2 基于Sort的Shuffle写数据的源代码解析 4.5 基于Tungsten Sort的Shuffle 4.5.1 基于Tungsten Sort的Shuffle内核 4.5.2 基于Tungsten Sort的Shuffle写数据的源代码解析 4.6 小结第8章钨丝计划(Project Tungsten)
5. Spark SQL 执行全过程概述 5.1 从 SQL 到 RDD:一个简单的案例 5.2 重要概念 5.2.1 InternalRow 体系 5.2.2 TreeNode 体系 5.2.3 Expression 体系 5.3 内部数据类型系统
6. Spark SQL 编译器 Parser 6.1 DSL 工具之 ANTLR 简介 6.1.1 基于 ANTLR 4 的计算器 6.1.2 访问者模式 6.2 SparkSqlParser 之 AstBuilder 6.3 常见 SQL 生成的抽象语法树概览
7. Spark SQL 逻辑计划(LogicalPlan) 7.1 Spark SQL 逻辑计划概述 7.2 LogicalPlan 简介 7.2.1 QueryPlan 概述 7.2.2 LogicalPlan 基本操作与分类 7.2.3 LeafNode 类型的 LogicalPlan 7.2.4 UnaryNode 类型的 LogicalPlan 7.2.5 BinaryNode 类型的 LogicalPlan 7.2.6 其他类型的 LogicalPlan 7.3 AstBuilder 机制:Unresolved LogicalPlan 生成 7.4 Analyzer 机制:Analyzed LogicalPlan 生成 7.4.1 Catalog 体系分析 7.4.2 Rule 体系 7.4.3 Analyzed LogicalPlan 生成过程 7.5 Spark SQL 优化器 Optimizer 7.5.1 Optimizer 概述 7.5.2 Optimizer 规则体系 7.5.3 Optimized LogicalPlan 的生成过程
8. Spark SQL 物理计划(PhysicalPlan) 8.1 Spark SQL 物理计划概述 8.2 SparkPlan 简介 8.2.1 LeafExecNode 类型 8.2.2 UnaryExecNode 类型 8.2.3 BinaryExecNode 类型 8.2.4 其他类型的 SparkPlan 8.3 Metadata 与 Metrics 体系 8.4 Partitioning 与 Ordering 体系 8.4.1 Distribution 与 Partitioning 的概念 8.4.2 SparkPlan 的常用分区排序操作 8.5 SparkPlan 生成 8.5.1 物理计划 Strategy 体系 8.5.2 常见 Strategy 分析 8.6 执行前的准备 8.6.1 PlanSubqueries 规则 8.6.2 EnsureRequirements 规则
9. Spark SQL 之 Aggregation 实现 9.1 Aggregation 执行概述 9.1.1 文法定义 9.1.2 聚合语句 Unresolved LogicalPlan 生成 9.1.3 从逻辑算子树到物理算子树 9.2 聚合函数(AggregateFunction) 9.2.1 聚合缓冲区与聚合模式(AggregateMode) 9.2.2 DeclarativeAggregate 聚合函数 9.2.3 ImperativeAggregate 聚合函数 9.2.4 TypedImperativeAggregate 聚合函数 9.3 聚合执行 9.3.1 执行框架 AggregationIterator 9.3.2 基于排序的聚合算子 SortAggregateExec 9.3.3 基于 Hash 的聚合算子 HashAggregateExec 9.4 窗口(Window)函数 9.4.1 窗口函数定义与简介 9.4.2 窗口函数相关表达式 9.4.3 窗口函数的逻辑计划阶段与物理计划阶段 9.4.4 窗口函数的执行
10. Spark SQL 之 Join 实现 10.1 Join 查询概述 10.2 文法定义与抽象语法树 10.3 Join 查询逻辑计划 10.3.1 从 AST 到 Unresolved LogicalPlan 10.3.2 从 Unresolve LogicalPlan 到 Analyzed LogicalPlan 10.3.3 从 Analyzed LogicalPlan 到 Optimized LogicalPlan 10.4 Join 查询物理计划 10.4.1 Join 物理计划的生成 10.4.2 Join 物理计划的选取 10.5 Join 查询执行 10.5.1 Join 执行基本框架 10.5.2 BroadcastJoinExec 执行机制 10.5.3 ShuffledHashJoinExec 执行机制 10.5.4 SortMergeJoinExec 执行机制 |
二、HBase 实战和性能优化 | 1. 深入HBase原理 1.1 数据模型 1.2 HBase是怎么存储数据的 1.3 预写日志 WAL 1.4 MemStore 1.5 HFile( StoreFile) 1.6 KeyValue类 1.7 数据读写 1.8 Region
2. 过滤器与协处理器 2.1 过滤器 2.1.1 过滤器快速入门 2.1.2 比较运算快速入门 2.1.3 分页过滤器 2.1.4 过滤器列表 2.1.5 行键过滤器 2.1.6 列过滤器 2.1.7 单元格过滤器 2.1.8 装饰过滤器 2.2 协处理器(coprocessor) 2.2.1 协处理器家族 2.2.2 快速入门 2.2.3 如何加载 2.2.4 协处理器核心类 2.2.5 观察者(Observers) 2.2.6 终端程序(EndPoint)
3. HBase 性能调优 3.1 Master和RegionServer的JVM调优 3.2 Region的拆分 3.3 Region的合并(merge) 3.4 WAL的优化 3.5 BlockCache的优化 3.6 Memstore的优化 3.7 HFile(StoreFile)的合并(Compaction)
4. HBase 实战 4.1 Spark与HBase结合实现广告展现流与广告点击流关联
1. 电商运营实时分析系统 1.1 实时统计指标 1.2 聚合统计实现 2.广告点击率统计系统 2.1 广告展示,点击模型,CTR指标 2.2 展示流和点击流的关联方式 2.3 Spark + HBase + MySQL的架构和实现 3.企业级实时数据仓库 3.1 数据仓库模型设计 3.2 数据仓库的实时ETL 3.3 数据仓库的聚合表 3.4 数据仓库的纬度表关联 | |
第二天 | 三、Elasticsearch 企业最佳实践 | 1. 索引管理 1.1 索引管理 1.1.1 创建索引 1.1.2 删除索引 1.1.3 获取索引 1.1.4 打开/关闭索引 1.2 索引映射管理 1.2.1 增加映射 1.2.2 获取映射 1.2.3 获取字段映射 1.2.4 判断类型是否存在 1.3 索引别名 1.4 索引配置 1.4.1 更新索引配置 1.4.2 获取配置 1.4.3 索引分析 1.4.4 索引模板 1.4.5 复制配置 1.4.6 重建索引 1.5 索引监控 1.5.1 索引统计 1.5.2 索引分片 1.5.3 索引恢复 1.5.4 索引分片存储 1.6 状态管理 1.6.1 清除缓存 1.6.2 索引刷新 1.6.3 冲洗 1.6.4 合并索引 1.7 文档管理 1.7.1 增加文档 1.7.2 更新删除文档 1.7.3 查询文档 1.7.4 多文档操作 1.7.5 索引词频率 1.7.6 查询更新接口
2. 搜索 2.1 深入搜索 2.1.1 搜索方式 2.1.2 重新评分 2.1.3 滚动查询请求 2.1.4 隐藏内容查询 2.1.5 搜索相关函数 2.1.6 搜索模板 2.2 查询DSL 2.2.1 查询和过滤的区别 2.2.2 全文搜索 2.2.3 字段查询 2.2.4 复合查询 2.2.5 连接查询 2.2.6 地理查询 2.2.7 跨度查询 2.2.8 高亮显示 2.3 简化查询
3. 聚合 3.1 聚合的分类 3.2 度量聚合 3.2.1 平均值聚合 3.2.2 基数聚合 3.2.3 最大值聚合 3.2.4 最小值聚合 3.2.5 和聚合 3.2.6 值计数聚合 3.2.7 统计聚合 3.2.8 百分比聚合 3.2.9 百分比分级聚合 3.2.10 最高命中排行聚合 3.2.11 脚本度量聚合 3.2.12 地理边界聚合 3.2.13 地理重心聚合 3.3 分组聚合 3.3.1 子聚合 3.3.2 直方图聚合 3.3.3 日期直方图聚合 3.3.4 时间范围聚合 3.3.5 范围聚合 3.3.6 过滤聚合 3.3.7 多重过滤聚合 3.3.8 空值聚合 3.3.9 嵌套聚合 3.3.10 采样聚合 3.3.11 重要索引词聚合 3.3.12 索引词聚合 3.3.13 总体聚合 3.3.14 地理点距离聚合 3.3.15 地理散列网格聚合 3.3.16 IPv4范围聚合 3.4 管道聚合 3.4.1 平均分组聚合 3.4.2 移动平均聚合 3.4.3 总和分组聚合 3.4.4 总和累计聚合 3.4.5 最大分组聚合 3.4.6 最小分组聚合 3.4.7 统计分组聚合 3.4.8 百分位分组聚合 3.4.9 差值聚合 3.4.10 分组脚本聚合 3.4.11 串行差分聚合 3.4.12 分组选择器聚合
4. 集群管理 4.1 集群节点监控 4.1.1 集群健康值 4.1.2 集群状态 4.1.3 集群统计 4.1.4 集群任务管理 4.1.5 待定集群任务 4.1.6 节点信息 4.1.7 节点统计 4.2 集群分片迁移 4.3 集群节点配置 4.3.1 主节点 4.3.2 数据节点 4.3.3 客户端节点 4.3.4 部落节点 4.4 节点发现 4.4.1 主节点选举 4.4.2 故障检测 4.5 集群平衡配置 4.5.1 分片分配设置 4.5.2 基于磁盘的配置 4.5.3 分片智能分配 4.5.4 分片配置过滤 4.5.5 其他集群配置
5. ES源码分析与性能优化-写流程 5.1 文档操作的定义 5.2 可选参数 5.3 Index/Bulk基本流程 5.4 Index/Bulk详细流程 5.4.1 协调节点流程 5.4.2 主分片节点流程 5.4.3 副分片节点流程 5.5 I/O异常处理 5.5.1 Engine关闭过程 5.5.2 Master的对应处理 5.5.3 异常流程总结 5.6 系统特性 5.7 思考
6. ES源码分析与性能优化-Search流程 6.1 索引和搜索 6.1.1 建立索引 6.1.2 执行搜索 6.2 search type 6.3 分布式搜索过程 6.3.1 协调节点流程 6.3.2 执行搜索的数据节点流程 6.4 小结
7. ES源码分析与性能优化-Allocation模块分析 7.1 什么是allocation 7.2 触发时机 7.3 allocation模块结构概述 7.4 allocators 7.5 deciders 7.5.1 负载均衡类 7.5.2 并发控制类 7.5.3 条件限制类 7.6 核心reroute实现 7.6.1 集群启动时reroute的触发时机 7.6.2 流程分析 7.6.3 gatewayAllocator 7.6.4 shardsAllocator 7.7 从gateway到allocation流程的转换 7.8 从allocation流程到recovery流程的转换
8. ES源码分析与性能优化-Cluster模块分析 8.1 集群状态 8.2 内部封装和实现 8.2.1 MasterService 8.2.2 ClusterApplierService 8.2.3 线程池 8.3 提交集群任务 8.3.1 内部模块如何提交任务 8.3.2 任务提交过程实现 8.4 集群任务的执行过程 8.5 集群状态的发布过程 8.5.1 增量发布的实现原理 8.5.2 二段提交总流程 8.5.3 发布过程 8.5.4 提交过程 8.5.5 异常处理 8.6 应用集群状态 8.7 查看等待执行的集群任务 8.8 任务管理API 8.8.1 列出运行中的任务 8.8.2 取消任务 |
第三天 | 四、Flink企业最佳实践 | 1.流式处理架构 1.1 流式处理背景及架构介绍 1.2 流式处理行业案例以及Flink的适用场景及应用概述
2.Flink概述 2.1 什么是Flink 2.2 Flink架构 2.3 Flink 与 Spark的比较以及为什么选择Flink 2.4 Flink开发环境配置和搭建
3.Flink编程模型 3.1 数据集类型 3.2 Flink编程接口 3.3 Flink程序结构 3.4 Flink数据类型
4.DataStream API介绍与使用 4.1 DataStream编程模型 4.2 Flink Execution 参数 4.3 Transformation 4.4 时间概念与Watermark 4.5 Windows窗口计算 4.6 作业链和资源组 4.7 Asynchronous I/O异步API 4.8 Asynchronous I/O异步原理
5.Flink Connector数据源 5.1 FlinkKafkaSource序列化、消费模式 5.2 FlinkKafkaSource容错、动态分区及topic 5.3 FlinkKafkaSink序列化、配置、分区与容错 5.4自定义Source和Sink
6.DataSet API介绍与使用 6.1 DataSet API,Transformation 6.2 迭代计算 6.3 广播变量与分布式缓存 6.4 语义注解 6.5 DataSetUtils工具类
7.Table API & SQL介绍与使用 7.1 TableEnviroment概念 7.2 Flink Table API 7.3 Flink SQL使用 7.4 自定义函数 7.5 自定义数据源
8.两个完整的Flink实现案例: 8.1 Kafka 数据流处理,写入HDFS 8.2多源数据关联与聚合分析
9.Flink有状态的计算、状态管理和容错 9.1 什么是有状态计算 9.2 有状态计算中的数据一致性挑战 9.3 理解state状态 9.4 Operator State 的使用及Redistribute 9.5 Keyed State的使用与Redistribute 9.6 Broadcast State的妙用 9.7 Checkpoint核心原理剖析 9.8 Checkpoint使用条件及使用步骤 9.9 Checkpoint相关配置及重启策略 9.10 Savepoint的触发、Job恢复及删除
10.实战项目1:用Flink实现一个通用、配置化的海量数据流、批处理产品。 10.1实现配置管理 10.2实现数据源加载 10.3实现主流程控制 10.4实现任务管理
11.Flink部署与应用 11.1 Flink集群部署 11.2 Flink高可用配置 11.3 Flink安全管理 11.4 Flink集群升级 11.5 Flink on Yarn的原理和运行方式 11.6 Flink on Yarn 提交任务与停止任务
12.Flink监控与性能优化 12.1 监控指标 12.2 Backpressure监控与优化 12.3 Checkpointing监控与优化 12.4 Flink内存优化
13.Flink组件栈介绍与使用 13.1 Flink复杂事件处理 13.2 Flink Gelly图计算应用 13.3 FlinkML机器学习应用 13.4 Flink Metrics 与监控
14.Flink源码学习 14.1 Flink源码编译 14.2 如何阅读和学习Flink源码 14.3 Flink源码实现思路以及依赖管理 14.4 Flink核心模块源码带读与分析
15.Flink在各大互联网公司的典型应用剖析 15.1Flink在阿里的应用 15.2Flink在字节跳动的应用 15.3Flink在腾讯的应用 15.4Flink在微博的应用 15.5Flink在其他互联网公司的应用 15.6Flink 最佳实践
16.实战项目2:使用Flink实现电商用户支付行为分析和审计风控 16.1电商支付数据模型(订单,流水,账户余额,发现表) 16.2用户行为分析需求与维度指标设计 16.3审计风控的需求与实现思路 16.4Flink代码实现结构与业务逻辑细节拆解 |
Gary
百林哲咨询(北京)有限公司专家团队成员
Gary
百林哲咨询(北京)有限公司专家团队成员
Gary
百林哲咨询(北京)有限公司专家团队成员
Gary
百林哲咨询(北京)有限公司专家团队成员
Gary
百林哲咨询(北京)有限公司专家团队成员