ark培训内容
第一天第1堂课:Spark的架构设计
1.1 Spark的速度为什么如此的快?
1.2 Spark的架构设计剖析
1.3 RDD计算流程解析
RDD包含以下成员方法或属性:1、compute方法 提供在计算过程中Partition元素的获取与计算方式
2、partition的列表 每一个partition代表一个并行的最小划分单元;
3、dependencies列表 描述RDD依赖哪些父RDD生成,即RDD的血缘关系;
4、partition的位置列表 定义如何最快速的获取partition的数据,加快计算,这个是可选的,可作为本地化计算的优化选项;
5、partitioner方法 定义如何对数据进行分区。RDD包含多个Partition(分区),每个Partition代表一部分数据并位于一个计算节点。既然RDD不携带数据,那么数据是何时加载的?怎么加载的?怎么分布到不同计算节点的?不同类型的RDD是怎么完成转换的?RDD真正的计算由RDD的action 操作触发,对于action操作之前的所有Transformation 操作,Spark只记录Transformation的RDD生成轨迹,即各个RDD之间的相互依赖关系。Spark RDD的计算方式为:spark是从最后一个RDD开始计算(调用compute),计算时寻找父RDD,若父RDD在内存就直接使用,否则调用父RDD的compute计算得出,以此递归,过程可抽象为下图:
从对象产生的顺序看,先生成了HadoopRDD,调用两次map方法后依次产生两个MapPartitionsRDD;从执行的角度看,先执行最后一个RDD的compute方法,在计算过程中递归执行父RDD的compute,以生成对应RDD的数据;从数据加载角度看,第一个构造出来的RDD在执行compute时才会将数据载入内存(本例中为HDFS读入内存),然后在这些数据上执行用户传入的方法,依次生成子RDD的内存数据。
1.4 Spark的出色容错机制在RDD计算,通过checkpoint进行容错,做checkpoint有两种方式:
数据检查点(checkpoint data)和记录数据的更新(logging the updates)
用户可以控制采用哪种方式来实现容错,默认是logging the updates方式,通过记录跟踪所有生成RDD的转换(transformations)也就是记录每个RDD的lineage(血统)来重新计算生成丢失的分区数据。
使用很简单,就是设置一下 checkpoint 目录,然后再rdd上调用 checkpoint 方法, action 的时候就对数据进行了 checkpoint。
第2堂课:实战使用三种语言开发Spark
2.1 Scala简介、为什么Spark会使用Scala作为开发语言?
2.2 在Spark中使用Scala
2.3 使用Java开发Spark程序
2.4 使用Python开发Spark程序
2.5 深入使用Spark Shell
第3堂课:快速掌握Scala
3.1 Scala变量声明、操作符、函数的使用实战
3.2 apply方法
3.3 Scal的控制结构和函数
3.4 Scala数组的操作、Map的操作
3.5 Scala中的类
3.6 Scala中对象的使用;
3.7 Scala中的继承
3.8 Scala中的特质
3.9 Scala中集合操作
第4堂课:Spark集群的安装和设置
4.1 在一台机器上运行Spark
4.2 在EC2上运行Spark
4.3 在Mesos上部署Spark
4.4 在YARN上部署Spark
4.5 通过SSH在众多机器上部署Spark
4.6 Spark集群设置
第5堂课:SparkContext解析和数据加载以及存储
5.1 源码剖析SparkContext
5.2 Scala、Java、Python使用SparkContext
5.4 加载数据成为RDD5.5 把数据物化
第6堂课:深入实战RDD
6.1 DAG
6.2 深入实战各种Scala RDDFunction
6.3 Spark Java RDD Function
6.4 RDD的优化问题
第二天第7堂课:Shark的原理和使用
7.1 Shark与Hive
7.2 安装和配置Shark
7.3 使用Shark处理数据
7.4 在Spark程序中使用SharkQueries
7.5 SharkServer
7.6 思考Shark架构
第8堂课:Spark的机器学习
8.1 LinearRegression
8.2 K-Means
8.3 Collaborative Filtering
第9堂课:Spark实时流处理
9.1 DStream
9.2 transformation
9.3 checkpoint
9.4 性能优化
第10堂课:Spark程序的测试
10.1 编写可测试的Spark程序
10.2 Spark测试框架解析
10.3 Spark测试代码实战
第11堂课:Spark的优化
11.1 Logs
11.2 并发
11.3 内存
11.4 垃圾回收
11.5 序列化
11.6 安全
第12堂课:Spark项目案例实战
12.1 Spark项目的最佳架构模式
12.2 案例的介绍和架构
12.3 案例的源码实现
12.4 调优
Apache Flink 学习目录1、Flink 介绍
1.1 关于Apache Flink
1.2 Flink 和 Spark 的对比
1.3 怎样在Flink社区做贡献
1.4 Flink 与其他实时计算框架对比
2、Flink 的基本概念与部署
2.1 编程模型
2.2 对比DataSet API &DataStream API & Table & SQL API
2.3 部署方式
2.4 基本Source 有哪些?
2.5 基本 SInk 有哪些?
3、Flink 状态管理
3.1 状态
3.2 容错
4、DataStream API的介绍和使用
4.1 Window 和 Time
4.2 Watermark 介绍
4.3 Kafka Connector
5、Batch Processing API的介绍和使用
5.1 Data Sinks
6、Table API的介绍和使用
6.1 Table 的注册6.2 常用的 Operators
7、Complex EventProcssing的介绍
8、Flink on Yarn
8.1 使用Ambari 搭建Flink 集群
8.2 Flink on Yarn 提交用例
9、Flink Metrics与监控
9.1 Flink metrics理解与使用
9.2 常用metrics指标含义讲解
9.3 延迟反压监控
9.4 结合Prometheus构建诊断系统
MapReduce和Spark的Shuffle过程对比MapReduceSparkcollect在内存中构造了一块数据结构用于map输出的缓冲没有在内存中构造一块数据结构用于map输出的缓冲,而是直接把输出写到磁盘文件sortmap输出的数据有排序map输出的数据没有排序merge对磁盘上的多个spill文件最后进行合并成一个输出文件在map端没有merge过程,在输出时直接是对应一个reduce的数据写到一个文件中,这些文件同时存在并发写,最后不需要合并成一个copy框架jettynetty或者直接socket流对于本节点上的文件仍然是通过网络框架拖取数据不通过网络框架,对于在本节点上的map输出文件,采用本地读取的方式copy过来的数据存放位置先放在内存,内存放不下时写到磁盘一种方式全部放在内存; 另一种方式先放在内存merge sort最后会对磁盘文件和内存中的数据进行合并排序对于采用另一种方式时也会有合并排序的过程