Flume推送数据到SparkStreaming

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 words = lines.flatMap(new FlatMapFunction() { //如果是Scala,由于SAM转换,所以可以写成val words = lines.flatMap { line => line.split(" ")}

 

@Override

public Iterable call(SparkFlumeEvent event) throws Exception {

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

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

}

});

你可能感兴趣的:(streaming)