摘要: RDD底层实现原理 RDD是一个分布式数据集,顾名思义,其数据应该分部存储于多台机器上。事实上,每个RDD的数据都以Block的形式存储于多台机器上,下图是Spark的RDD存储架构图,其中每个Executor会启动一个BlockManagerSlave,并管理一部分Block;而Block的元数据 阅读全文
posted @ 2016-11-07 17:24 bonelee 阅读(6756) 评论(1) 推荐(0) 编辑
摘要: 注意:此文的stage划分有错,stage的划分是以shuffle操作作为边界的,可以参考《spark大数据处理技术》第四章page rank例子! 参考:http://litaotao.github.io/deep-into-spark-exection-model 我们用一个例子来说明,结合例子 阅读全文
posted @ 2016-11-07 16:37 bonelee 阅读(18270) 评论(1) 推荐(0) 编辑
摘要: Driver的任务提交过程 1、Driver程序的代码运行到action操作,触发了SparkContext的runJob方法。2、SparkContext调用DAGScheduler的runJob函数。3、DAGScheduler把Job划分stage,然后把stage转化为相应的Tasks,把T 阅读全文
posted @ 2016-11-07 16:23 bonelee 阅读(8749) 评论(0) 推荐(1) 编辑
摘要: 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。Spark作为MapReduce框架的一种实现,自然也实现了shuffle的逻辑。 Shuffle 阅读全文
posted @ 2016-11-07 15:46 bonelee 阅读(12520) 评论(1) 推荐(0) 编辑
摘要: RDD操作闭包外部变量原则 RDD相关操作都需要传入自定义闭包函数(closure),如果这个函数需要访问外部变量,那么需要遵循一定的规则,否则会抛出运行时异常。闭包函数传入到节点时,需要经过下面的步骤: 注意:外部变量在闭包内的修改不会被反馈到驱动程序。 简而言之,就是通过网络,传递函数,然后执行 阅读全文
posted @ 2016-11-07 15:15 bonelee 阅读(1254) 评论(0) 推荐(0) 编辑
摘要: Accumulator简介 Accumulator是spark提供的累加器,顾名思义,该变量只能够增加。 只有driver能获取到Accumulator的值(使用value方法),Task只能对其做增加操作(使用 +=)。你也可以在为Accumulator命名(不支持Python),这样就会在spa 阅读全文
posted @ 2016-11-07 15:09 bonelee 阅读(6119) 评论(1) 推荐(0) 编辑