Spark Streaming
Posted mr-yl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark Streaming相关的知识,希望对你有一定的参考价值。
2.4.6.1.1 概论
SparkStreaming是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如Kdfka、Flume、Twitter、Zero和TCP 套接字)进行类似Map、Reduce和Join等复杂操作,并将结果保存到外部文件系统、数据库或应用到实时仪表盘。
2.4.6.1.1 spark Streaming 监听本地目录写入数据库
2.4.6.1.1.1 创建StreamingContext对象
同Spark初始化需要创建SparkContext对象一样,使用Spark Streaming就需要创建StreamingContext对象。创建StreamingContext对象所需的参数与SparkContext基本一致,包括指明Master,设定名称(如SparkOverPhoenixSample)。
需要注意的是参数new Duration(10000),Spark Streaming需要指定处理数据的时间间隔,如下例所示的10s,那么Spark Streaming会以10s为时间窗口进行数据处理。此参数需要根据用户的需求和集群的处理能力进行适当的设置。
//创建SparkConf SparkConf conf =null; conf = new SparkConf().setMaster("local[*]").setAppName("SparkOverPhoenixSample"); //设置监听时间间隔 JavaStreamingContext streamingContext = new JavaStreamingContext(conf, new Duration(10000)); |
2.4.6.1.1.2 设置监听路径
Streaming支持多种不同的数据源,包括socket、Kafka、 Flume、HDFS/S3、Kinesis和Twitter等数据源。不支持本地路径。
监听HDFS写法如下:
//设置监听路径 JavaDStream<String> textFileStream = streamingContext.textFileStream("hdfs://192.168.1.222:8020/pd"); |
监听socket写法如下:
//设置监听路径 JavaReceiverInputDStream<String> socketTextStream =streamingContext.socketTextStream("127.0.0.1",9999); |
2.4.6.1.1.3 操作DStream
(1) 内部处理机制
接收实时流的数据,并根据一定的时间间隔拆分成一批批的数据,然后通过Spark Engine处理这些批数据,最终得到处理后的一批批结果数据。对应的批数据,在Spark内核对应一个RDD实例,因此,对应流数据的DStream可以看成是一组RDDs,即RDD的一个序列。通俗点理解的话,在流数据分成一批一批后,通过一个先进先出的队列,然后 Spark Engine从该队列中依次取出一个个批数据,把批数据封装成一个RDD,然后进行处理,这是一个典型的生产者消费者模型。
(2) 遍历方法
可以调用其foreachRDD(VoidFunction)方法,对获取到的数据进行处理。每一批数据被封装成一个RDD,如果数据源为text等格式的文件,则RDD的每一条数据对应着文件中的一行。
//将获取的javaDStream进进行遍历 socketTextStream.foreachRDD(new VoidFunction<JavaRDD<String>>() @Override public void call(JavaRDD<String> arg0) throws Exception //arge 为当前遍历的RDD,传入此方法 JavaRDD<String> javardd=arg0; ); |
2.4.6.1.1.4 启动Spark Streaming
之前所作的所有步骤只是创建了执行流程,程序没有真正连接上数据源,也没有对数据进行任何操作,只是设定好了所有的执行计划,当streamingContext.start()启动后程序才真正进行所有预期的操作。
以上是关于Spark Streaming的主要内容,如果未能解决你的问题,请参考以下文章