今晚听了王家林老师的第11课:彻底解密WordCount运行原理,课堂笔记以及作业如下:
在第一个Stage中,
def textFile( path: String, minPartitions: Int = defaultMinPartitions): RDD[String] = withScope { assertNotStopped() hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text], minPartitions).map(pair => pair._2.toString).setName(path) }
Hdfs:存储(分布式)数据 hadoopRDD:从hdfs上读取分布式数据,MapPartitionRdd操作,基于HadoopRDD产生的Partition去掉行的Key,不要索引只要文件内容,
textFile:hdfs->HadoopRDD->MapPartitionRDD
FlatMap: MapPartitionRdd操作:对每个Partition中的每一行单词切分并合并成一个大的单词实例的集合
val pairs = words.map{ word => (word,1)}
这一步MapPartitionRdd操作:对每个单词实例变为形如word => (word,1)
shuffle经过网络传输,
reduceByKey 源码 :
def combineByKeyWithClassTag[C]( new ShuffledRDD[K, V, C](self, partitioner) .setSerializer(serializer) .setAggregator(aggregator) .setMapSideCombine(mapSideCombine) }
保存数据到HDFS的角度讲shuffle后还有一个MapPartitionRDD
def saveAsTextFile(path: String) { this.map(x => (NullWritable.get(), new Text(x.toString))) .saveAsHadoopFile[TextOutputFormat[NullWritable, Text]](path) }
所以第二个Stage有 ShuffledRDD 和MapPartitionsRDD
后续课程可以参照新浪微博 王家林_DT大数据梦工厂:http://weibo.com/ilovepains
王家林 中国Spark第一人,微信公共号DT_Spark
博客:http://bolg.sina.com.cn/ilovepains
转载请说明出处!