更新时间:2024-09-04 GMT+08:00

运行SparkSubmit作业

用户可将自己开发的程序提交到MRS中,执行程序并获取结果,本章节指导您如何在MRS集群中提交一个SparkSubmit作业。

Spark是一个开源的并行数据处理框架,能够帮助用户简单、快速的开发,统一的大数据应用,对数据进行离线处理、流式处理、交互式分析等。

用户可以在MRS管理控制台在线创建一个作业并提交运行,也可以通过MRS集群客户端来以命令行形式提交作业。

前提条件

  • 用户已经将运行作业所需的程序包和数据文件上传至OBS系统或HDFS中。
  • 如果作业程序需要读取以及分析OBS文件系统中的数据,需要先配置MRS集群的存算分离,请参考配置MRS集群存算分离

通过管理控制台提交作业

  1. 登录MRS管理控制台。
  2. 选择“现有集群”,选中一个运行中的集群并单击集群名称,进入集群信息页面。
  3. “概览”页签的基本信息区域,单击“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),不支持添加作业。

  4. 单击“作业管理”,在作业列表界面单击“添加”。
  5. “作业类型”选择“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中,不同的文件系统对应的路径存在差异。

    最多为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字符,不能包含;|&>,<'$特殊字符,可为空。

  6. 确认作业配置信息,单击“确定”,完成作业的新增。
  7. 作业提交成功中,可在作业列表中查看作业运行状态及执行结果,等待作业状态变为“已完成”,可查看相关程序分析结果。

通过集群客户端提交作业

  1. 安装MRS集群客户端,具体操作可参考安装MRS集群客户端

    MRS集群中默认安装了一个客户端用于作业提交,也可直接使用该客户端。MRS 3.x及之后版本客户端默认安装路径为Master节点上的“/opt/Bigdata/client”,MRS 3.x之前版本为Master节点上的“/opt/client”。

  2. 将待运行的应用程序上传到集群客户端所在节点。

    • 本章节示例中使用的jar样例程序为“{集群客户端安装目录}/Spark2x/spark/examples/jars/spark-examples_*.jar”(部分版本集群中Spark2x文件夹名称为Spark,请以实际为准)。
    • 可登录客户端节点执行如下命令,将待运行的jar包样例上传至HDFS中。

      例如上传至HDFS的“/tmp”目录中:

      hdfs dfs -put {客户端安装目录}/Spark2x/spark/examples/jars/spark-examples_*.jar /tmp

  3. 如果当前集群已开启Kerberos认证,参考创建MRS集群用户页面,创建一个用于提交作业的用户。

    如果当前集群未开启Kerberos认证,则无需执行本步骤。

    本示例创建一个机机用户,并分配了正确的用户组(hadoop、supergroup)、主组(supergroup)和角色权限(System_administrator、default)。

    用户创建成功后,下载认证凭据文件:
    • 对于MRS 3.x及之后版本集群,请登录FusionInsight Manager页面选择“系统 > 权限 > 用户”,在新增用户的操作列单击“更多 > 下载认证凭据”
    • 对于MRS 2.x及之前版本集群,请登录MRS Manager页面选择“系统设置 > 用户管理”,在新增用户的操作列单击“更多 > 下载认证凭据”

    上传用户认证凭据到集群客户端节点的“/opt”目录下。

  4. 使用MRS集群客户端安装用户登录客户端所在的节点。
  5. 执行如下命令解压用户认证凭据文件,得到“user.keytab”和“krb5.conf”两个文件。

    cd /opt

    tar -xvf XXX_keytab.tar

  6. 执行以下命令初始化环境变量。

    cd /opt/Bigdata/client

    source bigdata_env

    cd $SPARK_HOME

  7. 执行以下命令提交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:作业执行的程序。