Spark Streaming是一个新的实时计算的利器,而且还在快速的发展。它将输入流切分成一个个的DStream转换为RDD,从而可以使用Spark来处理。它直接支持多种数据源:Kafka, Flume, Twitter, ZeroMQ , TCP sockets等,有一些可以操作的函数:mapreducejoinwindow等。

  本文将Spark Streaming和Flume-NG进行对接,然后以官方内置的JavaFlumeEventCount作参考,稍作修改然后放到集群上去运行。

  一、下载spark streaming的flume插件包,我们这里的spark版本是1.0.0(standlone),这个插件包的版本选择spark-streaming-flume_2.10-1.0.1.jar,这个版本修复了一个重要的bug,参考下面参考中的7。

  二、把spark的编译后的jar包以及上面flume的插件,放入工程,编写如下类(参考8中的例子修改而来),代码如下:

 package com.spark_streaming;

 import org.apache.spark.SparkConf;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.streaming.*;
import org.apache.spark.streaming.api.java.*;
import org.apache.spark.streaming.flume.FlumeUtils;
import org.apache.spark.streaming.flume.SparkFlumeEvent; public final class JavaFlumeEventCount {
private JavaFlumeEventCount() {
} public static void main(String[] args) { String host = args[0];
int port = Integer.parseInt(args[1]); Duration batchInterval = new Duration(Integer.parseInt(args[2]));
SparkConf sparkConf = new SparkConf().setAppName("JavaFlumeEventCount");
JavaStreamingContext ssc = new JavaStreamingContext(sparkConf, batchInterval);
JavaReceiverInputDStream<SparkFlumeEvent> flumeStream = FlumeUtils.createStream(ssc, host, port); flumeStream.count(); flumeStream.count().map(new Function<Long, String>() {
@Override
public String call(Long in) {
return "Received " + in + " flume events.";
}
}).print(); ssc.start();
ssc.awaitTermination();
}
}

  这个和官方的区别是删除了参数个数检查和增加了自定义时间间隔(分割流),也就是第三个参数。这个类并没有做太多处理,入门为主。

  三、打包这个类到ifeng_spark.jar,连同spark-streaming-flume_2.10-1.0.1.jar一起上传到spark集群中的节点上。

  四、启动flume,这个flume的sink要用avro,指定要发送到的spark集群中的一个节点,我们这里是10.32.21.165:11000。

  五、在spark安装根目录下执行如下命令:

  ./bin/spark-submit  --master spark://10.32.21.165:8070  --driver-memory 4G  --executor-memory 4G --jars /usr/lib/spark-1.0.0-cdh4/lib/spark-streaming-flume_2.10-1.0.1.jar,/usr/lib/flume-ng-1.4-cdh4.6.0/lib/flume-ng-sdk-1.4.0-cdh6.0.jar  /usr/lib/spark-1.0.0-cdh4/ifeng_spark.jar   --class com.spark_streaming.JavaFlumeEventCount 10.32.21.165 11000 2000

  这个命令中的参数解释请参考下面参考3中的解释,也可以自己增加一些参数,需要注意的是配置内存,自己根据需要自行增加内存(driver、executor)防止OOM。另外jars可以同时加载多个jar包,逗号分隔。记得指定类后需要指定3个参数。

  如果没有指定Flume的sdk包,会爆如下错误:

  java.lang.NoClassDefFoundError: Lorg/apache/flume/source/avro/AvroFlumeEvent;没有找到类。这个类在flume的sdk包内,在jars参数中指定jar包位置就可以。

  还有就是要将自己定义的业务类的jar单独列出,不要放在jars参数指定,否则也会有错误抛出。

  运行后可以看到大量的输出信息,然后可以看到有数据的RDD会统计出这个RDD有多少行,截图如下,最后的部分就是这2秒(上面命令最后的参数设定的)统计结果:

 至此,flume-ng与spark的对接成功,这只是一个入门实验。可根据需要灵活编写相关的业务类来实现实时处理Flume传输的数据。

  spark streaming和一些数据传输工具对接可以达到实时处理的目的。

  参考:

  1、https://spark.apache.org/docs/0.9.0/streaming-programming-guide.html

  2、http://www.cnblogs.com/cenyuhai/p/3577204.html

  3、http://blog.csdn.net/book_mmicky/article/details/25714545 , 重要的参数解释

  4、http://blog.csdn.net/lskyne/article/details/37561235 , 这是一个例子

  5、http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.apache.spark%22%20 , spark-flume插件下载

  6、http://outofmemory.cn/spark/configuration , spark一些可配置参数说明

  7、https://issues.apache.org/jira/browse/SPARK-1916  ,这是1.0.1之前版本中spark streaming与flume对接的一个bug信息

  8、https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples/streaming , 这是java版本的spark streaming的一些例子,里面有flume的一个

Spark Streaming和Flume-NG对接实验的更多相关文章

  1. spark streaming集成flume

    1. 安装flume flume安装,解压后修改flume_env.sh配置文件,指定java_home即可. cp hdfs jar包到flume lib目录下(否则无法抽取数据到hdfs上): $ ...

  2. Spark学习之路(十五)—— Spark Streaming 整合 Flume

    一.简介 Apache Flume是一个分布式,高可用的数据收集系统,可以从不同的数据源收集数据,经过聚合后发送到分布式计算框架或者存储系统中.Spark Straming提供了以下两种方式用于Flu ...

  3. Spark 系列(十五)—— Spark Streaming 整合 Flume

    一.简介 Apache Flume 是一个分布式,高可用的数据收集系统,可以从不同的数据源收集数据,经过聚合后发送到分布式计算框架或者存储系统中.Spark Straming 提供了以下两种方式用于 ...

  4. Spark Streaming 整合 Flume

    Spark Streaming 整合 Flume ​ 一.简介二.推送式方法        2.1 配置日志收集Flume        2.2 项目依赖        2.3 Spark Strea ...

  5. cdh环境下,spark streaming与flume的集成问题总结

    文章发自:http://www.cnblogs.com/hark0623/p/4170156.html  转发请注明 如何做集成,其实特别简单,网上其实就是教程. http://blog.csdn.n ...

  6. Spark Streaming从Flume Poll数据案例实战和内幕源码解密

    本节课分成二部分讲解: 一.Spark Streaming on Polling from Flume实战 二.Spark Streaming on Polling from Flume源码 第一部分 ...

  7. Spark Streaming处理Flume数据练习

    把Flume Source(netcat类型),从终端上不断给Flume Source发送消息,Flume把消息汇集到Sink(avro类型),由Sink把消息推送给Spark Streaming并处 ...

  8. spark streaming 接收kafka消息之五 -- spark streaming 和 kafka 的对接总结

    Spark streaming 和kafka 处理确保消息不丢失的总结 接入kafka 我们前面的1到4 都在说 spark streaming 接入 kafka 消息的事情.讲了两种接入方式,以及s ...

  9. Spark Streaming整合Flume + Kafka wordCount

    flume配置文件 flume_to_kafka.conf a1.sources = r1 a1.sinks = k1 a1.channels = c1 a1.sources.r1.type = sp ...

  10. 分享一下spark streaming与flume集成的scala代码。

    文章来自:http://www.cnblogs.com/hark0623/p/4172462.html  转发请注明 object LogicHandle { def main(args: Array ...

随机推荐

  1. 20145215《Java程序设计》第5周学习总结

    20145215<Java程序设计>第五周学习总结 教材学习内容总结 异常处理 语法与继承架构 异常就是程序在运行时出现不正常情况,异常的由来是因为Java把出现的问题封装成了对象,换句话 ...

  2. Node基础:资源压缩之zlib

    概览 做过web性能优化的同学,对性能优化大杀器gzip应该不陌生.浏览器向服务器发起资源请求,比如下载一个js文件,服务器先对资源进行压缩,再返回给浏览器,以此节省流量,加快访问速度. 浏览器通过H ...

  3. 【Aaronyang原创】用linq取出一个集合中重复的数据

    文章已经迁移:http://www.ayjs.net/2013/07/69/ 文章已经迁移:http://www.ayjs.net/2013/07/69/ 文章已经迁移:http://www.ayjs ...

  4. Sublime-jQueryDocs

    Package Control Messages======================== jQueryDocs---------- This package shows a selected ...

  5. Rhino Mock

    mock interfaces, delegates and classes, including those with parameterized constructors. set expecta ...

  6. log4net将日志进行分类,保存到不同的目录当中

    1.新建Logs的Class类:代码如下: public class ApiLogs { public static int Log_Level { get; set; } private stati ...

  7. 问问题_为什么关闭浏览器后Session会失效

    首先需要理解一下几点: 1.Http是无状态的,即对于每一次请求都是一个全新的请求,服务器不保存上一次请求的信息 2.Session是保存在服务端的,为什么后续请求会读取到session?因为请求会包 ...

  8. Java-编写一个jdbc操作类

    1.通过读取文件配置 package 数据库操作类; /* * Db.java Created on 2007年8月20日, 上午 8:37 */ import java.io.*; import j ...

  9. Android中获取图片的宽和高

    在Android中,我们想获取图片的宽和高应该怎么办?一.正常加载图片的方法下获取宽和高 举一个简单的例子:创建一个图片的副本 //加载原图 Bitmap bmSrc = BitmapFactory. ...

  10. 解决启动Biee控制台乱码问题

    在安装完Biee后,大家都可以看到在程序中可以找到启动BI服务的地方 点击上图中的启动bi服务则在window系统中会弹出一个dos窗口,来显示执行启动服务的操作,如下图 上图显示的是正常情况,本人安 ...