Spark Learn

2019-11-21  本文已影响0人  93张先生

RDD Programming Guide

overview

1.一个driver program 执行用户的功能函数,在集群上执行并行操作
2.RDD resilient distributed dataset 有弹性的分布式的数据集;

3.共享变量,在不同节点不同任务中,通过变量副本,来做到并行操作的;

Shuffle operations

shuffle是spark重新分配数据的一种机制;比如,数据在跨executors和机器的copy;shuffle是一个复杂和昂贵的代价.
shuffle 会引起 disk I/O, 数据序列化 ,网络 I/O; spark 产生一系列的tasks,采用 MapReduce操作来管理这些shuffle操作;map用来组织这些数据,reduce用来聚合这些数据;
一些shuffle 组织这些数据,消费明显的堆内存操作,比如reduceByKey 和 aggregateByKey,在map端产生这些内存占用,在ByKey端也会产生这些内存占用;当内存不够时,还会将数据溢出到硬盘上,增加额外的disk I/O 和垃圾回收;
shuffle也产生了大量的中间文件在disk, 这些文件将会被保存,知道相应的RDDs不在使用和发生垃圾回收;这些文件会长期存在,再次使用时,不需要被创建;运行长时间的spark jobs 将会消耗大量的硬盘空间;这些存储由spark.local.dir指定;

RDD Persistence

计算出来的dataset可以被持久化,每一个节点存用一些分区来存储相应的dataset;
cacke 是默认容错的,如果一个partition 丢失了,将会自动利用原来的转化操作进行重新计算;
持久化级别

Shared Variables
Brocadcast Variables

广播变量对每个程序来说是只读的,每一个节点一份,不是每个任务一份;使用场景:以一个更高效的方式将输入变量集合copy到每一个节点中;spark尝试使用更有效广播算法,来减少通信的话费.
Accumulators
只做,累加计算;分布在集群中的task,可以累加这个变量,不能读取,只有driver program 才能进行读取 .value操作
只有触发了action操作,accumulator才会被更新;transformations 不会更新accumulator,在Action中,spark保证每个task对累加器的更新只有一次;重新启动任务不会更新值;
在transformations中,如果task or job Stage 被重新执行,任务将会被更新很多次;

Stage

spark task stage 的划分,通过shuffle操作;

引发思考:
1.driver program 是怎做的,
2.RDD是怎么实现的,分布在不同节点,被并行计算,失败恢复;

上一篇下一篇

猜你喜欢

热点阅读