
序言:草原狼作为本公众号作者的笔名,截止2019年3月31日已经陪伴小伙伴将近10个月的时间,本来承诺大伙的是一周至少一篇原创,但是草原狼很贪玩,经常开小差到库伦贝尔大草原上狂奔。老板(大数据技术宅)无奈之下,决定给这匹狼套上一条锁链(大数据技术宅交流群),大伙有任何大数据领域相关的问题,可以直接在微信群里发问,草原狼会第一时间给出答案。言归正传,直接开启阅读spark源码。
内容目录
spark启动过程spark消息传递
Master与Worker之间传递消息
spark启动过程
spark作为第三代的大数据计算引擎,在大数据领域可谓是名声大噪,也是当前主流的大数据计算引擎,作为大数据的从业人员,熟练使用spark,应该算是必备技能。如果能够对spark的源码了如指掌,那绝对是加分项,绝对会提升个人的市场价值。本为作为spark源码系列的开篇文章,重点剖析一下底层的消息传递。虽说偏底层,但绝对是重中之重,伴随spark运行的始终,小伙伴们要认值阅读哦,对spark2.2.0的源码,可以在关注公众号后留言,该源码中草原狼已经进行了详尽的批注,方便阅读。spark的启动过程如图1所示:

图1 spark启动流程
图1中挑出了5个主要启动脚本的部分内容,接下来简单解释一下:
入口脚本start-all.sh,分别执行脚本start-Master.sh与start-slaves.sh
start-Master.sh启动spark的Master,执行org.apache.spark.deploy.Master
.Master类
start-slaves.sh脚本,执行slaves.sh脚本
slaves.sh脚本,循环遍历$SPARK_HOME/conf/slaves下所有slave节点,通过ssh远程在slave节点上执行
org.apache.spark.deploy.Worker.Worker
类,执行过程通过start-slave.sh脚本调用
spark消息传递
spark2各模块之间的通信底层用的是netty框架,用java对netty基础API进行了封装,感兴趣的同学可以去spark源码的network-common子项目进行解读。下文重点解读spark中消息传递机制。
在执行org.apache.spark.deploy.Master.Master类时候,首先会启动Master并且创建rpcEnv。Master类运行的时候主要有两个动作一个是选举主节点(leader),一个是创建rpcEnv进行网络通信。本篇主要介绍通信部分,下一篇重点讲解Master启动过程中主节点选举。通信过程如图2所示:

图2 spark消息传递过程
图2中被红色虚线圈住部分是Master启动过程中产生创建通信环境的过程,Worker创建通信环境的过程与此类似,除了红色虚线部分以外,就是spark所有模块公用的消息传递机制。spark的消息传递中,将消息分成两部分:本地消息和远程消息,处理本地消息和远程消息的过程不同,处理本地消息在Dispatcher模块,处理远程消息直接调用NettyRpcEnv的postToOutbox方法。图2中红色虚线部分展开过程如图3所示:

图3 Netty通信环境创建过程
通过图3中一系列操作产生一个NettyRpcEnv实列,用于发送消息。图3,以Master通信环境创建为例,Worker通信环境创建于此类似。
Master与Worker之间传递消息
从通信的角度来看Master与Worker既是服务端又是客户端,既作为消息的接受方,处理消息,响应消息,又主动的发送一些消息。Master与Worker之间的消息传递如图4所示(只列举了部分消息):

图4 Master与Worker之间传递消息
对于一个分布式系统而言,消息的传递是至关重要的,消息传递的畅通直接影响各组件之间的协作,进而影响系统的稳定性和效率。最后,对本篇文章做一下总结,本文旨在研究spark底层的通信框架,以及通信框架基础之上的消息传递,当然只能起到抛砖引玉的作用,如果真正想弄明白,还要亲自的阅读源码。哈哈,读者只要掌握了两点内容,这篇文章的目的就达到了(1)Spark2之后采用的通信框架是Netty,底层用Java对Netty进行封装,上层通过Scala编写的类进行收发消息封装。(2)Master与Worker之间几乎所有的行为都是通过收发消息触发的。
如果你觉得文章对你有帮助,欢迎关注公众号"大数据技术宅"或转发文章,有您的支持,大数据技术宅一定会越来越好!
阅读本文的人还看了:
语音识别(LSTM+CTC)
大数据hive利器
BP神经网络
初识TensorFlow
GAN模型生成手写字
用TensorFlow教你做手写字识别(准确率94.09%)
OpenCV+TensorFlow实现自定义手写图像识别
深度学习(Deep Learning)资料大全(不断更新)
Storm环境搭建(分布式集群)







