大数据学习之路77-RDD详细说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37050372/article/details/82695680

什么是RDD

一个弹性可复原的分布式数据集,

弹性的意思就是可伸缩,数据可以放在内存当中也可以放在磁盘当中。

可复原就是数据如果在计算过程当中如果丢了,就会recompute,重计算。因为我们在处理数据的时候,每一个分区处理某一部分数据。如果某个任务丢掉了,我们可以让他在其他机器上再起一个任务再处理我们之前的数据。

RDD有五个特点:

一系列的分区组成,每个分区都会有一个函数作用在上面。RDD之间存在依赖关系(可选)如果RDD里面装的是(K,V)有分区器,如果是从HDFS这种文件系统中创建RDD,会有最优位置,是为了数据本地化。

RDD是一个逻辑概念,一个RDD中有多个分区,一个分区在executor上执行的时候,他就是一个迭代器,一个RDD有多个分区一个分区肯定在一台机器上,但是一台机器上可以有多个分区

我们要操作的是分布在多台机器上的数据,而RDD相当于是一个代理对象。对RDD操作其实就是对分区进行操作。就是对每一台机器上的迭代器进行操作。因为迭代器引用着我们要操作的数据。

接下来我们来看一个例子:

val rdd1 = sc.textFile("hdfs://marshal:9000/wordcount/input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://marshal:9000/wordcount/output")

在这里一个小黑点代表一个RDD

TextFile会生成两个RDD

一个是hadoopRDD记录他以后去哪里读。读的是键值对,key是偏移量,value是一行的内容。

这里的map方法将key干掉,只要value并且将value   toString这里又返回一个MapPartitionRDD

这里有一个最小分区MinPartitons他默认为2,因为如果是1的话就是单进程了,而我们需要他并行执行。

flatMap生成了MapPartitionRDD,其实是对每个分区的迭代器进行flatMap,

接下来进行map,map又生成了一个MapPartitionRDD:

reduceByKey生成了一个ShuffledRDD:

最后保存的时候还生成了一个RDD,他用NullWritable作为key,用内容作为value写入hdfs

猜你喜欢

转载自blog.csdn.net/qq_37050372/article/details/82695680