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支持多种不同的数据源,包括socketKafka FlumeHDFS/S3KinesisTwitter等数据源。不支持本地路径。

监听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) 遍历方法

可以调用其foreachRDDVoidFunction)方法,对获取到的数据进行处理。每一批数据被封装成一个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()启动后程序才真正进行所有预期的操作。

posted @ 2019-06-21 12:00  酱油党°  阅读(232)  评论(1编辑  收藏  举报