You need to enable JavaScript to run this app.
导航
EMR 集群客户端最佳实践
最近更新时间:2024.08.19 14:01:34首次发布时间: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类型集群,且计算集群状态为运行中。详见创建集群

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}

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

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 中,可以开箱即用。