大数据迁移实践通过HDFS审计日志解析输出增量文件列表方案
在进行大数据迁移过程中,往往老集群上还会不断地生产新文件,当老集群上整体数据量不大的时候,可以直接借助CDM的全量扫描+跳过重复文件的方式来迁移新增的文件。但是当老集群上数据量较大(比如>1PB以上,又存在大量小文件5千万以上甚至上亿个),CDM的全量扫描会耗费大量时间,搬迁效率较低。因此本文给出了一种借助HDFS审计日志解析来识别出增量的文件范围,然后将该列表输出给CDM,由CDM只按照列表中的文件进行迁移的方法,可以在增量文件迁移期间,避免全量扫描老集群的文件。 以下的操作步骤实际操作过程中可以考虑自行开发脚本自动定时运行。
操作方式:
将HDFS namenode审计日志定期上传到HDFS或OBS,由Hive分区表加载每天的日志信息。通过hive sql查询获取每天或者某个时间段之后的新增的文件列表。
(1) 按照每天一个文件夹方式,借助公有云的hdfs客户端或者Obsutil 上传HDFS namenode审计日志到公有云HDFS或者OBS路径下。
hdfs dfs –put 2020-07-06 /user/audit/2020-07-06/ -r
(2) 在公有云集群上创建Hive分区表,以日期作为主键,表名可以自己指定,当前演示的表名叫audit. 备注:由于HDFS审计日志格式不同集群可能配置输出不一致,表中各个字段需要根据实际HDFS审计日志的格式进行修改调整
CREATE TABLE `audit`( `allow` String, `ugi` string, `ip` string, `cmd` string, `src` string, `dst` string, `perm` string, `proto` string) partitioned by(`date_time` string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
(3) 加载每天的分区数据到Hive表中
LOAD DATA INPATH '/user/audit/2020-07-06/' INTO TABLE audit PARTITION (date_time = '2020-07-06');
(4) 查询某天,或者某个时间段的新增文件列表, 并将输出结果写到OBS路径上
// create 过滤掉.hive-staging 和_temporary临时文件 INSERT OVERWRITE DIRECTORY 'obs://obs-auditlog-chenkaifeng/auditlog/output-2020-07-08' select regexp_extract(src,'src=(.*)',1) as output from audit where src like 'src=/apps/hive/warehouse%' and src not rlike '.*/\.hive-staging.*' and src not rlike '.*/_.*' and cmd='cmd=create' and date_time>='2020-07-06'; // rename结果 INSERT OVERWRITE DIRECTORY 'obs://obs-auditlog-chenkaifeng/auditlog/output-2020-07-08' select regexp_extract(dst,'dst=(.*)',1) as output from audit where dst like 'dst=/apps/hive/warehouse%' and dst not rlike '.*/\.hive-staging_hive_.*' and dst not rlike '.*/_.*' and cmd='cmd=rename' and date_time>='2020-07-06' // apend INSERT OVERWRITE DIRECTORY 'obs://obs-auditlog-chenkaifeng/auditlog/output-2020-07-08' select regexp_extract(src,'src=(.*)',1) as output from audit where src like 'src=/apps/hive/warehouse%' and src not rlike '.*/\.hive-staging_hive_.*' and src not rlike '.*/_.*' and cmd='cmd=append' and date_time>='2020-07-06';
(5) 查找某天或某个时间段的删除文件列表SQL,并将输出结果存到OBS
//查询删除语句delete INSERT OVERWRITE DIRECTORY 'obs://obs-auditlog-chenkaifeng/auditlog/output-2020-07-08' select regexp_extract(src,'src=(.*)',1) as output from audit where src like 'src=/apps/hive/warehouse%' and src not rlike '.*/\.hive-staging.*' and src not rlike '.*/_.*' and cmd='cmd=delete' and date_time>='2020-07-06'; //rename操作引起的删除 INSERT OVERWRITE DIRECTORY 'obs://obs-auditlog-chenkaifeng/auditlog/output-2020-07-08' select regexp_extract(src,'src=(.*)',1) as output from audit where src like 'src=/apps/hive/warehouse%' and src not rlike '.*/\.hive-staging.*' and src not rlike '.*/_.*' and cmd='cmd=rename' and date_time>='2020-07-06';
(6)配置CDM作业
在CDM(华为云云迁移服务)作业上选择步骤4中输出的新增文件列表作为迁移的范围,进行新增文件迁移。
- 点赞
- 收藏
- 关注作者
评论(0)