Flume推送数据到SparkStreaming

本文介绍了如何使用Flume将数据推送到SparkStreaming,详细讲解了Flume的安装步骤以及配置,强调在数据量不稳定时选择Flume的原因。在Flume推送给SparkStreaming时,需要注意可能存在的问题,如限速、启动顺序等,并推荐使用Flume+kafka组合。针对SparkStreaming可能内存撑爆的情况,提出了通过设置checkpoint和消息循环来清理RDD的解决方案。最后,给出了使用Java代码实现Flume与SparkStreaming连接的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flume推送数据给streaming其实是配置

 

把数据推送给端口,streaming直接去读端口。

 

Flume的安装:

1.配置系统环境变量

2.配置flumeconf文件,里面有agentchannelsink

3.可以在spark-env中配置java_home java_opts

 

关于数据采集flumekafka选择的理由?

数据大规模或者持续产生时采用kafka

数据量不稳定时用flume

 

其他的

rocketMQ

Zeromq

Activemq

 

 

Flume push的方式给streaming注意的问题?

1.可能streaming无法及时处理,导致崩溃。

解决办法:限速。但是可能会导致port崩溃

2.先启动streaming,在启动flume

3.综上所述的问题,最好的办法仍然是使用flume+kafka的配合。

 

 

Streaming一直产生rddrdd是对象,内存撑爆怎么办(重要)?

1.每次触发作用都会触发一个消息给消息循环体,消息循环清理rdd

2.发现状态报错,会checkpoint,此时由内存转为磁盘。

 

代码实现:

SparkConf conf = new SparkConf().setMaster("local[4]").setAppName("FlumePushDate2SparkStreaming");

 

JavaStreamingContext jsc = new JavaStreamingContext(conf, Durations.seconds(30));

 

JavaReceiverInputDStream lines = FlumeUtils.createStream(jsc,"Master", 9999);

/*

 * 第四步:接下来就像对于RDD编程一样基于DStream进行编程!!!原因是DStreamRDD产生的模板(或者说类),在Spark Streaming具体

 * 发生计算前,其实质是把每个BatchDStream的操作翻译成为对RDD的操作!!!

 *对初始的DStream进行Transformation级别的处理,例如mapfilter等高阶函数等的编程,来进行具体的数据计算

     * 第4.1步:讲每一行的字符串拆分成单个的单词

     */

JavaDStream<String> words = lines.flatMap(new FlatMapFunction<SparkFlumeEvent, String>() { //如果是Scala,由于SAM转换,所以可以写成val words = lines.flatMap { line => line.split(" ")}

 

@Override

public Iterable<String> call(SparkFlumeEvent event) throws Exception {

String line = new String(event.event().getBody().array());

return Arrays.asList(line.split(" "));

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值