在本地模式wordCount程序的基础上改造
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)
def main(args: Array[String]): Unit = {
// 指定要分析的文件
val filePath = args(0) // 通过main方法参数获取
// 1. 创建一个SparkContext 打包的时候, 把master的设置去掉, 在提交的时候使用 --maser 来设置master
//在本地运行只能是local模式,
val conf: SparkConf = new SparkConf().setAppName("WordCount")
val sc: SparkContext = new SparkContext(conf)
// 2. 从数据源得到一个RDD
val lineRDD: RDD[String] = sc.textFile(filePath)
// 3. 对RDD做各种转换
val resultRDD: RDD[(String, Int)] = lineRDD
.flatMap(_.split("\\W"))
.map((_, 1))
.reduceByKey(_ + _)
// 4. 执行一个行动算子 (collect: 把各个节点计算后的数据, 拉取到驱动端)
val wordCountArr = resultRDD.collect()
wordCountArr.foreach(println)
// 5. 关闭SparkContext
sc.stop()
}
开始打包
Maven clean package. 跟Java项目打包是一样的
先执行 clean 再执行 package
然后target就会有打包好的jar
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ demo02 ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ demo02 ---
[INFO] Building jar: E:\ZJJ_SparkCore\demo02\target\demo02-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.197 s
[INFO] Finished at: 2020-11-17T13:46:14+08:00
[INFO] Final Memory: 19M/285M
[INFO] ---
给打好的包上传到Linux上
上传 “/root/soft/demo02-1.0-SNAPSHOT.jar” 位置上, 具体用什么上传方式都可以,我是用MobaXterm_Personal上传的.
准备要分析的数据
test.txt
111
sss
ddd
as
zjj
assssd
zjj
aaa
sssds
aaa
上传到HDFS上
我是直接用 HDFS Explorer工具上传的,你们也可以使用命令来上传
我上传在HDFS的位置是:
/wordCountData/test.txt
开始往Yarn上提交WordCount任务
在Linux的Spark根目录下
[root@zjj101 spark-2.1.1-bin-hadoop2.7]# bin/spark-submit \
> --master yarn \
> --deploy-mode client \
> --class com.WordCount \
> /root/soft/demo02-1.0-SNAPSHOT.jar \
> hdfs://zjj101:9000/wordCountData
说明 — master 指定是 yarn
--deploy-mode 是客户端模式
--class 写你上传的WordCount程序的全限定类目
/root/soft/demo02-1.0-SNAPSHOT.jar 就是你打好包上传到Linux的地址
hdfs://zjj101:9000/wordCountData 是你要统计分析的路径,这个路径是hdfs上的.我要分析hdfs上的wordCountData 文件夹下的所有文件.
执行结果
20/11/17 14:59:43 INFO scheduler.DAGScheduler: Job 0 finished: collect at WordCount.scala:26, took 22.159336 s
(ddd,1)
(zjj,2)
(as,1)
(sssds,1)
(assssd,1)
(sss,1)
(111,1)
(aaa,2)
代码地址
https://gitee.com/crow1/ZJJ_SparkCore/tree/11e7fccb7920663777fbcea483c998145c2ce075/demo02
测试文件在resources目录下