hdfs被格式化的后果与补救

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdfs被格式化的后果与补救相关的知识,希望对你有一定的参考价值。

参考技术A        由于集群故障,连接不上hdfs,datanode节点部分挂,重新启动单个节点和namenode也不好使,给出方法格式化namenode,之后启动namenode和datanode,但是由于hdfs中有数据,格式化前没有备份数据,导致了数据块全部丢失,至此,整个集群中表数据都没有了,悲剧的开始。

       为了处理这个问题,评估了事件,由于元数据存储在mysql中,所以表还在,只是hdfs表数据存储在hdfs中的路径和文件没有了。

1.业务数据补充

       hive库的访问通过etl工具,所以业务数据的补充,直接通过etl工具。

       由于hdfs文件目录被删除,所以第一步,建立目录:

       hadoop fs -mkdir /user/hive/warehouse/hive_test_table

删分区,建立分区:

        hive -e "alter table hive_test_table drop partition (op_month=201702,op_time= 20170215,op_hour=2017021514);"

       hive -e "alter table hive_test_table add partition (op_month=201702,op_time= 20170215,op_hour=2017021514);"

把etl生成的文件put到hdfs文件目录:

       hdfs dfs -put /test/hive_test_table.txt /user/hive/warehouse/hive_test_table/op_month=201702/op_time=20170215/op_hour=2017021514

把表数据添加到其他表:

        INSERT INTO hive_test PARTITION (op_month=201702,op_time=20170215,op_hour=2017021514)

        SELECT CUST_ID,USER_ID,ACCT_ID  from  hive_test_table where  op_month='201702' AND op_time= '20170215' AND op_hour='2017021514';

2.维度表数据导入

查询维度表的表结构:

         hive -e "desc formatted bts_type;"

显示:

所以在生成导入文件的时候需要按照;分割,生成文件bts_type.txt

对bts_type.txt转码:

       iconv -f GBK -t UTF-8 bts_type.txt  -o    bts_type.txt

建立文件目录:

       hadoop fs -mkdir  /user/hive/warehouse/bts_type

put文件到hdfs指定路径下:

       hdfs dfs -put /test/bts_type.txt  /user/hive/warehouse/bts_type/bts_type.txt

       由于集群中hdfs数据块都被删除了,维度表数据手动导入,业务数据表数据可以通过etl工具导入,为了避免类似问题发生,对集群数据的备份,和集群监控还需要完善现有的维护方案。

       1. 采用svn管理备份元数据与维度表数据文件

       2. 集群中获取zookeeper中namenode的状态,并监控namenode,datanode,zookeeper存活节点,出问题立刻发短信告警

       3. 在生产选取一台主机备份维表数据和元数据, 并写批量脚步,如果以后发生类似事情,直接跑脚步,来修复

HDFS运维

下面列举HDFS运行过程中可能出现的常见问题及解决方法,这些问题一般都会在日志中出现的相应的记录。
Incompatible clusterIDs in … :namenode clusterID = … ,datanode clusterIDs =…
出现该错误是由于NameNode重新格式化后会被赋予新的namespaceID,这个ID与DataNode不一致而导致的。解决该错误的方法有三种:

  • 删除datanode上的数据目录(如果DataNode上的数据无关紧要,可以这么做);
  • 修改DataNode上的clusterID与NameNode一致,具体的是将${dfs.datanode.data.dir}/current/VERSION文件中的clusterID改成与NameNode上的一致;
  • 重新指定DataNode的数据目录(修改配置项dfs.datanode.data.dir)。

... could only be replicated to 0 nodes, instead of 1 …
出现这个错误说明没有可用的DataNode可供操作,其原因有多种,

  • DataNode中XceiverServer的连接数超过了指定阈值
  • 磁盘空间不足
  • 防火墙导致无法访问DataNode

解决方法的关键是提供可用的DataNode,主要有如下几种方式:

  • 防火墙设置导致无法连接DataNode的情形,可以通过关闭防火墙来解决;
  • 重新格式化NameNode也可以解决这个问题;
  • 磁盘空间不足可以通过增加单节点容量或添加新DataNode节点来解决;
  • 并发过大导致连接数超过阈值的情况也可以通过添加DataNode节点来解决。

...ipc.Client: Retrying connect to server:...
这个错误主要是由于错误的端口配置导致的,请仔细检查core-site.xml和hdfs-site.xml文件,同时,还需确认/etc/hosts文件是否包含了所需组件的网络地址映射。
 java.net.NoRouteToHostException: No route to host
这个错误说明找不到主机,请检查网络连接是否正常,防火墙是否关闭。
...org.apache.hadoop.util.DiskChecker$DiskErrorException: Invalid value for volsFailed : 3 , Volumes tolerated : 0...
磁盘损坏会导致该错误。检查并更换损坏的磁盘即可。

以上是关于hdfs被格式化的后果与补救的主要内容,如果未能解决你的问题,请参考以下文章

HADOOP与HDFS数据压缩格式

hdfs文件格式

HDFS源码分析之NameNode————Format

格式化集群与启动集群

2022-05-13 HDFS 数据存储与数据管理

HDFS--(HA)初始化与启动