SparkLauncher使用用户作为配置单元的yarn-client运行spark-submit

时间:2017-06-19 12:00:34

标签: java yarn apache-nifi spark-launcher

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

1 个答案:

答案 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.

启动