spark源码阅读之network(2)】的更多相关文章

spark将在1.6中替换掉akka,而采用netty实现整个集群的rpc的框架,netty的内存管理和NIO支持将有效的提高spark集群的网络传输能力,为了看懂这块代码,在网上找了两本书看<netty in action>和<netty权威指南>,结合了spark的源码既学习了netty也看完了spark netty的部分源码.该部分源码掺杂了太多netty的东西,看起来还是有点累的. 下面是我画的UML类图.https://onedrive.live.com/redir?re…
在上节的解读中发现spark的源码中大量使用netty的buffer部分的api,该节将看到netty核心的一些api,比如channel: 在Netty里,Channel是通讯的载体(网络套接字或组件的连接),而ChannelHandler负责Channel中的逻辑处理,channel支持读,写,绑定本地端口,连接远程等,Channel中所有的操作都是异步的,当发生io操作的时候将会返回一个ChannelFutrue的接口,在ChannelFutrue里面可以处理操作成功.失败.取消后的动作.…
TransportContext用来创建TransportServer和TransportclientFactory,同时使用TransportChannelHandler用来配置channel的pipelines,TransportClient提供了两种传输协议,一个是数据层(fetch chunk),一个是控制层(rpc).rpc的处理需要用户提供一个RpcHandler来处理,它负责建立一个用于传输的流, 使用zero-copy以块的形式进行数据传输.TransportServer和Tra…
一.概述 根据<深入理解Spark:核心思想与源码分析>一书,结合最新的spark源代码master分支进行源码阅读,对新版本的代码加上自己的一些理解,如有错误,希望指出. 1.块管理器BlockManager的实现 块管理器是Spark存储体系的核心组件,Driver Application和Executor都会创建BlockManager,源代码位置在core/org.apache.spark.storage,部分代码如下. private[spark] val externalShuff…
1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打包spark(2.1.0)源码及出现问题的解决方案(win7+Intellij IDEA) https://blog.csdn.net/u011464774/article/details/76704785 通过maven将spark源码导入ideahttps://blog.csdn.net/pcn…
根据spark2.2的编译顺序来确定源码阅读顺序,只阅读核心的基本部分. 1.common目录 ①Tags②Sketch③Networking④Shuffle Streaming Service⑤Unsafe 2.launcher目录 3.core目录 spark的编译顺序是: [INFO] Reactor Build Order:[INFO][INFO] Spark Project Parent POM[INFO] Spark Project Tags[INFO] Spark Project…
欢迎转载,转载请注明出处,徽沪一郎. 概述 Scala越来越流行, Spark也愈来愈红火, 对spark的代码进行走读也成了一个很普遍的行为.不巧的是,当前java社区中很流行的ide如eclipse,netbeans对scala的支持都不算太好.在这种情况下不得不想到编辑器之神emacs,利用emacs+ensime来打造scala编程环境. 本文讲述的步骤全部是在arch linux上,其它发行版的linux视具体情况变通. 安装scala pacman -S scala 安装sbt pa…
1 作用 当该方法在spark内部代码中调用时,会返回当前调用spark代码的用户类的名称,以及其所调用的spark方法.所谓用户类,就是我们这些用户使用spark api的类. 2 内部实现 2.1 涉及到的java或scala知识 (1)Thread.currentThread.getStackTrace():返回一个表示该线程堆栈转储的堆栈跟踪元素数组.如果该线程尚未启动或已经终止,则该方法将返回一个零长度数组.如果返回的数组不是零长度的,则其第一个元素代表堆栈顶,它是该序列中最新的方法调…
##SparkContext启动过程 基于spark 2.1.0  scala 2.11.8 spark源码的体系结构实在是很庞大,从使用spark-submit脚本提交任务,到向yarn申请容器,启动driver进程,启动executor进程,到任务调度,shuffle过程等等,模块众多,而且每个模块都很大,所以要全部看完啃透几乎不可能,一是经历不允许,而是有些边缘性的模块主要起到辅助的功能,没有什么高深的技术含量,花时间性价比不高.因此我决定略去前面提交任务,向yarn提交任务,申请资源,启…
Spark中job由action动作生成,那么stage是如何划分的呢?一般的解答是根据宽窄依赖划分.那么我们深入源码看看吧 一个action 例如count,会在多次runJob中传递,最终会到一个函数 dagScheduler.runJob(rdd, cleanedFunc, partitions, callSite, resultHandler, localProperties.get)dagScheduler是DAGScheduler的一个实例,因此,后面的工作都交给DAGSchedul…