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被格式化的后果与补救的主要内容,如果未能解决你的问题,请参考以下文章