第3课:经过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming

第3课:经过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming安全

    一、DT大数据梦工厂微信公众号DT_Spark微信

    二、IMF晚8点大数据实战YY直播频道号:68917580多线程

    三、新浪微博:http://www.weibo.com/ilovepains架构


内容:性能

1,解密Spark Streaming Job架构和运行机制大数据

 先经过运行在线单词统计这个例子,观察Spark Streaming在控制台上输出的日志信息。spa

如下代码为在9999端口监听客户端链接请求,而后不断向客户端发送单词。线程

先启动SocketServer,而后在启动SparkStreaming在线统计单词的程序,代码以下日志

运行过程总结以下接口

1StreamingContext启动后会ReceiverTracker,根据建立时指定的batchDuration时间,启动RecurringTimer定时器,间隔Interval发送JobGenerator消息,会启动JobGeneratorJobSchedulerBlockGenerator

2ReceiverTracker接收到Receiver(Stream 0)的注册消息,而后RecevierSupervisorImpl启动Receiver来接收数据。

3SocketServer链接到localhost:9999开始接收数据,将接收到的数据经过BlockGenerator存放到BlockManager中。

4JobScheduler接收到按期发送的JobGenerator消息后,提交一个JobDStreamGraphReceiverTracker中获取数据生成RDDDAGScheduler调度Job的执行,让TaskSchedulerImplExecutor发送TaskSet,让Executor执行。

5Task运行完后将结果发送给DriverDAGSchedulerJbScheduler打印Job完成和耗时信息,最后在控制台输出单词统计结果。

 

能够看到随着时间的流逝会有不断的Job生成而且运行,那么,Spark StreamingJob是如何生成的?

StreamingContext调用start方法的内部实际上是会启动JobSchedulerstart方法,进行消息循环,在JobSchedulerstart内部会构造JobGeneratorReceiverTracker,而且调用JobGeneratorReceiverTrackerstart方法

    1JobGenerator启动后不断的根据batchDuration生成一个个的Job

    2ReceiverTracker启动后首先在Spark集群中启动Receiver(其实在Executor中先启动ReceiverSupervisor)Receiver接收到数据后会经过ReceiverSupervisor将数据存储到ExecutorBlockManager中,而且把数据的Metadata信息发送给DriverReceiverTracker,在ReceiverTracker内部经过ReceivedBlockTracker来管理接收到的元数据信息

 

每一个BatchInterval会产生一个具体的Job,其实这里的Job不是SparkCore中的Job,它只是基于DStreamGraph而生成的RDDDAG而已,从Java角度讲,相等于Runnable接口实例,此时要向运行Job须要提交给JobScheduler,在JobScheduler中经过线程池中单独的线程

来提交Job到集群运行(实际上是在线程中基于RDDAction触发真正的做业的运行)

为何使用线程池?

1,做业不断生成,因此为了提高效率,咱们须要线程池。这和Executor中经过线程池执行Task有殊途同归之妙

2,有可能设置了JobFAIR公平调度的方式,这个时候也须要多线程的支持

 

 

2,解密Spark Streaming容错架构和运行机制

 

容错分为Driver级别的容错和Executor级别的容错。

 

Executor级别的容错具体为接收数据的安全性和任务执行的安全性。在接收数据安全性方面,一种方式是Spark Streaming接收到数据默认为MEMORY_AND_DISK_2的方式,在两台机器的内存中,若是一台机器上的Executor挂了,当即切换到另外一台机器上的Executor,这种方式通常状况下很是可靠且没有切换时间。另一种方式是WALWrite Ahead Log),在数据到来时先经过WAL机制将数据进行日志记录,若是有问题则从日志记录中恢复,而后再把数据存到Executor中,再进行其余副本的复制,这种方式对性能有影响。在生产环境中通常使用Kafka存储,Spark Streaming接收到数据丢失时能够从Kafka中回放。在任务执行的安全性方面,靠RDD的容错。

 

Driver级别的容错具体为DAG生成的模板,即DStreamGraphRecevierTracker中存储的元数据信息和JobScheduler中存储的Job进行的进度状况等信息,只要经过checkpoint就能够了,每一个Job生成以前进行checkpoint,在Job生成以后再进行checkpoint,若是出错的话就从checkpoint中恢复。

相关文章
相关标签/搜索