spark输出rdd数据_剖析Spark数据分区之Spark RDD分区

本文来自OPPO互联网技术团队,是《剖析Spark数据分区》系列文章的第二篇,将重点分析Spark RDD的数据分区。该系列共分3篇文章,欢迎持续关注。

转载请注名作者,同时欢迎关注OPPO互联网技术团队的公众号:OPPO_tech,一同分享OPPO前沿互联网技术及活动。

Spark

我们以Spark on Yarn为例阐述Spark运行原理。

任务运行步骤

1.客户端提交Application到RM,RM判断集群资源是否满足需求 ;

2.RM在集群中选择一台NodeManager启动Application Master(cluster模式);

3.Driver在AM所在的NodeManager节点启动进程;

4.AM向ResourceManager申请资源,并在每台NodeManager上启动相应的executors;

5.Driver开始进行任务调度,通过Transaction操作形成了RDD血缘关系图,即DAG图,最后通过Action的调用,触发Job并调度执行;

6.DAGScheduler负责Stage级的调度,主要是将DAG切分成若干个Stages,并将每个Stage打包成Taskset交给TaskScheduler调度;

7.TaskScheduler负责Task级的调度,将DAGScheduler给过来的Taskset按照指定的调度策略分发到Executor上执行;

Spark RDD

RDD 弹性分布式数据集,RDD包含5个特征

1.Compute:

RDD在任务计算时是以分区为单位的,通过Compute计算得到每一个分片的数据,不同的RDD子类可以实现自己的compute方法;

2.getPartitions:

计算获取所有分区列表,RDD是一个分区的集合,一个RDD有一个或者多个分区,分区的数量决定了Spark任务的并行度;

3.getDependencies:

获取RDD的依赖,每个RDD都有依赖关系(源RDD的依赖关系为空),这些依赖关系成为lineage;

4.getPreferredLocations:

对其他RDD的依赖列表,Spark在进行任务调度时,会尝试将任务分配到数据所在的机器上,从而避免了机器间的数据传输,RDD获取优先位置的方法为getPreferredLocations,一般只有涉及到从外部存储结构中读取数据时才会有优先位置,比如HadoopRDD, ShuffleRDD;

5.Partitioner:

决定数据分到哪个Partition,对于非key-value类型的RDDÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值