GCP Dataproc CLI提交Spark作业properties参数配置报错问题
问题根因
你构造的命令存在多处语法与参数规则错误,导致gcloud CLI完全无法正确解析Spark配置项,直接将传入的properties字符串识别为待读取的作业文件路径,才会抛出文件不存在的错误。核心错误点如下:
- 命令基础拼写错误:CLI工具名是
gcloud不是cloud,Dataproc作业提交的命令组是复数jobs不是单数job - 误用/虚构短参数:
- gcloud全局参数中
-p是--project(指定GCP项目ID)的缩写,根本不是--properties的短参,--properties没有短参数格式,必须写全参数名 - 不存在
-t(指定作业类型)、-m(指定主类)、-f(指定Jar包)、-a(指定作业参数)这些自定义短参,属于和其他CLI工具的参数记混 - 指定集群的
-c短参是合法的,但其余短参均无效
- gcloud全局参数中
- properties参数格式错误:
- 键值对之间必须用
=分隔,不能用冒号 - 你写的
spark.driver.extraJavaOptions-DARGO_ENV_FILE项中,配置key和value之间漏写了等号 - 多配置项用逗号分隔的规则本身是对的,但因为参数名写错,根本没有被识别为Spark配置
- 键值对之间必须用
- 作业参数传参格式错误:主类入参不能用逗号拼接,不能用中文单引号包裹,必须放在固定分隔符后逐一声明,中文引号会被识别为参数内容的一部分,导致参数传值错误
正确等价命令
和控制台配置、给出的spark-submit效果完全等价的gcloud命令如下:
gcloud dataproc jobs submit spark \ --cluster=my_cluster \ --class=main.class \ --properties="spark.executor.extraJavaOptions=-DARGO_ENV_FILE=gs://file.properties,spark.driver.extraJavaOptions=-DARGO_ENV_FILE=gs://file.properties" \ gs://my_jar.jar \ -- arg1 arg2 arg3
关键注意事项
--properties后的整串配置必须用双引号包裹,避免shell提前解析等号、逗号等特殊字符导致传参断裂- 所有传给Spark主类的业务参数,必须放在
--分隔符之后,每个参数单独书写,不要加任何拼接符号,CLI会按顺序把分隔符后的内容全部传给主类 - 如果你的Jar包是主程序Jar,直接作为位置参数写在
--之前即可,不需要加额外参数前缀;如果是依赖Jar,才需要放在--jars参数后用逗号分隔 - 如果你的本地gcloud没有配置默认项目,需要额外加全局参数
--project=你的GCP项目ID指定项目
内容的提问来源于stack exchange,提问作者Sumit Kumar
相关产品推荐
相关产品推荐

