在做数仓开发过程中,遇到一个问题就是随着数据量增大,存储空间增加惊人:hdfs的文件要存3份(可以修改副本份数),ods、dwd、dws、ads等各层都需要存储空间,指标计算过程如果内存不够又会缓冲在硬盘。而更严重的问题是:如果CDH依赖某个目录的存储空间严重不够,就会导致Yarn的任务执行失败。

   所以对数仓的生命周期管理尤为重要。数仓的生命周期管理的核心目的就是用最少的存储成本来满足最大的业务需求,使数据价值最大化。

对数仓的历史数据可以分为P0、P1、P2、P3这4个不同优先级,其具体定义如下。

• P0:非常重要的主题域数据和非常重要的应用数据,具有不可恢复性,如交易、基础信息表、集团KPI数据、IPO关联表。

• P1 :重要的业务数据和重要的应用数据,具有不可恢复性,如重要的业务产品数据。

• P2:重要的业务数据和重要的应用数据,具有可恢复性,如交易线ETL产生的中间过程数据。

• P3:不重要的业务数据和不重要的应用数据,具有可恢复性,如某些商品的报表。

对数据P0、P1、P2、P3这4个级别的数据,生命周期要根据具体情况。例如在有的公司,关系型数据库保存有数仓原始全部数据,又对服务器的成本敏感性,对恢复数据

层级

类型

P0

P1

P3

P4

ODS层

各类型数据

永久

永久

永久

永久

DWD

事实表(增量表)

永久

3年

365天

180天

维表(全量表)

保留近30天及每月月底数据

保留近30天及每月月底数据

保留近30天及每月月底数据

保留近30天及每月月底数据

Merge全量表

保留近30天及每月月底数据

保留近30天及每月月底数据

保留近30天及每月月底数据

保留近30天及每月月底数据

DWS层

各类型数据

永久

3年

3年

3年

DWM层

各类型数据

保留近30天及每月月底数据

保留近30天及每月月底数据

保留近30天及每月月底数据

保留近30天及每月月底数据

APP层

各类型数据

永久

-

-

-

由于数仓通常是带有时间的分区表。要进行数仓表数据进行生命周期管理,首先是清楚目前数仓各张表占的存储空间的情况。

查看存储空间的命令:

hadoop fs -du -s -h ${warehouse.dir}/*

如果hive外部表

使用drop table来删除表或用drop partition等命令删除表的分区,其实数据还是存在。要彻底删除数据,有2种方法:

(1)通过删除文件方式

删除文件命令:

hdfs dfs -rmdir -f ${warehouse.dir}

删除目录命令:

hdfs dfs -rm -r -f ${warehouse.dir}/*
  1. 变为内部表再删除
alter table  ${table_name) set tblproperties ('EXTERNAL'='False');

如果是hive内部表

删除分区

alter table ${tablename} drop partition(dt<='2023-01-21')

在CDH的默认配置中,删除的文件是放在垃圾站,通常是需要24小时后删除的文件才释放空间。如果需要立即释放空间,可以用下面清空hdfs垃圾站的命令:

hdfs dfs -expunge