Spark基本原理(二)

1、关于Spark的调优部分

1)更好的序列化实现:在Spark中,需要序列化的地方包括写入磁盘、Worker之间传输RDD等。默认的Java序列化性能比较低,所以将序列化的方式修改为kryo;

2)配置多个临时文件的目录:在并发性高的情况下,对一个文件的操作会影响整体的性能,为此可以创建多个文件夹,用于存放临时文件;

3)启用推测执行机制:类似于Hadoop中的Task任务处理,在某个Task处理速度明显慢时,会启用其它节点执行任务,有一个执行完就销毁掉另一个未执行完的节点;

4GC调优:原则上是减少Full GC,在调优之前,必须先检查代码部分

2、Spark的CheckPoint机制

CheckPoint的机制是建立一个检查点,类似于快照。

在Spark的RDD依赖中,若依赖的关系太长,同时没有将中间结果存储,会导致计算出错时从头再来。为此Spark中可以利用缓存机制将部分中间结果缓存起来,此时一定程度上解决了数据丢失问题。但是若存储的内存或磁盘出错,也会导致重新计算,此时出现了checkpoint机制,就是将比较重要的中间数据做一个检查点存储到一个高可用的地方。

补充:在SparkStreaming中,也存在checkpoint机制。在需要对历史数据进行累计处理,可以设置一个检查目录,在该目录中,存储历史数据。

3、Spark的数据倾斜

出现情况:join(一大一小的情况)或者groupBy(某个key出现的次数过多)

解决:使用广播变量,将小的数据转换Map进行广播,广播会将Map发送到每个节点中,合并时利用该Map进行,可以减轻数据倾斜;

groupBy出现的可以将key后添加固定格式的随机数来减轻数据倾斜

4、SparkStreaming与Storm

相同点:都是分布式、容错、可扩展的处理系统

不同点

Storm是实时数据计算,最快的处理可达10毫秒,对于数据的处理核心支持两个级别:最多一次(可能会丢失)、最少一次(保证数据不丢失)

SparkStreaming是小批量计算,处理老版本只能到达秒级,新版本可以到达毫秒级。并且数据的处理只处理一次。由于Spark平台的良好整合性,可以借助于Spark的其它模块,在开发效率上占有一定的优势。;

5、SparkStreaming的原理

SparkStreaming是将流式处理分解成一系列的短小的批处理作业,即按照batch size(如1秒)分成一段一段的数据DStream(discretized-离散化 Stream),每一段数据都转换为RDD,然后将针对SparkStreaming中的Dstream的Transformations操作转换为针对Spark RDD的Transformations操作,将RDD经过操作变成中间结果保存在内存中(也可以保存到磁盘)。

三种处理:只能处理最新的,处理历史数据(checkpoint)和最新的,处理一段时间内的(滑动窗口机制)

6、Spark的模式(简单介绍,具体请参考 https://www.jianshu.com/p/65a3476757a5

大致上分为三种:本地单机模式、Spark自带Cluster Manager的集群模式、借助于Yarn管理的集群模式。

本地单机模式:主要是为了测试代码的逻辑;

Spark自带Cluster Manager的集群模式:启动之前必须先启动Spark的Master和Worker守护进程;

基于Yarn的Resource Manager的集群模式:使用Yarn作为Spark的Cluster Manager,来为Spark的应用程序分配资源,并且启动之前需要启动Hadoop的各种服务。

 

提示:SparkSQL中的DataFrameSparkStreaming中的DStream底层都是RDD

 

 

补充:SparkSQL的介绍

SparkSQL提供了一个成为DataFrame(数据框),底层是RDD,类似于关系型数据库中的表。

引入了新的RDD类型SchemaRDD;可以混合不同来源的数据,例如将HiveQL的数据和MySQL的数据进行join;在把执行语句解析后,变成RDD的计算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章