在本地模式wordCount程序的基础上改造

  1. Spark Shell 仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在 IDE 中编制程序,然后打成 jar 包,然后提交到集群,最常用的是创建一个 Maven 项目,利用 Maven 来管理 jar 包的依赖。

这是本地模式的WordCount程序

https://blog.csdn.net/qq_41489540/article/details/109740491

打包的时候一定要给代码.setMaster(“local[2]”) 这个去掉, 在提交的时候使用 —maser 来设置master

将文件路径变成从Main方法传递过来 val filePath = args(0)

  1. def main(args: Array[String]): Unit = {
  2. // 指定要分析的文件
  3. val filePath = args(0) // 通过main方法参数获取
  4. // 1. 创建一个SparkContext 打包的时候, 把master的设置去掉, 在提交的时候使用 --maser 来设置master
  5. //在本地运行只能是local模式,
  6. val conf: SparkConf = new SparkConf().setAppName("WordCount")
  7. val sc: SparkContext = new SparkContext(conf)
  8. // 2. 从数据源得到一个RDD
  9. val lineRDD: RDD[String] = sc.textFile(filePath)
  10. // 3. 对RDD做各种转换
  11. val resultRDD: RDD[(String, Int)] = lineRDD
  12. .flatMap(_.split("\\W"))
  13. .map((_, 1))
  14. .reduceByKey(_ + _)
  15. // 4. 执行一个行动算子 (collect: 把各个节点计算后的数据, 拉取到驱动端)
  16. val wordCountArr = resultRDD.collect()
  17. wordCountArr.foreach(println)
  18. // 5. 关闭SparkContext
  19. sc.stop()
  20. }

开始打包

Maven clean package. 跟Java项目打包是一样的

Yarn上执行Spark的wordCount的demo - 图1

先执行 clean 再执行 package

然后target就会有打包好的jar

  1. [INFO] No sources to compile
  2. [INFO]
  3. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ demo02 ---
  4. [INFO] Tests are skipped.
  5. [INFO]
  6. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ demo02 ---
  7. [INFO] Building jar: E:\ZJJ_SparkCore\demo02\target\demo02-1.0-SNAPSHOT.jar
  8. [INFO] ------------------------------------------------------------------------
  9. [INFO] BUILD SUCCESS
  10. [INFO] ------------------------------------------------------------------------
  11. [INFO] Total time: 6.197 s
  12. [INFO] Finished at: 2020-11-17T13:46:14+08:00
  13. [INFO] Final Memory: 19M/285M
  14. [INFO] ---

给打好的包上传到Linux上

上传 “/root/soft/demo02-1.0-SNAPSHOT.jar” 位置上, 具体用什么上传方式都可以,我是用MobaXterm_Personal上传的.

准备要分析的数据

test.txt

  1. 111
  2. sss
  3. ddd
  4. as
  5. zjj
  6. assssd
  7. zjj
  8. aaa
  9. sssds
  10. aaa

上传到HDFS上

我是直接用 HDFS Explorer工具上传的,你们也可以使用命令来上传

我上传在HDFS的位置是:

  1. /wordCountData/test.txt

开始往Yarn上提交WordCount任务

在Linux的Spark根目录下

  1. [root@zjj101 spark-2.1.1-bin-hadoop2.7]# bin/spark-submit \
  2. > --master yarn \
  3. > --deploy-mode client \
  4. > --class com.WordCount \
  5. > /root/soft/demo02-1.0-SNAPSHOT.jar \
  6. > hdfs://zjj101:9000/wordCountData

说明 — master 指定是 yarn

  1. --deploy-mode 是客户端模式
  2. --class 写你上传的WordCount程序的全限定类目
  3. /root/soft/demo02-1.0-SNAPSHOT.jar 就是你打好包上传到Linux的地址
  4. hdfs://zjj101:9000/wordCountData 是你要统计分析的路径,这个路径是hdfs上的.我要分析hdfs上的wordCountData 文件夹下的所有文件.

执行结果

  1. 20/11/17 14:59:43 INFO scheduler.DAGScheduler: Job 0 finished: collect at WordCount.scala:26, took 22.159336 s
  2. (ddd,1)
  3. (zjj,2)
  4. (as,1)
  5. (sssds,1)
  6. (assssd,1)
  7. (sss,1)
  8. (111,1)
  9. (aaa,2)

代码地址

https://gitee.com/crow1/ZJJ_SparkCore/tree/11e7fccb7920663777fbcea483c998145c2ce075/demo02

测试文件在resources目录下