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

背景:web

    为何从SparkStreaming入手?浏览器

    由于SparkStreaming 是Spark Core上的一个子框架,若是咱们可以彻底精通了一个子框架,咱们就可以更好的驾驭Spark。SparkStreaming和Spark SQL是目前最流行的框架,从研究角度而言,Spark SQL有太多涉及到SQL优化的问题,不太适应用来深刻研究。而SparkStreaming和其余的框架不一样,它更像是SparkCore的一个应用程序。若是咱们能深刻的了解SparkStreaming,那咱们就能够写出很是复杂的应用程序。负载均衡

  SparkStreaming的优点是能够结合SparkSQL、图计算、机器学习,功能更增强大。这个时代,单纯的流计算已经没法知足客户的需求啦。在Spark中SparkStreaming也是最容易出现问题的,由于它是不断的运行,内部比较复杂。框架

本课内容:机器学习

1,SparkStreaming另类在线实验oop

     这个另类在线实验体如今batchInterval设置的很大,5分钟甚至更大,为了更清晰的看清楚Streaming运行的各个环境。学习

     实验内容是使用SparkStreaming在线统计单词个数,SparkStreaming链接一个端口中接收发送过来的单词数据,将统计信息输出到控制台中,其中使用netcat建立一个简单的server,来开启并监听一个端口,接收用户键盘输入的单词数据。优化

2,瞬间理解SparkStreaming的本质spa

     结合这个实验并经过观察Web UI上的Job,Stage,Task等信息,再结合SparkStreaming的源码,对SparkStreaming进行分析。server

实验环境说明:

     实验由3台Ubuntu14.04虚拟机上运行,其中一台做为Spark的Master,另外两台做为Spark的Worker。使用的Spark版本为目前最早版1.6.1,Spark checkpoint的存储在HDFS上(hadoop的版本为2.6.0)。为了记录SparkStreaming运行的过程信息,须要启动Spark的HistoryServer,如下是启厅Spark,HDFS,HistoryServer服务的脚本。

             

   经过使用JPS观察各节点的进行信息,或经过浏览器访问各个服务WEB页面来确认服务是否正确运行。

实验代码以下

提交到Spark集群的脚本以下

首先在Master节点使用nc -lk 9999,建立一个简单的Server,而后在运行脚本提交Spark Application。

从网上找来一篇英文文章,以下

单词统计结果以下

在Spark UI上观察发现有4个Job

首先查看Job 0发现SparkStreaming在刚启动时会提交一个Job

StreamingContext的start方法中调用了JobScheduler的start方法

继续看JobScheduler类的start方法

从注释中说明该方法是为了确保每一个Slave都注册上,避免全部的Receiver在同一个节点,为了后面计算负载均衡。

Job1一直在运行是由于它不断接收数据流中的数据,运行在Worker1上而且运行1个Task来接收数据,数据本地性为PROCESS_LOCAL,receiver接收到数据会保存到内存中。

Job2的信息以下

其中Stage3信息以下

其中Stage4信息以下

Job3的信息以下,Job3的DAG图和Job2的DAG图是同样的,可是Stage5跳过了。

后面的Job都是在对单词切分统计。

     回顾这4个Job,其中2个Job是框架运行的,Job0确保全部slave都注册上,避免全部的Receiver在同一个节点,为了后面计算负载均衡。Job1为启动一个数据接收器,运行在一个Executor上的一个Task上,不断接收数据量数据,而后保存到内存中。Job2和Job3在运行单词切分统计。

相关文章
相关标签/搜索