使用代理用户提交Spark作业
本章节仅适用MRS 3.3.0及之后版本。
场景说明
提交Spark任务时,用户可以使用当前实际运行用户提交任务,也可以使用代理用户提交任务。本章节介绍如何开启代理用户提交任务。
前提条件
创建用户,登录Manager页面,选择“系统 > 权限 > 用户”,单击“添加用户”,创建用户test(实际运行用户)和test1(代理用户)用户,用户组选择hadoop、hive和supergroup,主组选择hadoop。
在spark-beeline中使用代理用户提交Spark任务
- 修改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用户连接后,可以使用任意代理用户,不限制代理用户所在的用户组。
- 修改如下参数值,切换JDBCServer实例至多实例模式:
参数名称
值
spark.scheduler.allocation.file
#{conf_dir}/fairscheduler.xml
spark.thriftserver.proxy.enabled
false
- 保存配置,重启Spark服务。
- 登录Spark客户端节点,执行如下命令:
cd 客户端安装目录
source bigdata_env
source Spark/component_env
安全模式执行以下命令,普通模式无需执行:
kinit test,输入密码完成认证(首次登录需要修改密码)
- 使用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为代理用户
- 创建Spark表。
create table sparktest1(a string,b int);
查看新创建的表:
desc formatted sparktest1;
可以看到表的owner为代理用户test1,使用代理用户成功。
在spark-sql和spark-submit中使用代理用户提交Spark任务
- 修改HDFS实例配置,登录FusionInsight Manager页面,选择“集群 > 服务 > HDFS > 配置 > 全部配置 > HDFS(服务)> 自定义”在参数“hdfs.core-site.customized.configs”中添加如下自定义参数,保存配置。
参数名称
值
hadoop.proxyuser.test.hosts
*
hadoop.proxyuser.test.groups
*
- 修改Yarn实例配置,登录FusionInsight Manager页面,选择“集群 > 服务 > Yarn > 配置 > 全部配置 > Yarn(服务) > 自定义”在参数“yarn.core-site.customized.configs”中添加如下自定义参数,保存配置。
参数名称
值
hadoop.proxyuser.test.hosts
*
hadoop.proxyuser.test.groups
*
- 修改SparkReource实例配置,登录FusionInsight Manager页面,选择“集群 > 服务 > Spark > 配置 > 全部配置 > SparkResource(角色) > 自定义”在参数“spark.core-site.customized.configs”中添加如下自定义参数,保存配置。
参数名称
值
hadoop.proxyuser.test.hosts
*
hadoop.proxyuser.test.groups
*
- 修改Hive实例配置,登录FusionInsight Manager页面,选择“集群 > 服务 > Hive > 配置 > 全部配置 > Hive(服务) > 自定义”在参数“core.site.customized.configs”中添加如下自定义参数,保存配置。
参数名称
值
hadoop.proxyuser.test.hosts
*
hadoop.proxyuser.test.groups
*
- 重启HDFS、Yarn、Spark、Hive服务,并更新客户端HDFS、Yarn、Spark、Hive配置文件。
- 登录Spark客户端节点,执行如下命令:
cd 客户端安装目录
source bigdata_env
source Spark/component_env
安全模式执行以下命令,普通模式无需执行:
kinit test,输入密码完成认证(首次登录需要修改密码)
- 提交spark-sql任务。
spark-sql --master yarn --proxy-user test1
- 创建Spark表。
create table sparktest2(a string,b int);
查看新创建的表:
desc formatted sparktest2;
可以看到表的owner为代理用户test1,使用代理用户成功。
- 使用重新下发的客户端提交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
- 查看yarn中运行的application信息。
可以看到任务的运行用户为test1,使用代理用户成功。