EMR-3.40及后续版本或EMR-5.6.0及后续版本的集群,支持OSS-HDFS(JindoFS服务)作为数据存储,提供缓存加速服务和Ranger鉴权功能,使得在Hive或Spark等大数据ETL场景将获得更好的性能和HDFS平迁能力。本文为您介绍E-MapReduce(简称EMR)Hive或Spark如何操作OSS-HDFS。
背景信息
OSS-HDFS服务是一款云原生数据湖存储产品,基于统一的元数据管理能力,在完全兼容HDFS文件系统接口的同时,提供充分的POSIX能力支持,能更好的满足大数据和AI领域丰富多样的数据湖计算场景,详细信息请参见OSS-HDFS服务概述。
前提条件
已在EMR上创建EMR-3.40及后续版本或EMR 5.6.0及后续版本的集群,具体操作请参见创建集群。
开通并授权访问OSS-HDFS服务
- 创建Bucket时开通并授权访问OSS-HDFS服务
具体操作,请参见创建Bucket。
- 对已创建的Bucket开通并授权访问OSS-HDFS服务
- 完成RAM授权
- 登录OSS管理控制台。
- 单击左侧导航栏的Bucket列表,然后单击待开通OSS-HDFS服务的Bucket名称。
- 在左侧导航栏,选择。
- 在HDFS服务页签,单击前往授权,然后按照页面指引完成授权操作。
- 开通HDFS服务
- 在HDFS服务页签,单击开通HDFS服务。
- 在弹出的对话框,单击确定。
步骤二:获取OSS-HDFS服务域名
- 单击左侧导航栏的Bucket列表,然后单击已开通OSS-HDFS服务的Bucket名称。
- 在左侧导航栏,单击概览。
- 在访问域名区域,记录HDFS服务的Bucket域名。
步骤三:在EMR集群中使用OSS-HDFS
说明 本示例以Hive操作OSS-HDFS为例介绍。您也可以参照此方式使用Spark操作OSS-HDFS。
- 登录集群,具体操作请参见登录集群。
- 创建指向OSS-HDFS的Hive表。
- 执行以下命令,进入Hive命令行。
- 执行以下命令,创建指向OSS-HDFS的数据库。
CREATE DATABASE if not exists dw LOCATION 'oss://<yourBucketName>.<yourBucketEndpoint>/<path>';
说明
- 上述命令中的
dw
为数据库名,<path>
为任意路径,<yourBucketName>.<yourBucketEndpoint>
为步骤二获取到的HDFS服务的域名。
- 本示例使用OSS-HDFS的域名作为路径的前缀。如果您希望只使用Bucket名称来指向OSS-HDFS,则可以配置Bucket级别的Endpoint或全局Endpoint,具体操作请参见附录:配置Endpoint的其他方式。
- 执行以下命令,使用新创建的数据库。
- 执行以下命令,在新建的数据库下创建表。
CREATE TABLE IF NOT EXISTS employee(eid int, name String,salary String,destination String)
COMMENT 'Employee details';
- 执行以下命令,进入Hive命令行。
- 向表中插入数据。
使用INSERT INTO语句向表写入数据,该语句会产生MapReduce作业。
INSERT INTO employee(eid, name, salary, destination) values(1, 'liu hua', '100.0', '');
- 验证表数据。
SELECT * FROM employee WHERE eid = 1;
返回信息中会包含插入的数据。
OK
1 liu hua 100.0
Time taken: 12.379 seconds, Fetched: 1 row(s)
(可选)为EMR集群授权
当前EMR的实例角色AliyunECSInstanceForEMRRole,其关联的AliyunECSInstanceForEMRRolePolicy默认已经添加了oss:PostDataLakeStorageFileOperation策略,因此默认情况下,您无需重新对EMR授权访问OSS-HDFS服务。
如果用于访问OSS-HDFS服务的EMR集群未使用默认的AliyunECSInstanceForEMRRole实例角色,则需要为该EMR集群授权。具体步骤,请参见角色授权。