Spark Streaming HA
Driver HA:
1、在提交application的时候,添加 --supervise 选项,如果Driver挂掉,会自动启动一个Driver
2、代码层面恢复Driver
3、在恢复checkpoint中数据的时候,把旧的逻辑也一起给恢复了
主要的作用就是当SparkStreaming 停机之后,下次启动的时候,让代码知道上一次停机的数据处理节点在什么地方,避免从头开始执行
代码逻辑如下:
object SparkStreamingDriverHA { /** * Driver HA : * 1、在提交application的时候, 添加 --supervise选项, 如果Driver挂掉,会自动启动一个Driver * 2、代码层面恢复Driver * 3、在恢复的同时,如果新添加了处理逻辑,会将旧的处理逻辑恢复 * @param args */ //设置checkpoint目录: val ckDir = "./data/streamingCheckpoint" def main(args: Array[String]): Unit = { /** * StreamingContext.getorCreate(ckDir,CreateStreamingContext) * 这个方法首先会从CKDir目录中获取StreamingContext【因为StreamingContext是序列化存储在checkpoint中,回复时会尝试反序列化这些object】 * 如果用修改过的class可能会导致错误,此时需要跟换checkpoibt目录或者删除checkpoint目录中的数据,程序才能跑起来 * */ val ssc = StreamingContext.getOrCreate(ckDir, CreateStreamingContext) ssc.start() ssc.awaitTermination() ssc.stop() } def CreateStreamingContext(): StreamingContext = { println("=============create new StreamingContext===============") val conf = new SparkConf() conf.setMaster("local") conf.setAppName("DriverHA") val ssc = new StreamingContext(conf, Durations.seconds(5)) ssc.sparkContext.setLogLevel("Error") /** * 默认checkpoint存储 * 1、配置信息 * 2、DStream操作逻辑 * 3、job的执行进度 * 4、offset */ ssc.checkpoint(ckDir) val lines = ssc.textFileStream("./data/streamingCopyFile") val words = lines.flatMap(line=> {line.split(" ")}) val pairWords = words.map(word=>{(word,1)}) val result = pairWords.reduceByKey((v1:Int,v2:Int)=>{v1+v2}) /* result.print()*/ /** * 更改逻辑 * * */ result.foreachRDD(pairRdd=>{ pairRdd.filter(one=>{ println("===========filter============") true }).foreach(println) }) ssc }
当重启之后,如果checkpoint记录了上一次的sparkContext,就会按照上一次的执行逻辑执行,否则就按照最新的执行逻辑去执行
val ssc = StreamingContext.getOrCreate(ckDir, CreateStreamingContext)
CKDir: 可以找到上一次停止时的执行位置
CreateStreamingContext: 在checkpoint文件夹中没有数据的情况下,会按照最新的代码逻辑进行数据执行 ,CreateStreamingContext方法就代表最新的执行逻辑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!