我的测试程序代码:
1.写好scala代码
功能:从hdfs读取数据,然后处理后输出到hdfs
import org.apache.spark.sql.{Dataset, SparkSession}
object TestLoadDbData {
def main(args: Array[String]): Unit = {
if (args.size != 1) {
println("程序参数不正确!!要求一个参数")
System.exit(1);
}
val strOutUrl =args(0)
println("------------ strOutUrl: "+strOutUrl)
//获取sparkSession对象:设置master、appName、config【1.yarn的主机地址;2.添加的yarn的资源队列】
val sparkSession = SparkSession.builder
.master("yarn-client")
// .master("local")
.appName("GetMmsi")
.config("yarn.resourcemanager.hostname", "ip")
.config("spark.yarn.queue", "spark")
.getOrCreate()
val hdfsUrl: String = "hdfs://ip:port/aa/bb/part-00000" //也是可以配置在启动命令的参数中的;hdfs输入
val rdd: Dataset[String] = sparkSession.read.textFile(hdfsUrl)
val countLines = rdd.count()
println("统计的总行数为:" + countLines)
rdd.write.csv(strOutUrl)
sparkSession.close()
}
}
2.本地使用local测试无误后,打包成jar包
这里有两种打包方式,1是胖包,2是瘦包,如果石胖包则是将所有的依赖包,都打进这个包里,有可能会报错,则将META-INF下的几个文件删除
在指定shell命令中键入:
zip -d <你的jar包名称.jar> META-INF/*.RSA META-INF/*.DSA META-INF/*.SF 这个是对压缩包里的文件进行删除的命令
3. spark可以使用yarn模式运行程序
对此脚本程序进行提交bin/spark-submit 命令提交,实在spark的安装目录下的bin文件夹下
./spark-submit
--master yarn --deploy-mode client
--class cetcocean.chenyekun.TestLoadDbData
/root/testSpark/SparkScalaTest.jar
hdfs://ip:port/aa/bb/csdn4
注意事项:这是启动spark-on yarn模式的最简单的命令了;更加详细的命令如下图所示
还可以写成一个shell脚本:
#!/usr/bin/env bash
bin/spark-submit \
--master yarn \ #你的master平台:采用yarn模式时候:是yarn
--name wordcount \ #你的任务名称:作业命令:appName
--deploy-mode client \ #deploy-mode模式设置,可以使用client 或者cluster模式;(注意保持与应用程序保持一致,否则出现任务失败的情况)
--class spark.WordCount \ #你编写的主类全路径名称
--driver-memory 1G \ #driver的内存分配
--driver-cores 1 \ #driver的核心数
--executor-memory 1G \ # 每个executor的内存
--executor-cores 1 \ #executor的核心数
--num-executors 1 \ # executor个数
--conf spark.app.coalesce=2 \ #分区数
4.等待执行成功后看hdfs文件输出
参考:https://blog.csdn.net/maketubu7/article/details/81136358
https://www.cnblogs.com/LHWorldBlog/p/8414342.html