摘要: 注意:此文的stage划分有错,stage的划分是以shuffle操作作为边界的,可以参考《spark大数据处理技术》第四章page rank例子! 参考:http://litaotao.github.io/deep-into-spark-exection-model 我们用一个例子来说明,结合例子 阅读全文
posted @ 2016-11-07 16:37 bonelee 阅读(18319) 评论(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 阅读(8770) 评论(0) 推荐(1)
摘要: 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。Spark作为MapReduce框架的一种实现,自然也实现了shuffle的逻辑。 Shuffle 阅读全文
posted @ 2016-11-07 15:46 bonelee 阅读(12545) 评论(1) 推荐(0)
摘要: RDD操作闭包外部变量原则 RDD相关操作都需要传入自定义闭包函数(closure),如果这个函数需要访问外部变量,那么需要遵循一定的规则,否则会抛出运行时异常。闭包函数传入到节点时,需要经过下面的步骤: 注意:外部变量在闭包内的修改不会被反馈到驱动程序。 简而言之,就是通过网络,传递函数,然后执行 阅读全文
posted @ 2016-11-07 15:15 bonelee 阅读(1262) 评论(0) 推荐(0)
摘要: Accumulator简介 Accumulator是spark提供的累加器,顾名思义,该变量只能够增加。 只有driver能获取到Accumulator的值(使用value方法),Task只能对其做增加操作(使用 +=)。你也可以在为Accumulator命名(不支持Python),这样就会在spa 阅读全文
posted @ 2016-11-07 15:09 bonelee 阅读(6166) 评论(1) 推荐(0)
摘要: 通过spark的action操作函数:collect函数可以提取出所有rdd里的数据项! 阅读全文
posted @ 2016-11-06 10:03 bonelee 阅读(6788) 评论(0) 推荐(0)
摘要: spark dirver本质是一个spark集群的驱动程序,你要调用spark集群的计算功能,必须要通过它! 然后,在tmp下放置一个文件tmp.txt,运行: ./bin/spark-submit my_example/test.py 即可看到效果! 注意:从根本上说,spark sumbit也是 阅读全文
posted @ 2016-11-05 19:21 bonelee 阅读(556) 评论(0) 推荐(0)
摘要: 在Ubuntu下,安装ipython很简单: $sudo apt-get install ipython 在bash env中添加变量: 再次使用,已经是ipython了! 阅读全文
posted @ 2016-11-05 18:51 bonelee 阅读(1735) 评论(0) 推荐(0)
摘要: 采用快排思路来做,上面的输出: 注意:k个元素未必是有序的! 阅读全文
posted @ 2016-11-03 09:01 bonelee 阅读(245) 评论(0) 推荐(0)
摘要: 发现自己写起来很不顺手,得从最右边找出pivot元素是最方便的! 以最左边的元素作为pivot的代码,看到好多坑: 输出: partition有三种思路写法: 阅读全文
posted @ 2016-11-02 13:14 bonelee 阅读(220) 评论(0) 推荐(0)