0

尝试使用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 选项传递。现在找不到那个帖子了!!

4

1 回答 1

1

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. 检查yarn application -list启动USER=hive.

于 2017-06-20T22:16:32.950 回答