作者:VASTEw | 来源:互联网 | 2023-06-25 11:37
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中只有两个节点这个是由分区策略决定的,具体需要深入学习。