更新时间:2024-07-24 GMT+08:00

使用代理用户提交Spark作业

本章节仅适用MRS 3.3.0及之后版本。

场景说明

提交Spark任务时,用户可以使用当前实际运行用户提交任务,也可以使用代理用户提交任务。本章节介绍如何开启代理用户提交任务。

前提条件

创建用户,登录Manager页面,选择“系统 > 权限 > 用户”,单击“添加用户”,创建用户test(实际运行用户)和test1(代理用户)用户,用户组选择hadoop、hive和supergroup,主组选择hadoop。

在spark-beeline中使用代理用户提交Spark任务

  1. 修改JDBCServer实例配置。

    登录FusionInsight Manager页面,选择“集群 > 服务 > Spark > 配置 > 全部配置 > JDBCServer(角色) > 自定义”在参数“spark.core-site.customized.configs”中添加如下自定义参数:

    参数名称

    hadoop.proxyuser.test.hosts

    *

    hadoop.proxyuser.test.groups

    *

    • 配置中的test是实际运行用户。
    • 参数“hadoop.proxyuser.test.hosts”值为“*”:表示test用户连接后,可以使用任意代理用户,不限制集群节点。
    • 参数“hadoop.proxyuser.test.groups”值为“*”:表示test用户连接后,可以使用任意代理用户,不限制代理用户所在的用户组。

  2. 修改如下参数值,切换JDBCServer实例至多实例模式:

    参数名称

    spark.scheduler.allocation.file

    #{conf_dir}/fairscheduler.xml

    spark.thriftserver.proxy.enabled

    false

  3. 保存配置,重启Spark服务。
  4. 登录Spark客户端节点,执行如下命令:

    cd 客户端安装目录

    source bigdata_env

    source Spark/component_env

    安全模式执行以下命令,普通模式无需执行:

    kinit test,输入密码完成认证(首次登录需要修改密码)

  5. 使用Spark的 beeline命令提交任务。

    cd /opt/client/Spark/spark/bin

    ./beeline

    !connect jdbc:hive2://Zookeeper实例所在节点IP:Zookeeper Client的端口,Zookeeper实例所在节点IP:Zookeeper Client的端口,Zookeeper实例所在节点IP:Zookeeper Client的端口/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=sparkthriftserver;saslQop=auth-conf;auth=KERBEROS;principal=spark2x/hadoop.hadoop.com@HADOOP.COM;hive.server2.proxy.user=test1

    其中:

    • Zookeeper实例所在节点IP:在FusionInsight Manager页面,选择“集群 > 服务 > Zookeeper > 实例”,即可查看Zookeeper实例节点IP。
    • Zookeeper Client的端口:在FusionInsight Manager页面,选择“集群 > 服务 > Zookeeper > 配置> 全部配置”,搜索参数“clientPort”即可查看Zookeeper Client的端口。
    • hive.server2.proxy.user=test1 :test1为代理用户

  6. 创建Spark表。

    create table sparktest1(a string,b int);

    查看新创建的表:

    desc formatted sparktest1;

    可以看到表的owner为代理用户test1,使用代理用户成功。

在spark-sql和spark-submit中使用代理用户提交Spark任务

  1. 修改HDFS实例配置,登录FusionInsight Manager页面,选择“集群 > 服务 > HDFS > 配置 > 全部配置 > HDFS(服务)> 自定义”在参数“hdfs.core-site.customized.configs”中添加如下自定义参数,保存配置。

    参数名称

    hadoop.proxyuser.test.hosts

    *

    hadoop.proxyuser.test.groups

    *

  2. 修改Yarn实例配置,登录FusionInsight Manager页面,选择“集群 > 服务 > Yarn > 配置 > 全部配置 > Yarn(服务) > 自定义”在参数“yarn.core-site.customized.configs”中添加如下自定义参数,保存配置。

    参数名称

    hadoop.proxyuser.test.hosts

    *

    hadoop.proxyuser.test.groups

    *

  3. 修改SparkReource实例配置,登录FusionInsight Manager页面,选择“集群 > 服务 > Spark > 配置 > 全部配置 > SparkResource(角色) > 自定义”在参数“spark.core-site.customized.configs”中添加如下自定义参数,保存配置。

    参数名称

    hadoop.proxyuser.test.hosts

    *

    hadoop.proxyuser.test.groups

    *

  4. 修改Hive实例配置,登录FusionInsight Manager页面,选择“集群 > 服务 > Hive > 配置 > 全部配置 > Hive(服务) > 自定义”在参数“core.site.customized.configs”中添加如下自定义参数,保存配置。

    参数名称

    hadoop.proxyuser.test.hosts

    *

    hadoop.proxyuser.test.groups

    *

  5. 重启HDFS、Yarn、Spark、Hive服务,并更新客户端HDFS、Yarn、Spark、Hive配置文件。
  6. 登录Spark客户端节点,执行如下命令:

    cd 客户端安装目录

    source bigdata_env

    source Spark/component_env

    安全模式执行以下命令,普通模式无需执行:

    kinit test,输入密码完成认证(首次登录需要修改密码)

  7. 提交spark-sql任务。

    spark-sql --master yarn --proxy-user test1

  8. 创建Spark表。

    create table sparktest2(a string,b int);

    查看新创建的表:

    desc formatted sparktest2;

    可以看到表的owner为代理用户test1,使用代理用户成功。

  9. 使用重新下发的客户端提交spark-submit任务。

    spark-submit --master yarn --class org.apache.spark.examples.SparkPi --master yarn-client --proxy-user test1 /opt/client/Spark/spark/examples/jars/spark-examples_*.jar

  10. 查看yarn中运行的application信息。

    可以看到任务的运行用户为test1,使用代理用户成功。