开发者学堂课程【数据湖 JindoFS + OSS 实操干货36讲:如何将 Hive 数据按分区归档到 OSS】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/833/detail/13964
如何将 Hive 数据按分区归档到 OSS
内容介绍
一、背景/具体功能介绍
二、实现原理详解
三、使用实例
一、背景/具体功能介绍
传统集群架构
• 存储计算一体
• 存储量与计算量无法始终匹配
• 存储无法水平扩展
• 存储与计算竞争硬盘资源
存储分层架构
• 计算资源动态伸缩
• 存储资源使用云存储作为 HDFS 的替代或补充
• 相比存算分离架构,对于已有 HDFS 数据比较平滑,可以逐渐过渡到存算分离架构
数据仓库
• 数据仓库是大数据的典型场景
• 每天的 ETL 作业新增大量数据
• Hive 支持分区表,使用分区可以快速裁剪数据
• Hive 数仓中大量 Hive 表以时间日期作为分区字段
• 在数仓中很多表的较老的日期分区平常一般不会被访问,可以考虑把这部分数据移出 HDFS
• Hive 的每个分区都有自己的 storagedescriptor,可以有单独的存储路径
分区表的结构
partitionedtablexx
• dt=2021-05-16/category=1/
• dt=2021-05-16/category=2/
• dt=2021-05-16/category=5/
• dt=2021-05-16/category=8/
• dt=2021-05-15/category=2/
• dt=2021-05-15/category=3/
• dt=2021-05-15/category=4/
• ……
使用 JindoTable 按分区归档数据
在本地盘机型上,HDFS 可以提供较好的性能,对集群已有存储空间也能较好利用.
一般情况下用不到的数据移动到 OSS,释放集群存储空间,减小 NameNode 压力.
需要读取这部分数据时,也可以直接从 OSS 读取,不影响上层作业.
每天 ETL 完成后可以移动数据.
二、实现原理详解
• Jindodistcp 作为底层工具
• 使用 jindodistcp 事务模式
• 使用 HDFS 文件锁保证同一时间每个分区只有一个作业在操作
• 先修改分区元数据再清理 hdfs 数据确保数据可用
三、使用实例
参数 说明
要移动的表
目标路径,为表级别的路径,分区路径会在这个路径下自动创建
分区过滤条件表达式,支持基本运算符,不支持udf.
根据分区创建时间,创建时间超过给定天数的分区进行移动
整个moveTo任务的最大task并发度,默认为1
-o/-overWrite 是否覆盖最终目录。分区级别覆盖,不会覆盖本次移动不涉及的分区
-r/-removeSource 是否在移动完成后删除源路径
本地日志目录,默认为/tmp//
-e/-explain 如果指定explain模式,不会触发实际操作,仅打印会同步的分区
• 数据准备
• 移动分区字段 ds 大于 ‘b’的分区
• 检查移动后的分区情况