spark streaming

Posted 人生,唯有锻炼与读书不能辜负

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark streaming 相关的知识,希望对你有一定的参考价值。

一、基础核心概念

      1、StreamingContext详解 (一)

          有两种创建StreamingContext的方式:
             val conf = new SparkConf().setAppName(appName).setMaster(master);
             val ssc = new StreamingContext(conf, Seconds(1));

          StreamingContext, 还可以使用已有的SparkContext来创建
              val sc = new SparkContext(conf)
              val ssc = new StreamingContext(sc, Seconds(1));

          appName, 是用来在Spark UI上显示的应用名称。 master, 是一个SparkMesos或者Yarn集群的URL, 或者是local[*]。 

        2、StreamingContext详解 (二)

            一个StreamingContext定义之后, 必须做以下几件事情:
                  1、 通过创建输入DStream来创建输入数据源。
                  2、 通过对DStream定义transformationoutput算子操作, 来定义实时计算逻辑。
                  3 、 调用StreamingContextstart()方法, 来开始实时处理数据。
                  4、 调用StreamingContextawaitTermination()方法, 来等待应用程序的终止。 可以使用CTRL+C手动停止,或者就是让它持续不断的运行进行计算。
                  5、 也可以通过调用StreamingContextstop()方法, 来停止应用程序。

           需要注意的要点:
                  1、 只要一个StreamingContext启动之后, 就不能再往其中添加任何计算逻辑了。 比如执行start()方法之后, 还给某个DStream执行一个算子。
                  2、 一个StreamingContext停止之后, 是肯定不能够重启的。 调用stop()之后, 不能再调用start()
                  3、 一个JVM同时只能有一个StreamingContext启动。 在你的应用程序中, 不能创建两个StreamingContext
                  4、 调用stop()方法时, 会同时停止内部的SparkContext, 如果不希望如此, 还希望后面继续使用SparkContext创建其他类型的Context, 比如SQLContext, 那么就用stop(false)
                  5、 一个SparkContext可以创建多个StreamingContext, 只要上一个先用stop(false)停止, 再创建下一个即可。

           3、输入DStream和Receiver详解(一)

                  输入DStream代表了来自数据源的输入数据流。 在之前的wordcount例子中, lines就是一个输入 DStream( JavaReceiverInputDStream) , 代表了从netcat( nc) 服务接收到的数据流。 除了 文件数据流之外, 所有的输入DStream都会绑定一个Receiver对象,

该对象是一个关键的组件, 用来从数据源接收数据, 并将其存储在Spark的内存中, 以供后续处理。 
                 Spark Streaming提供了三种内置的数据源支持;
                              1、 基础数据源: StreamingContext API中直接提供了对这些数据源的支持, 比如文件、 socket、 Akka Actor等。
                              2、 高级数据源: 诸如KafkaFlumeKinesisTwitter等数据源, 通过第三方工具类提供支持。 这些数据源的使用, 需要引用其依赖。
                              3、 自定义数据源: 我们可以自己定义数据源, 来决定如何接受和存储数据。

            4、输入DStream和Receiver详解(二)

                     如果你想要在实时计算应用中并行接收多条数据流, 可以创建多个输入DStream。 这样就会创建多个 Receiver, 从而并行地接收多个数据流。 但是要注意的是, 一个Spark Streaming Application的 Executor, 是一个长时间运行的任务, 因此,

它会独占分配给Spark Streaming Applicationcpu core。从而只要Spark Streaming运行起来以后, 这个节点上的cpu core, 就没法给其他应用使用了。 

                    使用本地模式, 运行程序时, 绝对不能用local或者local[1], 因为那样的话, 只会给执行输入DStream的 executor分配一个线程。 而Spark Streaming底层的原理是, 至少要有两条线程, 一条线程用来分配给 Receiver接收数据, 一条线程用来处理接收到的数据。

因此必须使用local[n], n>=2的模式。     (n不能大于当前节点的CPU核数)
                    如果不设置Master, 也就是直接将Spark Streaming应用提交到集群上运行, 那么首先, 必须要求集群 节点上, 有>1cpu core, 其次, 给Spark Streaming的每个executor分配的core, 必须>1, 这样, 才能保证分配到executor上运行的输入DStream

两条线程并行, 一条运行Receiver, 接收数据; 一条处 理数据。 否则的话, 只会接收数据, 不会处理数据。 

 

总结:Receiver接收器

Receiver接收器,可以接收外部数据源中的数据,并将其保存到
内存中,以供后续使用。
在Spark中支持三大类型的数据源:
1、基础数据源:比如文件、Socket、Akka中的数据。
2、高级数据源,比如Flume、Kafka、推特中的数据。
3、自定义数据源。
补充:在Spark Streaming中,可以通过两种方式操作Kafka的数据。
一种是通过Receiver的方式,另一种Direct直接读取的方式。

.Spark Streaming(上)--实时流计算Spark Streaming原理介

Spark Streaming实时流处理项目实战Spark Streaming整合Kafka实战一

Spark Streaming实时流处理项目实战Spark Streaming整合Kafka实战一

Spark Streaming实时流处理项目实战Spark Streaming整合Kafka实战一

Streaming30分钟概览Spark Streaming 实时计算

Spark SQL + Window + Streaming 问题 - 使用 Spark Streaming 运行时,Spark SQL 查询需要很长时间才能执行