标签:context 数据封装 receiver 复杂 sample reac man 计划 spark
SparkStreaming是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如Kdfka、Flume、Twitter、Zero和TCP 套接字)进行类似Map、Reduce和Join等复杂操作,并将结果保存到外部文件系统、数据库或应用到实时仪表盘。
同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)); |
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); |
(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; } } ); |
之前所作的所有步骤只是创建了执行流程,程序没有真正连接上数据源,也没有对数据进行任何操作,只是设定好了所有的执行计划,当streamingContext.start()启动后程序才真正进行所有预期的操作。
标签:context 数据封装 receiver 复杂 sample reac man 计划 spark
原文地址:https://www.cnblogs.com/Mr-yl/p/11063830.html