为什么会引入RDD? 我们知道,无论是工业界还是学术界,都已经广泛使用高级集群编程模型来处理日益增长的数据,如MapReduce和Dryad.这些系统将分布式编程简化为自动提供位置感知性调度.容错以及负载均衡,使得大量用户能够在商用集群上分析超大数据集.大多数现有的集群计算系统都是基于非循坏的数据流模型.即从稳定的物理存储(如分布式文件系统)中加载记录,记录被传入由一组稳定性操作构成的DAG(Directed Acyclic Graph,有向无环图),然后写回稳定存储.DAG数据流图能够…
不多说,直接上干货! 创建Pair RDD Python语言 pairs = lines.map(lambda x: (x.split(], x))  scala语言 val pairs = lines.map(x => (x.split(), x)) Java语言 PairFunction keyData = new PairFunction() { public Tuple2 call(String x) { ], x); } }; JavaPairRDD pairs = lines.map…
不多说,直接上干货! 什么是Pair RDD (1)包含键值对类型的RDD被称作Pair RDD. (2)Pair RDD通常用来进行聚合计算. (3)Pair RDD通常由普通RDD做ETL转换而来. 关于ETL的知识,请移步 http://www.cnblogs.com/zlslch/category/1008607.html…
不多说,直接上干货!…
 RDD的检查点 首先,要清楚.为什么spark要引入检查点机制?引入RDD的检查点?  答:如果缓存丢失了,则需要重新计算.如果计算特别复杂或者计算耗时特别多,那么缓存丢失对于整个Job的影响是不容忽视的.为了避免缓存丢失重新计算带来的开销,Spark又引入检查点机制. RDD的缓存能够在第一次计算完成后,将计算结果保存到内存.本地文件系统或者Tachyon(分布式内存文件系统)中.通过缓存,Spark避免了RDD上的重复计算,能够极大地提升计算速度.但是,如果缓存丢失了,则需要重新计算.如果…
RDD的依赖关系?   RDD和它依赖的parent RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency). 1)窄依赖指的是每一个parent RDD的Partition最多被子RDD的一个Partition使用,如图1所示. 2)宽依赖指的是多个子RDD的Partition会依赖同一个parent RDD的Partition,如图2所示. RDD作为数据结构,本质上是一个只读的分区记录集合.一个RDD可以包含多个分区,每…
RDD的转换 Spark会根据用户提交的计算逻辑中的RDD的转换和动作来生成RDD之间的依赖关系,同时这个计算链也就生成了逻辑上的DAG.接下来以“Word Count”为例,详细描述这个DAG生成的实现过程. Spark Scala版本的Word Count程序如下: 1: val file = spark.textFile("hdfs://...") 2: val counts = file.flatMap(line => line.split(" "))…
  RDD的缓存 RDD的缓存和RDD的checkpoint的区别 缓存是在计算结束后,直接将计算结果通过用户定义的存储级别(存储级别定义了缓存存储的介质,现在支持内存.本地文件系统和Tachyon)写入不同的介质. 而检查点不同,它是在计算完成后,重新建立一个Job来计算. 为了避免重复计算,推荐先将RDD缓存,这样就能保证检查点的操作可以快速完成. RDD的缓存能够在第一次计算完成后,将计算结果保存到内存.本地文件系统或者Tachyon(分布式内存文件系统)中.通过缓存,Spark避免了RD…
RDD的操作 RDD支持两种操作:转换和动作. 1)转换,即从现有的数据集创建一个新的数据集. 2)动作,即在数据集上进行计算后,返回一个值给Driver程序. 例如,map就是一种转换,它将数据集每一个元素都传递给函数,并返回一个新的分布式数据集表示结果.另一个方面,reduce是一种动作,通过一些函数将所有元素叠加起来,并将最终结果返回Driver(还有一个并行的reduceByKey,能返回一个分布式数据集). 下图描述了从外部数据源创建RDD,经过多次转换,通过一个动作操作将结果写回外部…
  RDD的5大特点  1)有一个分片列表,就是能被切分,和Hadoop一样,能够切分的数据才能并行计算. 一组分片(partition),即数据集的基本组成单位,对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度.用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值.默认值就是程序所分配到的CPU Core的数目.每个分配的存储是由BlockManager实现的,每个分区都会被逻辑映射成BlockManager的一个Block,而这个Block会被一个…