Spark迭代运算

https://wjrsbu.smartapps.cn/zhihu/answer?id=1429890077&isShared=1&hostname=baiduboxapp&_swebfr=1

Spark迭代运算,采用内存存储中间计算结果,减少了迭代运算的磁盘IO,并通过并行计算DAG图的优化,减少不同任务之间的依赖,降低延迟等待时间。

要搞懂Spark迭代运算,着重去搞清楚几个概念:RDD、DAG(有向无环图)、Shuffle机制。

RDD是Spark的灵魂,一个RDD代表一个可以被分区的只读数据集。RDD内部可以有许多分区(partitions),每个分区又拥有大量的记录(records)。在Spark执行运算任务时,RDD之间的依赖关系是靠有向无环图(DAG)表达的。

Shuffle就是对数据进行重组,在Hadoop MapReduce和Spark当中,计算任务都是被划分为两个阶段来执行的(Map和Reduce),Shuffle是连接Map和Reduce之间的桥梁。Map阶段通过shuffle读取数据并输出到对应的Reduce;而Reduce阶段负责从Map端拉取数据并进行计算。

在Spark当中,Shuffle的过程一般分为两个部分:Shuffle Write和Shuffle Fetch,前者是Map任务划分分区,输出中间结果,而后者则是Reduce任务获取到的这些中间结果,所谓“使用上一个计算结果),就是在这个阶段。

针对持久化,RDD也有持久化缓存机制。RDD 持久化是一个分布式的过程,其内部的每个 Partition 各自缓存到所在的计算节点上。

Spark 提供了 persist 和 cache 两个持久化函数,其中 cache 将 RDD 持久化到内存中,而 persist 则支持多种存储级别,包括MEMORY_ONLY、MEMORY_AND_DISK、MEMORY_ONLY_SER、MEMORY_AND_DSK_SER、DISK_ONLY、MEMORY_ONLY_2、MEMORY_AND_DISK_2等,各个指令代表的具体含义,这里就不细说了。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值