离线和实时大数据开发实战 笔记五

主要是实时计算  stream  strom和Flink都有介绍 这里主要是sprak 

Spark Core

Spark 通过引人弹性分布式数据集( RDD )以及 RDD 丰富的动作操API ,非常好地支持了 DAG 和迭代计算
Spark 通过内存计算和缓存数据非常好地支持了迭代计算和 DAG 计算的数据共享,减少了数据读取的 IO 开销,大大提高了数据处理速度。
RDD 就是一个数据集,而且是分布式的 ,也就是可分布在不同的机器上,同时 spark 还对这个分布式数据集提供了丰富的数据操作以及容错性等。
RDD 操作分为转换( transformation )和行动( action), transformation 是根据原有的 RDD 建一个新的 RDD,action 则把 RDD 操作后的结果返回给 driver 例如map是一个转换,它把数据集中的每个元素经过一个方法处理后返回一个新的 RDD, reduce 则是一个 action 它收集 RDD 所有数据后经过一些方法的处理,最后把结果返回给 driver。在 Spark 中, 所有transformation 操作都是 lazy 模式,即 Spark 不会立刻计算结果,而只是简单地记住所有对数据集的转换操作逻辑 这些转换只有遇到 action 操作的时候才会开始计算。

ROD 持久化
可以通过 persist()或者 cache()方法持久化 RDD 先在 action 中计算得到 RDD。然后将其保存在每个节点的内存中 Spark 的缓存是一个容错的技术,也就是说, 如果RDD 的任何一个分区丢失,它可以通过原有的转换( transformation )操作自动重复计算并
且创建出这个分区。

Spark Streaming 基本原理

Spark Streaming 基本的抽象是离散流(DStream)。DStream代表一个连续的数据流。在 Spark Streaming 内部中, DStream 实际上是由一系列连续的 RDD 组成的。每个RDD 包含确定时间间隔内的数据,这些离散的 RDD 在一起,共同组成了对应DStream。
从本质上来说, Spark Streaming 只不过是将流式的数据流根据设定的间隔分成了一系列的 RDD ,然后在每个 RDD 上应用相应的各种操作和动作,所以 Spark Streaming 底层的运行引擎实际上是 Spark Core。

Spark Streaming 作业的调优

 Spark Streaming 作业的调优通常都涉及作业开发的优化、并行度的优化和批大小以及内存等资源的优化等

1. 作业开发优化
1)RDD 复用:对于实时作业 ,尤其是链路较长的作业,要尽量重复使用 RDD ,而不是重复创建多个 RDD。另外,对于需要多次使用的中间 RDD ,可以将其持久化,以降低每次都需要重复计算的开销。
2)使用效率较高的 shuffle 算子:如同 Hadoop 中的作业一样,实时作业的 shuffle 操作会涉及数据重新分布,因此会耗费大量的内存、网络 和计算等资源,需要尽量降低需要 shuffle 的数据量, reduceByKey/aggregateByKey 相比 groupByKey ,会在 map
端先进行预聚合,因此效率较高。
3)类似于 Hive MapJoin :对于实时作业, join 也会涉及数据的重新分布,因此如果是大数据量的 RDD 和小数据量的 RDD 进行 join ,可以通过 broadcast与map 操作实现类似于 Hive MapJoin ,但是需要注意小数量的 RDD 不能过大,不然广播数据的开销也很大
4)其他高效的算子:如使用 mapPartitions 替代普通 map ,使用 foreachPartitions 替代foreach ,  使用repartitionAndSortWithinPartitions替代 repartition与sort 类操作等

2.平行度和批大小

对于 Spark Streaming 这种基于微批处理的实时处理框架来说,其调优不外乎两点:
1)尽量缩短每一批次的处理时间
2)设置合适的 batch size (即每批处理的数据量),使得数据处理的速度能够适配数据流人的速度。
3)设置算子合适的并行度

3.数据倾斜

Spark Streaming 的数据倾斜一般发生在 Shuffle 阶段,如同 Hadoop 一样 ,其发生的原因很简单,即在 shuffle 阶段,某个任务被分配到的数据量远远大于其他任务,在实际任务UI 监控页面常可以看到,其他任务早早完成,但是此任务经常要花很长时间才能完成甚至hang 着不动,而且有时候此任务经常还会出现内存溢出的现象
Spark Streaming 中的数据倾斜一般通过对 shuffle key “加盐”(即 add salt )优化 ,即首先随机分配 shuffle key ,然后再进行 shuffle 操作。

Beam

四大维度:
1.What are you computing           要对数据进行何种运算
2.Where in event time                   在什么窗口范围内计算
3.When in processing time           何时将结果输出 
4.How do refinements of results relate 怎么修正迟到数据

 

你可能感兴趣的:(读书笔记)