互联网寒冬,每个公司的数据团队都会面临数据治理,那么什么是数据治理呢?简单来说就是解决集群的存储问题,实际要比这复杂的多。
什么样的数据需要治理,需要怎么治理,谁来治理?
从治理来说,只有一个目的,安全、稳定、高效的清理无效数据或是使用率较低的数据,节约成本;减少小文件数,降低NameNode压力
数据治理不是单独存在的,它依赖着数据资产分析,数据元信息等
现在说一下我实现的数据治理方案:
1. Hive 表数据压缩归档
周期性的对用户设置的压缩周期进行压缩归档,可以减少一定的存储,同时也在一定程度上减少了小文件数
那么什么样的hive格式可以压缩呢?
目前大家使用的hive格式有 textfile ,SequenceFile,rcfile,orcfile,parquet,avro,以及自定义格式等
相对来说 ,基于textfile的压缩比是最高的,有 gip,bzip2格式可选,我选择的是bzip2 格式,它压缩后的文件会很小,但是解压会消耗大量的cpu 资源,这个可以根据单独场景进行分析设计
SequenceFile格式支持的有NONE,RECORD,BLOCK,我们目前选择的是BLOCK压缩,因为他在测试中表现出了更好的压缩性能
还有就是 parquet 格式,我们只是对其进行了文件合并
其他的, rcfile 格式,具有最高的压缩比,使用rcfile + bzip2也许会是个不错的选择,但是由于其他格式表较少的原因,我们暂时只是支持了上面三种格式
压缩归档任务在执行时会消耗大量的cpu 时间,所以他是长周期的,在我们的开发中,设置为 10天执行一次
但在压缩归档中的需要注意数据的稳定可靠性,在压缩过程中,源数据依然可以提供服务,做好备份等,我想大家都能考虑到
2.冷热数据治理
通过解析 nameNode 镜像文件 Fsimage 获取集群文件信息,包括
- Path 目录路径
- Replication 备份数
- ModificationTime 最后修改时间
- AccessTime 最后访问时间
- PreferredBlockSize 首选块大小 byte
- BlocksCount 块 数
- FileSize 文件大小 byte
- NSQUOTA 名称配额 限制指定目录下允许的文件和目录的数量。
- DSQUOTA 空间配额 限制该目录下允许的字节数
- Permission 权限
- UserName 用户
- GroupName 用户组
在获取到信息之后,合并成 目录级的信息,上面的信息全部替换成了目录级的信息,例如目录下的所有文件大小,目录下所有文件的最后访问时间,最后读取时间等
然后与 Hive metaStore 信息进行join 计算出 分区级 及表级的以上信息
此时就可以做冷热数据的逻辑了,因为已经拿到了 分区什么时候最后被读取,最后被写入
3.生命周期治理
生命周期治理同样是依托于 上面的 Fsimage 解析,然后知道分区及表信息后,根据设置的表级的生命周期做清理逻辑
这里就不在详细讲了,大家可以参考下 阿里云的生命周期规则 https://help.aliyun.com/document_detail/55297.html?spm=a2c4g.11186623.6.556.37865b9cix5Qdb
大家还可以在这个阿里云的基础上结合表热度进行更加智能的清理策略,如下