Gateway 主要用于向计算集群提交任务和进行安全隔离。火山引擎 E-MapReduce(EMR)提供基于火山引擎 ECS 部署 Gateway 环境的工具 EMR-CLI,您可以灵活创建 ECS 实例并基于 EMR-CLI 快速部署 Gateway 环境。
已经在 EMR 中创建了 Hadoop 3x、Hadoop 2x类型集群,且计算集群状态为运行中。详见创建集群。
注意
与 Gateway 环境相关的文件夹包括 /usr/lib/emr、/etc/emr、/var/log/emr。建议 Gateway 环境部署在纯净的 ECS 节点上,如果要与其他 application 共用,请确保上述文件夹不被改动,否则会影响客户端服务。
登录 ECS 控制台,创建实例。操作详见购买实例。
相关参数推荐如下。
参数 | 说明 |
---|---|
地域及可用区 | 与 EMR 集群所在地域和可用区一致。 |
镜像 | 使用 Velinux 操作系统,且非 Centos 兼容版,或 Centos 7.9 版本。 |
系统盘 | 使用 PL0 或者 FlexPL 云盘,不小于 60 GiB。 |
网络 | 与 EMR 集群 VPC 一致 |
安全组 | 与 EMR 集群的 Master 实例组安全组一致,保证 ECS 实例与 EMR 集群的网络互通。 |
通过 SSH 方式登录到创建成功的 ECS 实例上。登录方式详见登录实例。
执行以下命令,安装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
可选: 配置 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 功能,因此请谨慎操作。
重新登录 ECS 实例或者执行以下指令:
source /etc/profile
使得系统环境变量生效。
Gateway 创建完成后,如果 Gateway 关联的计算集群进行了服务的新增或服务配置的更改,您可以通过以下命令更新客户端组件或同步最新配置。
当计算集群服务新增时,通过 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
通过 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
当关联集群为3.8.0及之后的Hadoop类型,且开启kerberos,在上述部署流程之后,客户端节点可执行kinit命令,提交任务前身份认证可以通过以下两种方式
kinit -kt (keytab路径) 用户名
kinit (用户) (输入密码)
输入用户密码,进行认证。
若集群中存在 Trino 或 Presto 服务,想要在 Client node 上提交任务,需要额外从集群中安装 Coordinator 的节点上拷贝密钥文件至 Client Node 上,详细步骤如下:
SSH 方式登录到集群内 Master 节点组任意节点,假设为 master-1 节点,检查 /etc/emr/trino/keystore/keystore.jks 密钥文件是否存在。
登录到 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/
修改密钥文件,以 root 身份执行如下命令:
chmod -R a+x /etc/emr/trino/keystore
执行 trino --user xxx --password 验证是否有效。
若开启Kerberos还需额外认证步骤如下
trino --krb5-principal=(用户名) --krb5-keytab-path=(keytab路径)
SSH 方式到集群内 Master 节点组任意节点,假设为 master-1 节点,检查 /etc/emr/presto/keystore/keystore.jks 密钥文件是否存在。
登录到 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/
修改密钥文件,以 root 身份执行如下命令:
chmod -R a+x /etc/emr/presto/keystore
执行 presto --user xxx --password 验证是否有效。
若开启Kerberos还需额外认证步骤如下
presto --krb5-principal=(用户名) --krb5-keytab-path=(keytab路径)
针对 Velinux 版本系统镜像,EMR 集群客户端部署后,会安装一个 MySQL 服务,根目录在 /usr/local/mysql 下。可以利用 mysql client 来访问集群内的 Doris、StarRocks 服务。
默认 root 密码在 /root/mysql/password.dat 中,可以开箱即用。