`
qindongliang1922
  • 浏览: 2183759 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117530
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125921
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59896
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71301
社区版块
存档分类
最新评论

谈谈如何优雅的关闭正在运行中的Spark Streaming的流程序

阅读更多




前面的文章,已经简单提到过怎么样关闭流程序。因为Spark Streaming流程序比较特殊,所以不能直接执行kill -9 这种暴力方式停掉,如果使用这种方式停程序,那么就有可能丢失数据或者重复消费数据。

为什么呢?因为流程序一旦起来基本上是一个7*24小时的状态,除非特殊情况,否则是不会停的,因为每时每刻都有可能在处理数据,如果要停,也一定要确认当前正在处理的数据执行完毕,并且不能在接受新的数据,只有这样才能保证不丢不重。



如何优雅的关闭spark streaming呢?方式主要有三种:


第一种:全人工介入

首先程序里面设置下面的配置参数

    sparkConf.set("spark.streaming.stopGracefullyOnShutdown","true")//优雅的关闭

然后按照下面的步骤依次操作:

(1)通过Hadoop 8088页面找到运行的程序

(2)打开spark ui的监控页面

(3)打开executor的监控页面

(4)登录liunx找到驱动节点所在的机器ip以及运行的端口号

(5)然后执行一个封装好的命令
sudo ss -tanlp |  grep 5555 |awk '{print $6}'|awk  -F, '{print $2}' | sudo  xargs kill -15




从上面的步骤可以看出,这样停掉一个spark streaming程序是比较复杂的。那么有没有更加优雅的方式来停止它呢?答案是有的



第二种:使用HDFS系统做消息通知


在驱动程序中,加一段代码,这段代码的作用每隔一段时间可以是10秒也可以是3秒,扫描HDFS上某一个文件,如果发现这个文件存在,就调用StreamContext对象stop方法,自己优雅的终止自己,其实这里HDFS可以换成redis,zk,hbase,db都可以,这里唯一的问题就是依赖了外部的一个存储系统来达到消息通知的目的,如果使用了这种方式后。停止流程序就比较简单了,登录上有hdfs客户端的机器,然后touch一个空文件到指定目录,然后等到间隔的扫描时间到之后,发现有文件存在,就知道需要关闭程序了。





第三种:内部暴露一个socket或者http端口用来接收请求,等待触发关闭流程序


这种方式,需要在driver启动一个socket线程,或者http服务,这里推荐使用http服务,因为socket有点偏底层处理起来稍微复杂点,如果使用http服务,我们可以直接用内嵌的jetty,对外暴露一个http接口,spark ui页面用的也是内嵌的jetty提供服务,所以我不需要在pom里面引入额外的依赖,在关闭的时候,找到驱动所在ip,就可以直接通过curl或者浏览器就直接关闭流程序。

找到驱动程序所在的ip,可以在程序启动的log中看到,也可以在spark master ui的页面上找到。这种方式不依赖任何外部的存储系统,仅仅部署的时候需要一个额外的端口号用来暴露http服务。




至此,关于优雅的停止spark streaming的主流方式已经介绍完毕,推荐使用第二种或者第三种,如果想要最大程度减少对外部系统的依赖,推荐使用第三种方式。

关于具体第二种和第三种的样例代码,下篇文章会整理一下放在github中给大家参考。


有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
0
0
分享到:
评论

相关推荐

    基于Spark Streaming的大数据实时流计算平台和框架,并且是基于运行在yarn模式运行的spark streaming

    一个完善的Spark Streaming二次封装开源框架,包含:实时流任务调度、...基于Spark Streaming的大数据实时流计算平台和框架(包括:调度平台,开发框架,开发demo),并且是基于运行在yarn模式运行的spark streaming

    spark Streaming和structed streaming分析

    Apache Spark Streaming是Apache Spark用于处理实时流数据的一个组件。它允许用户使用Spark的高度抽象概念处理实时数据流,并且可以轻松地与存储解决方案、批处理数据和机器学习算法集成。Spark Streaming提供了一种...

    深入理解SparkStreaming执行模型

    Spark Streaming是Apache Spark的重要组成部分,它提供了一种高吞吐量、可容错的实时数据...通过识别和解决性能瓶颈,以及与外部系统的有效集成,Spark Streaming可以构建出能够处理大规模实时数据流的强大应用程序。

    Spark Streaming实时流处理项目实战.rar.rar

    Spark Streaming是中国大数据技术领域中广泛使用的实时数据处理框架,它基于Apache Spark的核心设计,提供了对持续数据流的微批处理能力。本项目实战旨在帮助读者深入理解和应用Spark Streaming,通过实际操作来掌握...

    SparkStreaming预研报告

    Spark Streaming预研报告覆盖了Apache Spark Streaming的主要方面,包括其简介、架构、编程模型以及性能调优。以下是基于文档提供内容的详细知识点: 1. Spark Streaming简介与渊源 Spark Streaming是Spark生态中...

    kafka+spark streaming开发文档

    在将Kafka和Spark Streaming集成时,需要将Kafka的主题创建在Spark Streaming中,并且需要配置Spark Streaming的输入流,以便从Kafka中消费数据。 四、主题创建和消息发送 在Kafka中,需要创建主题,并且需要使用...

    sparkStreaming消费数据不丢失

    sparkStreaming消费数据不丢失,sparkStreaming消费数据不丢失

    Flink,Storm,Spark Streaming三种流框架的对比分析

    Flink、Storm、Spark Streaming三种流框架的对比分析 Flink架构及特性分析 Flink是一个原生的流处理系统,提供高级的API。Flink也提供API来像Spark一样进行批处理,但两者处理的基础是完全不同的。Flink把批处理...

    Flume对接Spark Streaming的相关jar包

    在大数据处理领域,Flume 和 Spark Streaming 是两个重要的工具,它们分别用于数据收集与实时流处理。本压缩包中的 jar 包是为了解决 Flume 与 Spark Streaming 的集成问题,确保数据能够从 Flume 无缝流转到 Spark ...

    SparkStreaming入门案例

    Spark Streaming 入门案例 Spark Streaming 是一种构建在 Spark 上的实时计算框架,用来处理大规模流式数据。它将从数据源(如 Kafka、Flume、Twitter、ZeroMQ、HDFS 和 TCP 套接字)获得的连续数据流,离散化成一...

    SparkStreaming流式日志过滤与分析

    (1)利用SparkStreaming从文件目录读入日志信息,日志内容包含: ”日志级别、函数名、日志内容“ 三个字段,字段之间以空格拆分。请看数据源的文件。 (2)对读入都日志信息流进行指定筛选出日志级别为error或warn...

    spark streaming

    Spark Streaming 是Apache Spark中的一个重要组件,专门设计用来处理实时数据流的计算框架。作为Spark核心API的一个扩展,它延续了Spark的易用性和高效性,能够将实时数据流处理与批量数据处理无缝集成在一起。利用...

    Hadoop原理与技术Spark Streaming操作实验

    8:提交程序到spark集群上运行 9:监测端口内容,每隔10秒钟输出一次,当有内容出现的时候,单词计数输出内容 10:退出监测,Ctrl+Z,但是这样并没有完全退出监测,到http://localhost:8080/里杀死该任务,也可以...

    spark之sparkStreaming 理解

    - **概念**:RDD是Spark中的核心数据结构,它是一种不可变的、分布式的、容错的数据集合。 - **特性**: - **分布性**:RDD可以在多台机器上进行并行计算。 - **弹性**:当内存不足时,RDD会自动将部分数据存储在...

    Spark Streaming 示例

    在这个"Spark Streaming 示例"中,我们将深入探讨如何结合 Kafka 消息中间件来实现数据流的处理。 Kafka 是一个分布式流处理平台,常用于构建实时数据管道和应用。它能够高效地存储和传输大量数据,并支持多消费者...

    spark Streaming和storm的对比

    数据在DStream中的处理方式与Spark中的RDD处理方式相似,可以应用map、reduce、join等操作。 Spark Streaming的容错机制依赖于RDD的不变性和血统依赖关系。由于每个DStream被拆分成一系列的RDD,因此可以进行精确的...

    Spark Streaming Programming Guide 笔记

    - **核心数与接收器数目的比例**:为了确保 Spark Streaming 应用程序能够有效运行,其核心数应大于接收器的数量。这是因为接收器会占用一定的核心资源来接收数据,而剩下的核心资源则用于处理数据。 - 在本地运行...

    基于 Flume+ Kafka+ Spark Streaming 实现实时监控输出日志的报警系统的 Spark Streaming 程序代码

    基于 Flume+ Kafka+ Spark Streaming 实现实时监控输出日志的报警系统的 Spark Streaming 程序代码。 基于 Flume+Kafka+Spark Streaming 实现实时监控输出日志的报警系统的 Spark Streaming 程序代码,博客链接: ...

    sparkstreaming

    Spark Streaming 是 Apache Spark 生态系统中的一个重要模块,它提供了对实时流数据进行高效处理的能力。与传统的批处理不同,Spark Streaming 能够接收来自多种数据源的实时数据流,并通过一系列高级操作(如 map、...

    06Spark Streaming原理和实践

    这些短小的批次数据称为微批次(Micro-batches),每个微批次的处理都类似于Spark中的批处理作业。这种方式使得Spark Streaming能够利用Spark的强大处理能力来处理实时数据流,同时也保持了Spark的灵活性和可扩展性。 ...

Global site tag (gtag.js) - Google Analytics