博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark Streaming高可用HA
阅读量:2427 次
发布时间:2019-05-10

本文共 1784 字,大约阅读时间需要 5 分钟。

Spark Streaming任务在运行过程中无论是Driver还是Executor异常被中断,都有可能导致计算任务失败,进而导致数据丢失等一系列问题,为此Spark Streaming提供了高可用解决方案。

Driver高可用

Driver是Spark Streaming程序的"大脑",一旦Driver挂掉,那么整个任务都会失败。Spark Streaming HA将Driver元数据写到checkpoint目录下,如果后面因为某些原因导致Driver节点挂掉,那么可以通过读取checkpoint目录下的数据再次重启driver,然后继续运行计算程序,不会中断,不会丢失数据

代码

object WordCountHA {
val checkpointDirectory="/spark/wordcount"; def CreateContextFunc(): StreamingContext = {
val conf = new SparkConf() conf.setAppName("wordcount") conf.set("spark.streaming.receiver.writeAheadLog.enable","true"); val ssc = new StreamingContext(conf, Seconds(2)) ssc.checkpoint(checkpointDirectory) //接受数据,形成了一个DStream val dataStream: DStream[String] = ssc.socketTextStream("192.168.61.146",18888) val lineDSteram: DStream[String] = dataStream.flatMap(_.split(",")) val wordAndOneDStream: DStream[(String, Int)] = lineDSteram.map((_,1)) val result = wordAndOneDStream.updateStateByKey((values: Seq[Int], state: Option[Int]) => {
val currentCount = values.sum val lastCount = state.getOrElse(0) //在scala编程里面,最后一行代码就是返回值。 Some(currentCount + lastCount) }) result.print() ssc } def main(args: Array[String]): Unit = {
val ssc = StreamingContext.getOrCreate(checkpointDirectory, CreateContextFunc _) ssc.start() ssc.awaitTermination() ssc.stop() }

提交脚本重要参数

standalone

spark-submit --deploy-mode cluster --supervise

yarn

spark-submit --conf spark.yarn.maxAppAttempts=1 --deploy-mode cluster ...# spark.yarn.maxAppAttempts表示spark job最大重试次数
RDD高可用,拒绝数据丢失

为了防止Executor异常退出导致数据丢失,Spark Streaming提供了WAL(预写日志)机制。

Receiver只要接收到数据,会立即将数据写入一份到高可用文件系统(一般是HDFS)上的checkpoint目录中,这样无论程序怎么挂掉,数据都不会丢失。

设置方法

val conf = new SparkConf()conf.set("spark.streaming.receiver.writeAheadLog.enable ","true");

转载地址:http://orcmb.baihongyu.com/

你可能感兴趣的文章
虚拟化精华问答 | 虚拟化技术分类
查看>>
面向过程语言和面向对象语言的差别:
查看>>
【c语言】基本数据数据类型回顾
查看>>
【c语言】写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1
查看>>
【C语言】【编程练习】字符大小写问题
查看>>
【C语言】【编程练习】判断100到200之间的素数
查看>>
【C语言】将数组A中的内容和数组B中的内容进行交换。(数组一样大)
查看>>
【C语言】实现一个简单小游戏-三子棋
查看>>
【C语言】c语言程序编译运行过程;静态链接,动态链接;
查看>>
【C语言】数据在计算机中的存储与运算
查看>>
【计算机】什么是计算机中的大端小端
查看>>
【C语言】深入理解const,volatile,static关键字
查看>>
【C语言】c/c++程序的内存是如何分配的?
查看>>
【C语言】深入理解C语言的函数调用过程
查看>>
【C语言】C语言中格式化字符的具体用法(C语言中%的那些事)
查看>>
【java】十大经典排序算法(动图演示)
查看>>
【代码规范】google开源c\c++项目代码规范
查看>>
【C语言】c语言常用的几个函数源代码【strlen,strcpy,strcat,strstr】
查看>>
【C语言】杨辉三角问题
查看>>
【C语言】size与strlen的区别解析
查看>>