Spark的RDD工作机制原理以及实例详解

RDD工作机制

RDD指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用,是Spark进行大数据处理计算的核心,在设计算法的时候,就是在设计RDD的操作,那么下面通过WordCount实例来详细介绍RDD的工作机制。关于RDD的特性和理论请参考“Spark 入门文档”。

1、在介绍RDD工作原理之前再回顾一下WordCount的例子:

   第一步:创建saprk的配置对象SparkConf

          val conf = new SparkConf()

          conf.setAppName("My First Spark App!").setMaster("local")

   第二步:创建SparkContext对象

          val sc  = new SparkContext(conf)

   第三步:根据具体数据来源(HDFS,Hbase等)通过SparkContext来创建RDD

          val lines = sc.textFile(“hdfs://{文件路径}/ helloSpark.txt”)

   第四步:将每行字符拆分为单个单词

          val words = lines.flatMap { line =>line.split(" ") }

   第五步:在单词拆分的基础上对每个单词实例计数为1

          val pairs = lines.map{word => (word, 1)}

   第六步:在每个单词实例为1的基础之上统计每个单词出现的总次数

          val wordcount = pairs.reduceByKey(_+_)

   第七步:输出统计结果

wordcount.foreach(wordNumberPair=> println(wordNumberPair._1 + ":" + wordNumberPair._2))

sc.stop()

2、根据上述的程序图解spark RDD中数据流动过程

补充说明:第一张图主要描述的是RDD的transformation,第二张图描述的是action。在第一张图中hadoopRDD的方块内的数据1,数据2,数据3表示把文件系统中helloSpark.txt文件的内容分到了三个工作节点上去。(helloSpark.txt文件内容有四行每行分别是:helloSpark ;hello scala;hello Hadoop ; hello flink。)在第一张图中所有的map操作都是在各自自己的节点上进行的计算,当执行reduceBykey操作是进行了shuffle通信,收集各个节点上的数据然后进行单词统计。最后一个RDD是为存储结果而准备的。在shuffleRDD中只有两个节点这个是由分区策略决定的,具体需要深入学习。

猜你喜欢

转载自blog.csdn.net/qq_26502245/article/details/88370047