- 博客(6)
- 资源 (11)
- 收藏
- 关注
原创 spark shuffle过程分析
shuffle是作业执行过程中的一个重要阶段,对作业性能有很大影响,不管是对hadoop还是spark,shuffle都是一个核心环节,spark的shuffle和hadoop的shuffle的原理大致相同,shuffle发生在ShuffleMapTask中,在一个task处理partition数据时,需要对外输出作为下个stage的数据源,这个输出可能是不落盘的,但如果数据量很大,导致内存放不下
2015-11-19 15:21:22 996
原创 spark task启动
woker接受到LaunchTask消息后会启动task,以local模式为例,代码如下。task是由executor来启动的 override def receiveWithLogging = { case ReviveOffers => reviveOffers() ...... def reviveOffers() { val offers = Seq(new W
2015-11-19 14:39:31 692
原创 spark shuffle内存申请策略
在一个executor中可以并行执行多个task,这些task都可能发生shuffle,每个task看作一个线程,这些线程公用一个内存池,这时就涉及到内存的使用策略了,申请过多会导致其他task spill内存不足,过少又会影响自身效率,spark中对这块的内存管理位于ShuffleMemoryManager类中,基本的分配策略是如果线程数为n,那么spark可以确保一个线程的内存在1/n和1/2
2015-11-16 19:45:26 1201
原创 Spark TaskSet提交及执行准备
一个stage是由一组相同运算的task组成,他们分别计算不同的partition,stage的提交实际是向调度器提交一组包含相同计算的task,这里调度器的名字是TaskScheduler,其调度单位是taskset,stage在提交是使用了递归算法,会先提交没有parent stage的stage,代码如下: private def submitStage(stage: Stage) {
2015-11-11 19:31:36 2171
原创 Spark stage切分和提交
客户端构建好RDD的DAG以后,会提交至DAGScheduler来处理,这是一个Stage级别的调度器,他首先会把作业切分为一个个Stage,每个Stage由一组相同运算的tasks组成,然后会以taskset的形式提交给TaskScheduler。DS还会跟踪stage的输出与物化情况、检测task运行时的最优位置,重新提交失败的stage。 DAGSheduler接收到J...
2015-11-10 19:15:21 1850
原创 Spark中RDD DAG图的建立
RDD是spark计算的核心,是分布式数据元素的集合,具有不可变、可分区、可被并行操作的特性,基础的RDD类包含了常用的操作,如果需要特殊操作可以继承RDD基类进行自己的扩展,基础预算包括map、filter、reduce等。 RDD包含5个主要特性:partition、针对split的算子、自身依赖哪些RDD、分区类型(默认hash)、split计算是的分区位置(例如计算HDFS bloc
2015-11-05 17:48:58 5016
winutils.exe
2014-03-15
hadoop Join代码(map join 和reduce join)
2013-12-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人