SparkLauncher 运行 spark-submit with yarn-client with user as hive

SparkLauncher Run spark-submit with yarn-client with user as hive

正在尝试 运行 使用 masterURL=yarn-client 激发工作。使用 SparkLauncher 2.10。 java 代码封装在 nifi 处理器中。 Nifi 目前 运行 以 root 用户身份运行。当我执行 yarn application -list 时,我看到 spark 作业以 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 选项传递的内容。现在找不到 post!!

export 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. 使用USER=hive.

检查yarn application -list按预期启动