尝试使用masterURL=yarn-client
运行spark job。使用SparkLauncher 2.10。 java代码包含在nifi处理器中。 Nifi目前正在以root身份运行。当我做纱线申请表时,我看到火花作业以USER = root
开始。我想用USER = hive
运行它。
以下是我的SparkLauncher代码。
Process spark = new SparkLauncher()
.setSparkHome(cp.fetchProperty(GlobalConstant.spark_submit_work_dir).toString())
.setAppResource(cp.fetchProperty(GlobalConstant.spark_app_resource))
.setMainClass(cp.fetchProperty(GlobalConstant.spark_main_class))
.addAppArgs(ps.getName())
// .setConf(SparkLauncher.DRIVER_EXTRA_JAVA_OPTIONS,"-Duser.name=hive")
.setConf(SparkLauncher.DRIVER_EXTRA_JAVA_OPTIONS, "-Dlog4j.configuration=file:///opt/eim/log4j_submitgnrfromhdfs.properties")
.setVerbose(true)
.launch();
我是否需要将用户作为驱动程序附加选项?环境是非kerberos。 读取我需要传递用户名作为驱动程序额外java选项的地方。现在找不到那个帖子!!
答案 0 :(得分:1)
导出HADOOP_USER_NAME = hive工作。 SparkLauncher具有重载以接受环境变量的Map。至于spark.yarn.principle,环境是非kerberos。根据我的阅读yarn.principle只适用于kerboros。做了以下
Process spark = new SparkLauncher(getEnvironmentVar(ps.getRunAs()))
.setSparkHome(cp.fetchProperty(GlobalConstant.spark_submit_work_dir).toString())
.setAppResource(cp.fetchProperty(GlobalConstant.spark_app_resource))
.setMainClass(cp.fetchProperty(GlobalConstant.spark_main_class))
.addAppArgs(ps.getName())
// .setConf(SparkLauncher.DRIVER_EXTRA_JAVA_OPTIONS,"-Duser.name=hive")
.setConf(SparkLauncher.DRIVER_EXTRA_JAVA_OPTIONS, "-Dlog4j.configuration=file:///opt/eim/log4j_submitgnrfromhdfs.properties")
.setVerbose(true)
.launch();
而不是使用new SparkLancher()
SparkLauncher(java.util.Map<String,String> env).
添加或替换HADOOP_USER_NAME=hive.
已检查yarn application -list
已按预期USER=hive.