- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11课:彻底解析wordcount运行原理
本期内容:
1. 从数据流动视角解密WordCount ,即用Spark 作单词计数统计,数据到底是怎么流动的。
2. 从RDD 依赖关系的视角解密WordCount 。Spark 中的一切操作皆RDD,后面的RDD
对前面的RDD 有依赖关系。
3. DAG 与Lineage 的思考。依赖关系会形成DAG。
1. 从数据流动视角解密WordCount
(1)在IntelliJ IDEA 中编写下面代码:
package com.dt.spark
/**
* 使用Java 的方式开发进行本地测试Spark 的WordCount 程序
* @author DT 大数据梦工厂
* /ilovepain
*/
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object WordCount {
def main(args: Array[String]){
val conf = new SparkConf()
conf.setAppName(Wow, My Fir t Spark App!)
conf.setMaster(local)
val sc = new SparkContext(conf)
val lines = sc.textFile(D://tmp//helloSpark.txt, 1)
val words = lines.flatMap { line = line.split( ) }
val pairs = words.map { word = (word,1) }
val wordCounts = pairs.reduceByKey(_+_)
wordCounts.foreach(wordNumberPair = println(wordNumberPair._1 + : +
wordNumberPair._2))
sc.stop()
}
}
(2 )在D 盘下地tmp 文件夹下新建helloSpark.txt 文件,内容如下:
Hello Spark Hello Scala
Hello Hadoop
Hello Flink
Spark is awesome
(3 ) 在WordCount 代码区域点击右键选择Run WordCount。可以得到如下运行结果:
Flink : 1
Spark : 2
is : 1
Hello : 4
awesome : 1
Hadoop : 1
Scala : 1
下面从数据流动的视角分析数据到底是怎么被处理的。
说明:
Spark 有三大特点:
1. 分布式。无论数据还是计算都是分布式的。默认分片策略:Block 多大,分片就多大。但
这种说法不完全准确,因为分片切分时有的记录可能跨两个Block,所以一个分片不会严格
地等于Block 的大小,例如HDFS 的Block 大小是128MB 的话,分片可能多几个字节或少
几个字节。一般情况下,分片都不会完全与Block 大小相等。
分片不一定小于Block 大小,因为如果最后一条记录跨两个Block 的话,分片会把最后一条
记录放在前一个分片中。
2. 基于内存 (部分基于磁盘)
3. 迭代
textFile 源码 (SparkContext 中);
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)
}
可以看出在进行了hadoopFile 之后又进行了map 操作。
HadoopRDD 从HDFS 上读取分布式文件,并且以数据分片的方式存在于集群之中。
map 的源码 (RDD.scala 中)
def map [U: Class
文档评论(0)