HDFS EC存储冷数据

实现成果

alt text

实现方案

实现过程中遇到的问题

补丁修复

损坏文件处理

后续监控和检查

文件检查

1:把所有EC文件的CRC校验码记录到mysql中,一周全量对比一次,根据情况而定,如果发现crc有变化,说明文件EC有过重构并异常,需要人工确认,再安全一点的做法是进行文件块进行验证对比。 2:对重构过的EC文件,通过dn日志收集,然后用EC自带的验证工具进行验证,是否正常。 例: hdfs --config /etc/hadoop/06_conf debug verifyEC -file /hive_warehouse/xx.db/xx/dt=20191003/xx
一些诊断文件的语句例子:

 # 通过块找到文件
  hdfs fsck -fs hdfs://yyclusterxx -blockId blk_-9223372036044793952	
 
 # 验证文件
 hdfs --config /etc/hadoop/06_conf debug verifyEC  -file  /hive_warehouse/xx.db/xx/dt=20191003/xx

 # 通过文件找到节点信息 
 hdfs fsck -fs hdfs://yycluster06  /hive_warehouse/pub_dw.db/pub_dwv_event_comm_ret_detail_di/dt=2022-08-14/data_type=PC/part-01114-d4289994-dcf9-4292-9e73-d31218ef3e2d.c000  -files -blocks -locations

 # 通过节点找到物理文件
 ll  /data*/hadoop/hdfs/data/current/BP-1099381363-10.12.xx.xx-1704271160327/current/finalized/subdir*/subdir*/blk_-922337203604479395*

文件恢复

注:文件恢复的实现是自己更改了hdfs客户端代码,实现不断重试好的文件块节点,发现有坏的就skip过,验验方式结合文件格式验证和文件内容的格式验证来判断是否好的块。
如果坏块超出可恢复的节点限制,则文件彻底损坏,无法进行恢复。
参考代码:https://github.com/liangrui1988/hadoop-client-op

# 文件恢复的例子,txt gzip压缩  
 hadoop jar hdfs-client-op-1.0-SNAPSHOT.jar com.yy.bigdata.utils.TextCheck   /hive_warehouse/yydw.db/dwv_event_detail_mob_quality_day/dt=2021-07-02/product_id=171/part-00067-5b19f0ff-dfb5-420f-9f93-3b059335bcae.c000.gz gzip

 # orc 格式恢复
 hadoop jar hdfs-client-op-1.0-SNAPSHOT.jar com.yy.bigdata.orc.OpenFileLineSigle /hive_warehouse/yule.db/yule_new_subscribe_list_day/dt=20191003/002371_0  orc

 # parquet 
  hadoop jar hdfs-client-op-1.0-SNAPSHOT.jar com.yy.bigdata.orc.OpenFileLineSigle /hive_warehouse/xx.db/xx/dt=20191003/xx  parquet
大纲: