前言
通过WordCount简单实现一个Scala以及Spark程序,来了解Spark中的对RDD数据转换Transformation,动作Action。
Spark-shell方式执行WordCount
注意以下每次转换之后得到RDD的数据结构,每上次的转换都是为后续的步骤做铺垫- textFile:通过内置的sc(SparkContext)对象调用textFile方法加载原hdfs文件
- flatMap:对文件的lines执行flatMap函数(打平,即把数组转换为一条一条的数据)即每一个单词为一条记录
- map:通过map函数转换数据即(word, number)
- reduceByKey:通过reduceByKey函数,会把相同的值转换为前后关系即(x,y),然后把它们相加即得到这个word的数量
- map:再通过map函数转换数据(number,word)为后续的排序取top10做数据准备
- sortByKey:false倒序,然后调用take方法取top10
1 | scala> val lines = sc.textFile("hdfs://master201:9000/lishijia/input/the_man_of_property.txt") |
分解之后的关键步骤
1 | scala> val lines = sc.textFile("hdfs://master201:9000/lishijia/input/the_man_of_property.txt") |
Spark sbt打包 集群运行Yarn WordCount
通过Idea sbt创建一个demo工程,并且打包部署提交任务到hadoop yarn集群运行,并且查看运行结果。
此处的代码与在Spark上面运行多了几个步骤
- 需要自己初始化SparkContext对象
- 通过标准输出的方式输出top10结果,方便日志查看
1 | package lishijia.spark.demo.wordcount |
1 | // sbt依赖文件类似pom依赖 |
通过Idea Sbt打包工程项目jar包,然后上传至master服务器,然后执行以下命令即可
1 | [root@master201 bin]# ./spark-submit --class lishijia.spark.demo.wordcount.WordCount --master yarn-cluster ../demo/spark-scala-demo.jar 1 |
1 | 18/10/21 20:47:22 INFO ui.SparkUI: Stopped Spark web UI at http://192.168.152.203:35460 |
总结
通过本地模式了解到了Spark RDD的一些简单操作,并且通过打包并且上传提交任务至yarn当中运行了自己编写的scala程序。
代码:https://github.com/lishijia/spark-scala-demo/tree/master/src/main/scala/lishijia/spark/demo