SparkStreaming优雅关闭

201.Spark(八):SparkStreaming基本概念,DStream创建,转换,输出,关闭 SparkStreaming基本概念,DStream创建,转换,输出,关闭 阅读详情

流式任务需要7*24小时执行,但是有时涉及到升级代码需要主动停止程序,但是分布式程序,没办法做到一个个进程去杀死,所以配置优雅的关闭就显得至关重要了。

关闭方式:使用外部文件系统来控制内部程序关闭。

1)主程序

package com.atguigu;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.apache.kafka.clients.consumer.ConsumerConfig;

import org.apache.kafka.clients.consumer.ConsumerRecord;

import org.apache.spark.api.java.function.FlatMapFunction;

import org.apache.spark.api.java.function.Function2;

import org.apache.spark.api.java.function.PairFunction;

import org.apache.spark.streaming.Duration;

import org.apache.spark.streaming.StreamingContextState;

import org.apache.spark.streaming.api.java.JavaDStream;

import org.apache.spark.streaming.api.java.JavaInputDStream;

import org.apache.spark.streaming.api.java.JavaPairDStream;

import org.apache.spark.streaming.api.java.JavaStreamingContext;

import org.apache.spark.streaming.kafka010.ConsumerStrategies;

import org.apache.spark.streaming.kafka010.KafkaUtils;

import org.apache.spark.streaming.kafka010.LocationStrategies;

import scala.Tuple2;

import java.net.URI;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.Iterator;

public class Test05_Close {

    public static void main(String[] args) throws InterruptedException {

        // 创建流环境

        JavaStreamingContext javaStreamingContext = new JavaStreamingContext("local[*]", "window", Duration.apply(3000L));

        // 创建配置参数

        HashMap<String, Object> map = new HashMap<>();

        map.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop102:9092,hadoop103:9092,hadoop104:9092");

        map.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");

        map.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");

        map.put(ConsumerConfig.GROUP_ID_CONFIG,"atguigu");

        map.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"latest");

        // 需要消费的主题

        ArrayList<String> strings = new ArrayList<>();

        strings.add("topicA");

        JavaInputDStream<ConsumerRecord<String, String>> directStream = KafkaUtils.createDirectStream(javaStreamingContext, LocationStrategies.PreferBrokers(), ConsumerStrategies.<String, String>Subscribe(strings,map));

        JavaDStream<String> stringJavaDStream = directStream.flatMap(new FlatMapFunction<ConsumerRecord<String, String>, String>() {

            @Override

            public Iterator<String> call(ConsumerRecord<String, String> stringStringConsumerRecord) throws Exception {

                String[] split = stringStringConsumerRecord.value().split(" ");

                return Arrays.asList(split).iterator();

            }

        });

        JavaPairDStream<String, Integer> javaPairDStream = stringJavaDStream.mapToPair(new PairFunction<String, String, Integer>() {

            @Override

            public Tuple2<String, Integer> call(String s) throws Exception {

                return new Tuple2<>(s, 1);

            }

        });

        javaPairDStream.reduceByKeyAndWindow(new Function2<Integer, Integer, Integer>() {

            @Override

            public Integer call(Integer v1, Integer v2) throws Exception {

                return v1 + v2;

            }

        },Duration.apply(12000L),Duration.apply(6000L)).print();

        // 开启监控程序

        new Thread(new MonitorStop(javaStreamingContext)).start();

        // 执行流的任务

        javaStreamingContext.start();

        javaStreamingContext.awaitTermination();

    }

    public static class MonitorStop implements Runnable {

        JavaStreamingContext javaStreamingContext = null;

        public MonitorStop(JavaStreamingContext javaStreamingContext) {

            this.javaStreamingContext = javaStreamingContext;

        }

        @Override

        public void run() {

            try {

                FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), new Configuration(), "atguigu");

                while (true){

                    Thread.sleep(5000);

                    boolean exists = fs.exists(new Path("hdfs://hadoop102:8020/stopSpark"));

                    if (exists){

                        StreamingContextState state = javaStreamingContext.getState();

                        // 获取当前任务是否正在运行

                        if (state == StreamingContextState.ACTIVE){

                            // 优雅关闭

                            javaStreamingContext.stop(true, true);

                            System.exit(0);

                        }

                    }

                }

            }catch (Exception e){

                e.printStackTrace();

            }

        }

    }

}

2)测试

(1)发送数据

[atguigu@hadoop102 ~]$ kafka-console-producer.sh --broker-list hadoop102:9092 --topic topicA

hello spark

(2)启动Hadoop集群

[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /stopSpark

自动驾驶仿真:python和carsim联合仿真案例 carsim内部有许多相关联合仿真的demo,simulink、labview等等都有涉及,这里简单介绍下python和carsim联合仿真的方法,虽然carsim官方有个Steer_Control.py相关的案例,但是感觉比较冗余,这里抽出重点部分和大家交流探讨下。提示:以下是本篇文章正文内容,下面案例可供参考1、这里关于solvers的细节其实都没说,因为里面确实也没什么内容好讲的,本质就是调用carsim.dll,如果你需要更多的函数解析其实可以看vs_api.h,路径在,具体内容如下图所示。 阅读详情

相关推荐

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 580

如何优雅的关闭spark streaming实时任务

如何优雅的关闭spark streaming实时任务

u011250186的博客 192

保姆级教程:用rosbag录制和回放你的第一个ROS机器人数据(附C++/Python代码)

本文提供了一份详细的ROS机器人数据录制与回放教程,涵盖从命令行操作到C++/Python编程实现的全流程。通过rosbag工具,开发者可以高效记录和回放机器人运行时的传感器数据和控制指令,适用于故障复现、算法调试等多种场景。教程还包含高级技巧如时间同步和大文件处理,帮助用户快速掌握ROS数据管理核心技能。

weixin_29313239的博客 283

如何优雅的关闭掉SparkStreaming

2、如果在出现突然管理,我们再去做数据预处理之后要去匹配mysql的反爬虫算法,这个时候突然关闭,这个就没办法匹配了,导致最后的结果不对,影响实时监控的识别准确性,遗漏本来应该拉黑的IP名单,我们把优雅关闭SparkStreaming参数设置成true,这样Spark在jvm福安比的时候就正常关闭context,而不是立马关闭。1、比如kafak的数据还没有消费完,突然关闭,这些数据就会被遗漏。在生产环境中,如果立马关闭,就早场一些非常严重的事情。

Freddycsf的博客 232

在 dell precision 7920 tower CentOS 8 Stream 上安裝nvidia驱动程序、Anaconda

简单记录一下如何在实验室dell precision 7920 tower CentOS 8 Stream上安装nvidia显卡驱动。

chen9046的博客 995

以太网接口及POE设计

PoE标准 Power Over Ethernet 是有源以太网供电的简称 通过Cat-5电缆供电在IEEE 802.3af以太网供电标准中进行了定义。PoE标准以前限制在几瓦以内,但更新的PoE技术可实现更高的功率。例如,PoE+允许每端口功率高达25 W,而PoE++(四 对以太网供电系统)通过使用现有电缆的所有电线允许70 W到100 W的功率。与此PoE标准并行的是ADI公司定义的专有标准 LTPoE++™,该标准定义高达90W的受电设备(PD)功率规范(请参见表1)。 表1. ADI...

u010783226的专栏 1万+

spark streaming程序的优雅关闭

使用ssc.awaitTermination()来退出,程序只能在开始的终端处control + c来结束,不方便管理, 所以使用自定义方法来替换掉: stopByMarkFile(ssc,hadoop_file), 代码如下 def stopByMarkFile(ssc:StreamingContext, hadoop_file:String):Unit= { val intervalM...

eyeofeagle的博客 2886

机器人中的数值优化(一)—— 数学优化、凸集合与凸函数

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例。

慕羽★的博客 2521

spark 终止 运行_如何优雅地终止正在运行的Spark Streaming程序

一直运行的等作业运行完再关闭我们都知道,如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop通过Spark内置机制关闭其实Spark内置就为我们提供了一种优雅的方法来关闭长期运行的Streaming作业,我们来看看 StreamingContext 类中定义的一个 stop 方法: def stop(stopSparkContext: ...

weixin_39614011的博客 839

论文阅读:arixv 2025 Poisoning Attacks on LLMs Require a Near-constant Number of Poison Samples

研究者做了目前最大规模的“投毒实验”,训练了从6亿参数到130亿参数的模型(覆盖了中小到大型LLM),用的训练数据量也是“最适合模型大小”的(按行业里的“Chinchilla法则”,模型越大,训练数据量也按比例增加)。总结下来就是:这篇论文告诉我们,给大语言模型投毒,比之前想的容易得多——不需要海量毒数据,只要几百条藏好后门的文档,就能让大模型“带毒工作”,而且平时还看不出来。——这比之前大家担心的“需要投毒数据占训练集一定比例”要可怕得多,因为对大模型来说,“固定数量”的毒数据更容易偷偷塞进去。

CSPhD-winston的博客 1080

[nvidia-GB200-安装]ubuntu24.04高端GPU gb200 570.158.01驱动安装解读及gb200一键化安装脚本,复制即可安装

【代码】[nvidia-GB200]高端GPU gb200 驱动安装解读及gb200一键化安装脚本,复制即可安装。

jundao1997的专栏 873

如何优雅地关闭SparkStreaming

How to Shutdown a Spark Streaming Job Gracefully 方案1 (推荐但方案需要讨论) 第一种方案是使用spark.streaming.stopGracefullyOnShutdown(默认是false),这个参数就是为了解决Spark优雅关闭问题,开发者不需要调用ssc.stop(),相反他们需要做的是发送SIGTERM信号至Driver。在实际的实践中...

ChengYanan的博客 1104

检索增强生成(RAG)、微调(Fine-tuning)与知识蒸馏(Knowledge Distillation):核心差异与技术选型指南

在自然语言处理(NLP)领域,大型预训练语言模型(如GPT、BERT系列)的崛起彻底改变了技术生态。面对实际业务场景中模型效果优化与资源效率平衡的永恒命题,开发者主要依赖三大技术路径:检索增强生成(Retrieval-Augmented Generation, RAG)、模型微调(Fine-tuning)和知识蒸馏(Knowledge Distillation)。本文将通过技术原理拆解、典型应用场景对比和实战选型策略三个维度,深入解析这三种技术的本质差异。

fudaihb的博客 1826

优雅关闭SparkStreaming程序

优雅关闭SparkStreaming的程序 流式任务需要7*24小时执行,但是有时涉及到升级代码需要主动停止程序,但是分布式程序,没办法做到一个个进程去杀死,所有配置优雅的关闭就显得至关重要了。 使用外部文件系统来控制内部程序关闭。 大致思路如下:新启动一个线程检测hdfs上是否多出了一个目录,检测到后使用优雅的关闭方式,先停止采集数据,然后将已经采集到的数据计算完毕,然后关闭一切连接。 @Test def getclose():Unit={ streamingContext.star

weixin_42796403的博客 449

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SparkStreaming优雅关闭剖析

简介 在前面的文章中,总结了SparkStreaming入门级的文章,了解到SparkStreaming是一种微批处理的"实时"流技术,在实际场景中,当我们使用SparkStreaming开发好功能并通过测试之后部署到生产环境,那么之后就会7*24不间断执行的,除非出现异常退出。当然SparkStreaming提供了checkpoint和WAL机制能够保证我们的程序再次启动时候不会出现数据丢失的情况。但是需求并不是一成不变的,相信读者们都经历过需求不断迭代的情况,当我们需要迭代逻辑的时候,那么我们如何停止

进击吧大数据的博客 732

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SparkStreaming之优雅关闭

package com.atguigu.day09 import java.net.URI import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FileSystem, Path} import org.apache.spark.SparkConf import org.apache.spark.streaming.{Seconds, StreamingContext} /** * @ClassName:

科小勒的博客 431

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

基于监听hdfs文件实现Sparkstreaming优雅关闭

前提: Yarn的Kill和发送信号,Oozie,不是优雅关闭,CDH的关闭是优雅关闭,现在打算弃用CDH,所以基于代码实现监听外部文件系统实现优雅关闭。 一、 1.实现代码 val hdfsStopPath :String = args(1) var stopFlag = false while (!stopFlag) { //每分钟检测一次 //println("当前检测时间" + new Date()) ssc...

weixin_42687074的博客 294

【SparkStreaming】DS输出、优雅的关闭、案例实操之需求一的实现

与RDD中的惰性求值类似,如果一个DStream及其派生出的DStream都没有被执行输出操作,那么这些DStream就都不会被求值。接下来开始实时需求的分析,需要用到SparkStreaming来做实时数据的处理,在生产环境中,绝大部分时候都是对接的Kafka数据源,创建一个SparkStreaming读取Kafka数据的工具类。使用代码的方式持续的生成数据,然后写入到kafka中,然后从kafka消费数据,并对数据根据需求进行分析。1)读取Kafka数据之后,并对MySQL中存储的黑名单数据做校验;

weixin_43923463的博客 466

如何关闭 sparkstreaming 任务

如何关闭 sparkstreaming 任务

u011250186的博客 260

SparkStreaming DStream转换及其输出&优雅关闭

DStream上的操作与RDD的类似,分为Transformations(转换)和Output Operations(输出)两种,此外转换操作中还有一些比较特殊的原语,如:updateStateByKey()、transform()以及各种Window相关的原语。 一、DStream转换 1. 无状态转化操作   无状态转化操作就是把简单的RDD转化操作应用到每个批次上,也就是转化DStream中的每一个RDD。部分无状态转化操作列在了下表中。注意,针对键值对的DStream转化操作(比如 reduce.

mengxianglong123的博客 930

如何优雅的关闭基于yarn的SparkStreaming程序

yarn application --listyarn application -kill application_1518954379926_0063

彬正的博客 1339

Spark Streaming Join与优雅关闭

Spark Streaming Join与优雅关闭

Mogeko1的博客 348

SparkStreaming (六) --------- 优雅关闭

SparkStreaming 优雅关闭配置

在森林里麋了鹿 379

大数据(8o)流计算SparkStreaming

Spark Streaming简介 环境准备 入门示例 队列(本地测试用,方便!) 消费Kafka(工作环境常用,重点!) Spark Streaming:流式数据 实时处理 框架 特点:低延时、高吞吐 discretized stream:离散化流 可从Kafka、TCP套接字等源摄入数据,经SparkStreaming处理,最终送到文件系统、数据库、实时仪表板… 小批处理方式,会有少量延时

ArYe 596
上一篇: Spark内存管理
下一篇: Dstream输出
走过冬季
博客等级 码龄9年 1609粉丝 341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值