Spark Streaming控制每秒消费数据的速度
通过spark.streaming.kafka.maxRatePerPartition参数来设置Spark Streaming从kafka分区每秒拉取的条数
Spark Streaming的状态操作
在Spark Streaming中存在两种状态操作
UpdateStateByKey
Windows操作
使用有状态的transformation,需要开启Checkpoint
spark streaming 的容错机制
它将足够多的信息checkpoint到某些具备容错性的存储系统如hdfs上,以便出错时能够迅速恢复
Spark Streaming精准一次消费
- 手动维护偏移量
- 处理完业务数据后,再进行提交偏移量操作
运行模式(cluster模式和client模式)
1.cluster模式
./bin/spark-submit --class org.apache.spark.examples.SparkPi
–master yarn
–deploy-mode cluster
–driver-memory 1g
–executor-memory 1g
–executor-cores 2
–queue default
lib/spark-examples*.jar
或
./bin/spark-submit --class cn.edu360.spark.day1.WordCount
–master yarn
–deploy-mode cluster
–driver-memory 1g
–executor-memory 1g
–executor-cores 2
–queue default
/home/bigdata/hello-spark-1.0.jar
hdfs://node-1.edu360.cn:9000/wc hdfs://node-1.edu360.cn:9000/out-yarn-1
2.client模式
./bin/spark-submit --class org.apache.spark.examples.SparkPi
–master yarn
–deploy-mode client
–driver-memory 1g
–executor-memory 1g
–executor-cores 2
–queue default
lib/spark-examples*.jar \
Spark容错性分析
4.1 Worker容错:
同Spark:worker挂了将会导致partition失效,如果task依赖的上层partition数据已经失效了,则会先将其依赖的partition计算任务再重算一遍。
4.2 Driver容错:
1.Driver的出错情况
(1)当数据源(InputStream)是HDFS时,driver数据恢复机制不重要
(2)当数据源是kafka、Flume时,由于数据被worker executor接收至内存中,若driver挂了,executor内存中的数据就不可用了,此时需要容错机制——主要依赖预写日志(WAL)和持久化日志。
checkpointing机制
spark streaming主要机制checkpointing,它将数据存储在一个可靠的文件系统,比如hdfs.我们将会讨论怎样设置自动重启应用程序.
spark1.1仅支持Java和Scala。spark1.2支持Python,尽管如此它支持仅text数据。
checkpoint的作用,用于恢复数据。它会定期保存状态到可靠的文件系统比如hdfs,s3
比如你每5-10批数据设置checkpointing。当发生丢失数据的时候,Spark Streaming最近的checkpoint.
Spark Streaming 一个stage耗时
Spark Streaming stage耗时由最慢的task决定,所以数据倾斜时某个task运行慢会导致整个Spark Streaming都运行非常慢。
系统组件
- Master:记录DStream之间的依赖关系或者血缘关系,并负责任务调度以生成新的RDD
- Worker:从网络接收数据,存储并执行RDD计算
- Client:负责向Spark Streaming中灌入数据
Network Input Tracker:跟踪每一个网络received数据,并且将其映射到相应的input DStream上 - Job Scheduler:周期性的访问DStream Graph并生成Spark Job,将其交给Job Manager执行
- Job Manager:获取任务队列,并执行Spark任务
Spark Streaming 优雅关闭
把spark.streaming.stopGracefullyOnShutdown参数设置成ture,Spark会在JVM关闭时正常关闭StreamingContext,而不是立马关闭
Kill 命令:yarn application -kill 后面跟 applicationid
启动WAL的配置
(1)给StreamingContext设置checkpoint的目录,该目录必须是HADOOP支持的文件系统,用来保存WAL和做Streaming的checkpoint
(2)Spark.Streaming.receiver.writeAheadLog.enable 设置为true
Spark性能优化
- 多个Action计算最好基于同一个RDD进行计算操作, 并且对相同的RDD进行Cache操作,避免重复计算,增加任务的执行时间;并且持久化级别最好使用MEMORY_ONLY_SER来减少内存使用;
- 在使用join的地方看是否可以使用map算子和广播变量的方式替代;
- 使用高效的算子, 例如:使用reduceByKey/aggregateByKey来代替groupByKey,因为前者可以进行combiner操作,减少网络IO;
使用MapPartition来代替Map操作, 尤其是在需要网络连接的地方; - 使用foreachPartition代替foreach操作,可以对数据进行批量处理;
- 在filter操作后,可以使用colease操作,可以减少任务数;
- 序列化尽量使用Kyro方式, 其性能更好;
- 减少对复杂数据结构的使用,可以有效减少序列化时间;
- 对应简单的函数,最好使用闭合结构,可以有效减少网络IO;
- 使用Repartition操作可以有效增加任务的处理并行度;