运行SparkSubmit作业
用户可将自己开发的程序提交到MRS中,执行程序并获取结果,本章节指导您如何在MRS集群中提交一个SparkSubmit作业。
Spark是一个开源的并行数据处理框架,能够帮助用户简单、快速的开发,统一的大数据应用,对数据进行离线处理、流式处理、交互式分析等。
用户可以在MRS管理控制台在线创建一个作业并提交运行,也可以通过MRS集群客户端来以命令行形式提交作业。
前提条件
- 用户已经将运行作业所需的程序包和数据文件上传至OBS系统或HDFS中。
- 如果作业程序需要读取以及分析OBS文件系统中的数据,需要先配置MRS集群的存算分离,请参考配置MRS集群存算分离。
通过管理控制台提交作业
- 登录MRS管理控制台。
- 选择“现有集群”,选中一个运行中的集群并单击集群名称,进入集群信息页面。
- 在“概览”页签的基本信息区域,单击“IAM用户同步”右侧的“同步”进行IAM用户同步。
集群开启Kerberos认证时需执行该步骤,若集群未开启Kerberos认证,无需执行本步骤。
- IAM用户同步完成后,请等待5分钟,再进行提交作业,更多IAM用户同步说明请参考IAM用户同步MRS集群说明。
- 当IAM用户的用户组的所属策略从MRS ReadOnlyAccess向MRS CommonOperations、MRS FullAccess、MRS Administrator变化时,或者反之从MRS CommonOperations、MRS FullAccess、MRS Administrator向MRS ReadOnlyAccess变化时,由于集群节点的SSSD(System Security Services Daemon)缓存刷新需要时间,因此用户同步完成后,请等待5分钟,待新策略生效之后,再进行提交作业,否则会出现提交作业失败的情况。
- 当前IAM用户名中存在空格时(例如admin 01),不支持添加作业。
- 单击“作业管理”,在作业列表界面单击“添加”。
- “作业类型”选择“SparkSubmit”,并配置其他作业信息。
图1 添加Spark作业
表1 作业配置信息 参数
描述
示例
作业名称
作业名称,只能由字母、数字、中划线和下划线组成,并且长度为1~64个字符。
spark_job
执行程序路径
待执行程序包地址,可直接手动输入地址路径,也可单击“HDFS”或者“OBS”选择文件。
- 最多为1023字符,不能包含;|&>,<'$特殊字符,且不可为空或全空格。
- OBS程序路径地址以“obs://”开头,例如“obs://wordcount/program/XXX.jar”。HDFS程序路径地址以“hdfs://”开头,例如“hdfs://hacluster/user/XXX.jar”。
- SparkSubmit作业执行程序需要以“.jar”或“.py”结尾。
obs://wordcount/program/test.jar
运行程序参数
可选参数,为本次执行的作业配置相关优化参数(例如线程、内存、CPU核数等),用于优化资源使用效率,提升作业的执行性能。
Spark作业常用的运行程序参数如表2所示,可根据执行程序及集群资源情况进行配置。
-
执行程序参数
可选参数,程序执行的关键参数,该参数由用户程序内的函数指定,MRS只负责参数的传入。
多个参数间使用空格隔开,最多为150000字符,不能包含;|&><'$特殊字符,可为空。
注意:用户输入带有敏感信息(如登录密码)的参数时,可通过在参数名前添加“@”的方式为该参数值加密,以防止敏感信息被明文形式持久化。
在MRS管理控制台查看作业信息时,敏感信息会显示为“*”。
例如:username=testuser @password=用户密码
-
服务配置参数
可选参数,用于为本次执行的作业修改服务配置参数。
该参数的修改仅适用于本次执行的作业,如需对集群永久生效,请参考修改MRS集群组件配置参数进行集群组件配置参数的修改。
如需添加多个参数,请单击右侧的“添加”按钮。
例如作业需要通过AK/SK方式访问OBS,增加以下服务配置参数:
- fs.obs.access.key:访问OBS的密钥ID。
- fs.obs.secret.key:访问OBS与密钥ID对应的密钥。
-
命令参考
用于展示提交作业时提交到后台执行的命令。
spark-submit --master yarn--deploy-mode cluster
表2 Spark作业运行程序参数 参数
描述
示例
--conf
添加任务的配置项。
spark.executor.memory=2G
--driver-memory
设置driver的运行内存。
2G
--num-executors
设置executor启动数量。
5
--executor-cores
设置executor核数。
2
--class
设置任务的主类名,由用户程序内的函数指定。
org.apache.spark.examples.SparkPi
--files
上传文件给作业任务,可以是自己定义的配置文件或者某些数据文件,来源可以是OBS或者HDFS。
-
--jars
上传任务额外依赖的jar,通常用于给任务添加外部依赖包。
-
--executor-memory
设置executor的内存。
2G
--conf spark-yarn.maxAppAttempts
控制AM的重试次数。
设置为0时,不允许重试,设置为1时,允许重试一次。
0
表3 作业配置信息 参数
参数说明
作业名称
作业名称,只能由字母、数字、中划线和下划线组成,并且长度为1~64个字符。
说明:建议不同的作业设置不同的名称。
执行程序路径
待执行程序包地址,需要满足如下要求:
- 最多为1023字符,不能包含;|&>,<'$特殊字符,且不可为空或全空格。
- 执行程序路径可存储于HDFS或者OBS中,不同的文件系统对应的路径存在差异。
- OBS:以“s3a://”开头。示例:s3a://wordcount/program/xxx.jar
- HDFS:以“/user”开头。数据导入HDFS请参考上传应用数据至MRS集群。
- Spark Script需要以“.sql”结尾,MapReduce和Spark需要以“.jar”结尾。sql、jar不区分大小写。
执行程序参数
程序执行的关键参数,该参数由用户程序内的函数指定,MRS只负责参数的传入。多个参数间使用空格隔开。
配置方法:包名.类名
最多为150000字符,不能包含;|&><'$特殊字符,可为空。
注意:用户输入带有敏感信息(如登录密码)的参数时,可通过在参数名前添加“@”的方式,为该参数值加密,以防止敏感信息被明文形式持久化。在MRS管理控制台查看作业信息时,敏感信息显示为“*”。
例如:
username=testuser @password=用户密码
数据输入路径
数据输入地址。
数据可存储于HDFS或者OBS中,不同的文件系统对应的路径存在差异。- OBS:以“s3a://”开头。
- HDFS:以“/user”开头。数据导入HDFS请参考上传应用数据至MRS集群。
最多为1023字符,不能包含;|&>,<'$特殊字符,可为空。
输出路径
数据输出地址。
说明:- 配置此参数时,单击“OBS”或“HDFS”,并选择文件目录,或者手动输入文件目录,然后单击“确定”。
- 若添加hadoop-mapreduce-examples-x.x.x.jar样例程序或和hadoop-mapreduce-examples-x.x.x.jar类似的程序,请手动输入一个不存在的目录。
数据可存储于HDFS或者OBS中,不同的文件系统对应的路径存在差异。- OBS:以“s3a://”开头。
- HDFS:以“/user”开头。
最多为1023字符,不能包含;|&>,<'$特殊字符,可为空。
日志路径
作业日志存储地址,该日志信息记录作业运行状态。
数据可存储于HDFS或者OBS中,不同的文件系统对应的路径存在差异。- OBS:以“s3a://”开头。
- HDFS:以“/user”开头。
最多为1023字符,不能包含;|&>,<'$特殊字符,可为空。
- 确认作业配置信息,单击“确定”,完成作业的新增。
- 作业提交成功中,可在作业列表中查看作业运行状态及执行结果,等待作业状态变为“已完成”,可查看相关程序分析结果。
通过集群客户端提交作业
- 安装MRS集群客户端,具体操作可参考安装MRS集群客户端。
MRS集群中默认安装了一个客户端用于作业提交,也可直接使用该客户端。MRS 3.x及之后版本客户端默认安装路径为Master节点上的“/opt/Bigdata/client”,MRS 3.x之前版本为Master节点上的“/opt/client”。
- 将待运行的应用程序上传到集群客户端所在节点。
- 如果当前集群已开启Kerberos认证,参考创建MRS集群用户页面,创建一个用于提交作业的用户。
如果当前集群未开启Kerberos认证,则无需执行本步骤。
本示例创建一个机机用户,并分配了正确的用户组(hadoop、supergroup)、主组(supergroup)和角色权限(System_administrator、default)。
用户创建成功后,下载认证凭据文件:- 对于MRS 3.x及之后版本集群,请登录FusionInsight Manager页面选择“系统 > 权限 > 用户”,在新增用户的操作列单击“更多 > 下载认证凭据”。
- 对于MRS 2.x及之前版本集群,请登录MRS Manager页面选择“系统设置 > 用户管理”,在新增用户的操作列单击“更多 > 下载认证凭据”。
上传用户认证凭据到集群客户端节点的“/opt”目录下。
- 使用MRS集群客户端安装用户登录客户端所在的节点。
- 执行如下命令解压用户认证凭据文件,得到“user.keytab”和“krb5.conf”两个文件。
cd /opt
tar -xvf XXX_keytab.tar
- 执行以下命令初始化环境变量。
cd /opt/Bigdata/client
source bigdata_env
cd $SPARK_HOME
- 执行以下命令提交Spark作业。
./bin/spark-submit --master yarn --deploy-mode client --conf spark.yarn.principal=MRSTest --conf spark.yarn.keytab=/opt/user.keytab --class org.apache.spark.examples.SparkPi examples/jars/spark-examples_*.jar 10
... Pi is roughly 3.1402231402231404
参数解释:
- deploy-mode:Spark driver的运行模式,可设置为client或者cluster,本示例中使用client模式提交该作业。
- conf:额外的配置属性,例如本示例中使用keytab文件进行用户认证,配置以下参数:
- spark.yarn.principal:提交作业的用户名。
- spark.yarn.keytab:用户认证的keytab文件。
- class:应用程序的主类名,由具体运行的应用程序指定。
- XXX.jar:作业执行的程序。