最近在使用spark on yarn模式提交任务,下面是我测试的案例
--提交命令
spark-submit --master yarn-cluster --class com.htlx.sage.bigdata.spark.etl.Application --driver-memory 1g --num-executors 2 --executor-memory 2g --executor-cores 2 my-spark-etl_2.11-1.0-SNAPSHOT.jar
--运行后报的错误是
--对这个错误很是郁闷,上网查说是配置问题,可是我运行其他代码就没问题,再说我在搭建集群的时候很是研究了一番,集群不会出现错误,所以我只能去yarn的运行日志中,在yarn的日志中也没有发现什么只有上面这个错误,然后我又去运行该程序的日志中找
-- 查看stderr文件,发现是找不到com/typesafe/scalalogging/Logger
-- 最终发现原因,是因为在运行的jar中没有将依赖包打进去。
-- 解决方案,因为我用的是sbt来进行构建scala工程的,使用了sbt的插件,在打包的时候没有将依赖的插件打包。
-- ssembly插件的目的是:
The goal is simple: Create a fat JAR of your project with all of its dependencies.
-- 即将项目依赖的大文件也打包到生成的jar中。
-- 插件的配置取决于sbt的版本 ,我的是sbt 1.1.4
,所以在project/plugins.sbt添加下面内容:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")
-- 生成jar包,进入该项目的根目录操作下面命令
sbt assembly
将依赖打包,然后对该项目打包
sbt package
--运行命令如下
spark-submit --master yarn-cluster --class com.htlx.sage.bigdata.spark.etl.Application --driver-memory 1g --num-executors 2 --executor-memory 2g --executor-cores 2 --jars spark-etl-assembly-1.0-SNAPSHOT.jar spark-etl_2.11-1.0-SNAPSHOT.jar