RDD工作机制实例详解
2016-06-16 10:53
441 查看
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中只有两个节点这个是由分区策略决定的,具体需要深入学习。
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中只有两个节点这个是由分区策略决定的,具体需要深入学习。
相关文章推荐
- 电动调节阀
- Android在RecyclerView/ScrollView中嵌套一个GridView或者recyclerView时只显示一行的原因及解决方法
- Elasticsearch 2.3.2 创建index及type
- ARC下PerformSelector may cause a leak because its selector is unknown 警告
- 资源预加载
- 控制台里数组,字典输出中文(Extension)
- Linux下部署多个工程的方法
- sql 模糊查询
- eclipse使用MAVEN打包可执行的jar包
- @echo off
- Eclipse工程之间设置依赖关系
- Nginx配置性能优化的方法
- 获取struct 中的member variable 的offset的宏定义
- 按键消抖
- 浅谈Android自定义View
- MYSQL 体系结构图
- 人月神话阅读笔记03
- Elasticsearch 2.3.2 安装部署
- 之前好好的 JLink SWD can not enter debug mode
- Java并发编程:Callable、Future和FutureTask