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 四个配置

复制代码
fs.s3a.access.key=s3_key
fs.s3a.secret.key=s3_secret
fs.s3a.endpoint=s3服务端地址
fs.s3a.connection.ssl.enabled=false(因为公司内部 s3 服务没开 ssl)

重启 hdfs 使得配置生效后,通过 distcp 将 hdfs 数据搬到 s3

复制代码
hadoop distcp hdfs://emr/data/db_name/table_name s3a://bucket_name/data/db_name/table_name

如上,我们尽量保证了迁移后数据的路径和原路径保持一致

通过 s3cmd 确认数据是否搬过来了:

复制代码
s3cmd ls s3://bucket_name/data/db_name/table_name/

查询验证

新建 hive 外表并指向 s3 路径:

(注意:s3 路径一定要正确,否则建表和查询数据都不会报错,但查出的数据为空)

复制代码
CREATE EXTERNAL TABLE `db_name`.`table_name`(
  `id` bigint COMMENT '',
  ...)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.avro.AvroSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION
  's3a://bucket_name/data/db_name/table_name';

其他配置

1、ranger 权限配置

在 ranger 上集成 hive 插件后,从 hive 权限首页能看到将包含 url、库表、hiveservice 和 udf 四项权限配置。需要在 'url' 配置中添加用户权限

2、presto、trino 配置

访问 s3 数据需要额外加上以下配置:

复制代码
hive.s3.aws-access-key=s3_key
hive.s3.aws-secret-key=s3_secret
hive.s3.endpoint=s3服务端地址
hive.s3.ssl.enabled=false
相关推荐
半梦半醒*7 小时前
ELK1——elasticsearch
linux·运维·数据仓库·elasticsearch·centos
阿什么名字不会重复呢9 小时前
Hadoop报错 Couldn‘t find datanode to read file from. Forbidden
大数据·hadoop·分布式
通往曙光的路上13 小时前
day17_cookie_webstorage
数据仓库·hive·hadoop
呆呆小金人1 天前
SQL入门:正则表达式-高效文本匹配全攻略
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
想ai抽2 天前
大数据计算引擎-从源码看Spark AQE对于倾斜的处理
大数据·数据仓库·spark
呆呆小金人2 天前
SQL入门:别名使用完全指南
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
B站_计算机毕业设计之家2 天前
python股票交易数据管理系统 金融数据 分析可视化 Django框架 爬虫技术 大数据技术 Hadoop spark(源码)✅
大数据·hadoop·python·金融·spark·股票·推荐算法
想ai抽3 天前
Spark的shuffle类型与对比
大数据·数据仓库·spark
随心............3 天前
sqoop采集完成后导致hdfs数据与Oracle数据量不符的问题。怎么解决?
hive·hadoop·sqoop