You need to enable JavaScript to run this app.
导航

EMR 集群客户端最佳实践

最近更新时间2024.02.02 19:02:06

首次发布时间2023.10.07 15:19:21

1 使用 EMR-CLI 自定义部署 Gateway 环境

Gateway 主要用于向计算集群提交任务和进行安全隔离。火山引擎 E-MapReduce(EMR)提供基于火山引擎 ECS 部署 Gateway 环境的工具 EMR-CLI,您可以灵活创建 ECS 实例并基于 EMR-CLI 快速部署 Gateway 环境。

1.1 前提条件

已经在 EMR 中创建了 Hadoop 3x、Hadoop 2x 、Presto、Trino、Doris、Starrocks 类型集群,且计算集群状态为运行中。详见创建集群

1.2 使用限制

  • 本文档仅适用于数据湖集群的 Gateway 环境部署, EMR 3.x 版本大于等于 EMR-3.5.0,EMR 2.x 版本大于等于EMR-2.4.0,且未开启 Kerberos 认证。

  • EMR 集群内部 ECS 实例已集成相关 Client,请勿重复安装,以免影响集群运行环境。

  • EMR-CLI 部署 Gateway 客户端时采用覆盖安装模式,如果您在 ECS 已部署过 Gateway,则重新部署时会在同目录下重复安装新的客户端。

  • 目前支持该方式部署Gateway的服务有HDFS、YARN、HBASE、MAPREDUCE2、HIVE、SPARK、FLINK、SQOOP 、PRESTO 、TRINO、TEZ、PHOENIX、DORIS、STARROCKS。自3.8.0之后新增对如下几个组件的部署支持:IMPALA,KERBY,HUDI、ICEBERG、DELTALAKE。

1.2 首次部署 Gateway 环境

注意

与 Gateway 环境相关的文件夹包括 /usr/lib/emr、/etc/emr、/var/log/emr。建议 Gateway 环境部署在纯净的 ECS 节点上,如果要与其他 application 共用,请确保上述文件夹不被改动,否则会影响客户端服务。

  1. 登录 ECS 控制台,创建实例。操作详见购买实例

    相关参数推荐如下。

    参数说明
    地域及可用区与 EMR 集群所在地域和可用区一致。
    镜像使用 Velinux 操作系统,且非 Centos 兼容版,或 Centos 7.9 版本。
    系统盘使用 PL0 或者 FlexPL 云盘,不小于 60 GiB。
    网络与 EMR 集群 VPC 一致
    安全组与 EMR 集群的 Master 实例组安全组一致,保证 ECS 实例与 EMR 集群的网络互通。
  2. 通过 SSH 方式登录到创建成功的 ECS 实例上。登录方式详见登录实例

  3. 执行以下命令,安装EMR-CLI。

regionId=`curl http://100.96.0.96/latest/region_id`; curl https://emrcli-${regionId}.tos-${regionId}.ivolces.com/emrcli.sh -o emrcli.sh; chmod 755 emrcli.sh; ./emrcli.sh install ${regionId}

安装成功会返回以下信息。

```shell
install emrcli success
```
  1. 可选: 配置 meta.json 文件

    您可以在执行命令前,提前将部署客户端所需要的身份认证 AK、SK 维护在/usr/local/emrcli/目录下的 meta.json 文件中,避免后续每次执行命令时输入。
      meta.json 文件内容示例如下。

    {
        "access-key-id": "xxx",
        "access-key-secret": "xxx"
    }
    

    您需要根据实际情况修改以下参数。

    参数是否必选说明
    access-key-id火山引擎账号的 Access Key。
    access-key-secret火山引擎账号的 Access Secret。

    执行以下命令,部署 EMR Gateway 客户端。

    说明

    10M 公网带宽下该步骤大约需要 3 分钟。

    • 已配置 meta.json 文件:

      emrcli gateway deploy \
        --clusterId <ClusterId> \
        --appNames <ApplicationName>
      
    • 未配置 meta.json 文件:

      emrcli gateway deploy \
        --clusterId <ClusterId> \
        --appNames <ApplicationName> \
        --access-key-id <AccessKeyId> \
        --access-key-secret <AccessKeySecret>
      

    您需要根据实际情况修改以下参数。

    参数是否必选描述
    clusterId在 EMR 上已创建集群的集群 ID。
    appNames应用名称。有多个应用时,使用英文逗号(,)隔开,例如:HDFS,YARN。未指定该参数时,默认为集群所有支持的客户端应用,例如 Hive 和 HDFS。

    部署成功会返回以下信息。

    deploy emr gateway sucess
    

    注意

    Gateway 安装后,系统环境变量中的 JAVA_HOME 会调整为 /usr/lib/jvm/java-8-openjdk-velinux-amd64 。您可以在 /etc/profile.d/jdk.sh 文件中修改,但修改后可能影响 Gateway 功能,因此请谨慎操作。

  2. 重新登录 ECS 实例或者执行以下指令:

    source /etc/profile
    

    使得系统环境变量生效。

1.3 管理 Gateway 环境

Gateway 创建完成后,如果 Gateway 关联的计算集群进行了服务的新增或服务配置的更改,您可以通过以下命令更新客户端组件或同步最新配置。

1.3.1 更新客户端组件

当计算集群服务新增时,通过 EMR CLI 在 Gateway 上新增对应的客户端。
命令和初次部署基本相同,只需在 appNames 参数中注明对应新增的应用名称,已安装应用不会受到影响。

  • 已配置 meta.json 文件

    emrcli gateway deploy \
      --clusterId <ClusterId> \
      --appNames <ApplicationName>
    
  • 未配置 meta.json 文件

    emrcli gateway deploy \
      --clusterId <ClusterId> \
      --appNames <ApplicationName> \
      --access-key-id <AccessKeyId> \
      --access-key-secret <AccessKeySecret>
    

更新成功后返回以下信息。

deploy emr gateway success

1.3.2 同步 EMR 集群修改后的配置

通过 EMR CLI 同步 EMR 集群修改后的应用配置(例如 core-site.xml 等)到 Gateway 客户端。

注意

同步配置时会覆盖 Gateway 上的配置,因此请谨慎操作。

  • 已配置 meta.json 文件

    emrcli gateway refreshConfigs \
      --clusterId <ClusterId> \
      --appNames <ApplicationName>
    
  • 未配置 app_info.json 文件

    emrcli gateway refreshConfigs \
      --clusterId <ClusterId> \
      --appNames <ApplicationName> \
      --access-key-id <AccessKeyId> \
      --access-key-secret <AccessKeySecret>
    

同步成功后返回以下信息。

refresh emr gateway configs success

1.4 开启Kerberos后的认证流程

当关联集群为3.8.0及之后的Hadoop类型,且开启kerberos,在上述部署流程之后,客户端节点可执行kinit命令,提交任务前身份认证可以通过以下两种方式

  • 方式一、从集群用户管理界面download 某用户keytab至Client Node上,之后执行以下命令
kinit -kt (keytab路径) 用户名
  • 方式二、直接执行以下命令
kinit (用户)
(输入密码)

输入用户密码,进行认证。

1.5 针对 Presto、Trino 开箱即用的额外操作步骤

若集群中存在 Trino 或 Presto 服务,想要在 Client node 上提交任务,需要额外从集群中安装 Coordinator 的节点上拷贝密钥文件至 Client Node 上,详细步骤如下:

1.5.1 Trino

  1. SSH 方式登录到集群内 Master 节点组任意节点,假设为 master-1 节点,检查 /etc/emr/trino/keystore/keystore.jks 密钥文件是否存在。

  2. 登录到 Client node 节点上以 root 身份执行如下 scp 命令,拷贝密钥文件:

    密钥登录时:
    scp -i 密钥.pem(保证登录集群节点所需要的密钥在 Client node 上存在) -r root@emr-master-1:/etc/emr/trino/keystore /etc/emr/trino/ 
    
    非密钥登录时:
    scp -r root@emr-master-1:/etc/emr/trino/keystore /etc/emr/trino/
    
  3. 修改密钥文件,以 root 身份执行如下命令:

    chmod -R a+x /etc/emr/trino/keystore
    
  4. 执行 trino --user xxx --password 验证是否有效。

  5. 若开启Kerberos还需额外认证步骤如下

    • 从集群用户管理界面download 某用户keytab至Client Node上

    • 执行命令

trino --krb5-principal=(用户名) --krb5-keytab-path=(keytab路径)

1.5.2 Presto

  1. SSH 方式到集群内 Master 节点组任意节点,假设为 master-1 节点,检查 /etc/emr/presto/keystore/keystore.jks 密钥文件是否存在。

  2. 登录到 Client node 节点上以 root 身份执行如下 scp 命令,拷贝密钥文件:

    密钥登录时:
    scp -i 密钥.pem(保证登录集群节点所需要的密钥在Client node上存在) -r root@emr-master-1:/etc/emr/presto/keystore /etc/emr/presto/ 
    
    非密钥登录时:
    scp -r root@emr-master-1:/etc/emr/presto/keystore /etc/emr/presto/
    
  3. 修改密钥文件,以 root 身份执行如下命令:

    chmod -R a+x /etc/emr/presto/keystore
    
  4. 执行 presto --user xxx --password 验证是否有效。

  5. 若开启Kerberos还需额外认证步骤如下

    • 从集群用户管理界面download 某用户keytab至Client Node上

    • 执行命令

presto --krb5-principal=(用户名) --krb5-keytab-path=(keytab路径)

2 提示

针对 Velinux 版本系统镜像,EMR 集群客户端部署后,会安装一个 MySQL 服务,根目录在 /usr/local/mysql 下。可以利用 mysql client 来访问集群内的 Doris、StarRocks 服务。

默认 root 密码在 /root/mysql/password.dat 中,可以开箱即用。