hive 创建 s3 外表
背景
有个比较大的技术侧需求: 将数据从 HDFS 迁移到 s3。当然在真正迁移之前,还需要验证迁移到 s3 的数据,和上层查询器(hive、presto 之间的兼容性)
这里我们对一张业务表的数据做个简单的迁移测试
验证
数据迁移
为了让 hdfs 指令能直接操作 s3 的数据,参考 Using DistCp with Amazon S3
先在 hdfs-site 中添加配置 fs.s3a.access.key 、 fs.s3a.secret.key 、 fs.s3a.endpoint 和 fs.s3a.connection.ssl.enabled 四个配置
1 | fs.s3a.access.key=s3_key |
重启 hdfs 使得配置生效后,通过 distcp 将 hdfs 数据搬到 s3
1 | hadoop distcp hdfs://emr/data/db_name/table_name s3a://bucket_name/data/db_name/table_name |
如上,我们尽量保证了迁移后数据的路径和原路径保持一致
通过 s3cmd 确认数据是否搬过来了:
1 | s3cmd ls s3://bucket_name/data/db_name/table_name/ |
查询验证
新建 hive 外表并指向 s3 路径:
(注意:s3 路径一定要正确,否则建表和查询数据都不会报错,但查出的数据为空)
1 | CREATE EXTERNAL TABLE `db_name`.`table_name`( |
其他配置
1、ranger 权限配置
在 ranger 上集成 hive 插件后,从 hive 权限首页能看到将包含 url、库表、hiveservice 和 udf 四项权限配置。需要在 ‘url’ 配置中添加用户权限
2、presto、trino 配置
访问 s3 数据需要额外加上以下配置:
1 | hive.s3.aws-access-key=s3_key |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Smiecj的小窝!
评论