前言
众所周知,spark-sql 不能提交到远端并且使用 cluster进行部署:
shell
huangyichun@bigdata130023:~ # spark-sql --master yarn --deploy-mode cluster
Exception in thread "main" org.apache.spark.SparkException: Cluster deploy mode is not applicable to Spark SQL shell.
at org.apache.spark.deploy.SparkSubmit.error(SparkSubmit.scala:972)
at org.apache.spark.deploy.SparkSubmit.prepareSubmitEnvironment(SparkSubmit.scala:283)
at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:898)
at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:180)
at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:203)
at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:90)
at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1043)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1052)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
如果环境可以请使用 --deploy-mode client,如果有特殊需要请见下
这是由于spark-sql 提供了一种本地交互模式,让client
端在交互模式中提供sql
进行执行。但spark-sql
也有 -e
和 -f
模式,提供用户一种 -e sqlString
和 -f sqlFile
的方式运行,这两种方式并不需要交互模式。
所以对此本博客修改了spark-sql
源码,删除了交互模式的退出判断,让spark-sql
可以直接运行在 cluster
中。并与源生一样,可以使用-e sqlString
以及-f sqlFile
进行提交。
改造jar包获取
包可以直接下载这里(不需要积分,请好评),或者github查看源码更改spark版本
提供的包为 spark 3.2.2 版本,scala 2.12版本;与hadoop版本无关。
github地址: https://github.com/ChunChunWeb/spark-sql-for-cluster
运行方式
可以通过 shell 命令直接提交:
shell
spark-submit --class org.apache.spark.sql.hive.cluster.SparkSqlCliClusterDriver \
--master yarn \
--deploy-mode cluster \
my-spark-sql-cluster.jar