hbase修复--数据无法写入到表中。

本文针对HBase集群出现数据无法写入的问题进行了深入分析,通过使用hbck命令检查并修复集群中出现的一致性问题,特别是meta表中的空REGIONINFO_QUALIFIER行。文章提供了详细的hbck命令解释及其修复选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、问题描述:
hbase集群搭建后,突然有一天发现数据写不进去,查看了各种原因以及百度,解决方案各种各样,但是都没有解决我的问题,有的解决方法直接就相当于重新搭建一次集群,把zk中的节点以及hdfs上的hbase数据表都清了。显然不是我们要的结果。

2、解决步骤
我们输入hbck命令查看hbase的集群问题:

[hadoop@hadoop12 ~]$ hbase hbck 
2017-11-24 13:36:02,912 INFO  [main] util.HBaseFsck: Loading regionsinfo from the hbase:meta table
ERROR: Empty REGIONINFO_QUALIFIER found in hbase:meta
ERROR: Empty REGIONINFO_QUALIFIER found in hbase:meta

Number of empty REGIONINFO_QUALIFIER rows in hbase:meta: 2

----------
2 inconsistencies detected.
Status: INCONSISTENT

#根据上面的图我们发现有region有空的row,所以我们需要进行修复一下:
[hadoop@namenode2 opt]$ hbase hbck -fixEmptyMetaCells

然后我们再查看hbase的集群情况:

至此问题就已经解决了,下面是hbck的详细命令解释,是从他人的博客上copy的。

新版本的 hbck 可以修复各种错误,修复选项是:     
(1-fix,向下兼容用,被-fixAssignments替代     
(2-fixAssignments,用于修复region assignments错误     
(3-fixMeta,用于修复meta表的问题,前提是HDFS上面的region info信息有并且正确。     
(4-fixHdfsHoles,修复region holes(空洞,某个区间没有region)问题     
(5-fixHdfsOrphans,修复Orphan region(hdfs上面没有.regioninfo的region)     
(6-fixHdfsOverlaps,修复region overlaps(区间重叠)问题     
(7-fixVersionFile,修复缺失hbase.version文件的问题     
(8-maxMerge <n> (n默认是5),当region有重叠是,需要合并region,一次合并的region数最大不超过这个值。     
(9-sidelineBigOverlaps ,当修复region overlaps问题时,允许跟其他region重叠次数最多的一些region不参与(修复后,可以把没有参与的数据通过bulk load加载到相应的region)     
(10-maxOverlapsToSideline <n> (n默认是2),当修复region overlaps问题时,一组里最多允许多少个region不参与     
由于选项较多,所以有两个简写的选项     
(11-repair,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps12-repairHoles,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans     



新版本的 hbck     
(1)缺失hbase.version文件     
 加上选项 -fixVersionFile 解决     
(2)如果一个region即不在META表中,又不在hdfs上面,但是在regionserver的online region集合中     
 加上选项 -fixAssignments 解决     
(3)如果一个region在META表中,并且在regionserver的online region集合中,但是在hdfs上面没有     
 加上选项 -fixAssignments -fixMeta 解决,( -fixAssignments告诉regionserver close region),( -fixMeta删除META表中region的记录)     
(4)如果一个region在META表中没有记录,没有被regionserver服务,但是在hdfs上面有     
加上选项 -fixMeta -fixAssignments 解决,( -fixAssignments 用于assign region),( -fixMeta用于在META表中添加region的记录)     
(5)如果一个region在META表中没有记录,在hdfs上面有,被regionserver服务了     
加上选项 -fixMeta 解决,在META表中添加这个region的记录,先undeploy region,后assign     
(6)如果一个region在META表中有记录,但是在hdfs上面没有,并且没有被regionserver服务     
加上选项 -fixMeta 解决,删除META表中的记录     
(7)如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region没有被服务     
加上选项 -fixAssignments 解决,assign这个region     
(8)如果一个region在META表中有记录,在hdfs上面也有,table是disabled的,但是这个region被某个regionserver服务了     
加上选项 -fixAssignments 解决,undeploy这个region     
(9)如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region被多个regionserver服务了     
加上选项 -fixAssignments 解决,通知所有regionserver close region,然后assign region     
(10)如果一个region在META表中,在hdfs上面也有,也应该被服务,但是META表中记录的regionserver和实际所在的regionserver不相符     
加上选项 -fixAssignments 解决     

(11)region holes     
需要加上 -fixHdfsHoles ,创建一个新的空region,填补空洞,但是不assign 这个 region,也不在META表中添加这个region的相关信息     
(12)region在hdfs上面没有.regioninfo文件     
-fixHdfsOrphans 解决     
(13)region overlaps     
需要加上 -fixHdfsOverlaps     


说明:     
(1)修复region holes时,-fixHdfsHoles 选项只是创建了一个新的空region,填补上了这个区间,还需要加上-fixAssignments -fixMeta 来解决问题,( -fixAssignments 用于assign region),( -fixMeta用于在META表中添加region的记录),所以有了组合拳 -repairHoles 修复region holes,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans2-fixAssignments,用于修复region没有assign、不应该assign、assign了多次的问题     
(3-fixMeta,如果hdfs上面没有,那么从META表中删除相应的记录,如果hdfs上面有,在META表中添加上相应的记录信息     
(4-repair 打开所有的修复选项,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps     

新版本的hbck从(1)hdfs目录(2)META(3)RegionServer这三处获得region的Table和Region的相关信息,根据这些信息判断并repair    
<think>我们已知用户正在排查Hadoop和HBase集群启动后部分进程缺失的问题。根据用户提供的信息,启动集群后,各个节点的jps输出如下:-hadoop1(主节点):```20675Jps20133ResourceManager19581NameNode20287NodeManager20965HMaster#这是在启动HBase后出现的```-hadoop2:```6995Jps6683SecondaryNameNode```-hadoop3:```6798Jps```很明显,集群中缺失的进程包括:1.DataNode:在所有节点上都没有出现(hadoop1、hadoop2、hadoop3都没有)2.hadoop2和hadoop3上缺失NodeManager3.SecondaryNameNode在hadoop2上启动成功,但是hadoop2和hadoop3上都没有DataNode4.HBase启动后,hadoop1上有HMaster,但是没有显示RegionServer(注意:在启动HBase时,日志显示在hadoop1、hadoop2、hadoop3上都启动了RegionServer,但是jps却没有显示,说明可能启动失败)根据以上现象,我们进行如下排查:###1.检查Hadoop进程启动日志首先,查看Hadoop启动日志(在Hadoop安装目录下的logs目录中):-检查DataNode启动失败的原因:可以查看hadoop1、hadoop2、hadoop3上的DataNode日志(通常命名为`hadoop-<username>-datanode-<hostname>.log`)。-检查NodeManager启动失败的原因:查看各个节点上的NodeManager日志(通常命名为`yarn-<username>-nodemanager-<hostname>.log`)。###2.检查配置文件重点检查Hadoop的配置文件(`core-site.xml`,`hdfs-site.xml`,`yarn-site.xml`,`slaves`等)。####(1)`core-site.xml`确保`fs.defaultFS`配置正确(指向NameNode的地址和端口)[^3]。示例配置:```xml<property><name>fs.defaultFS</name><value>hdfs://hadoop1:9000</value></property>```####(2)`hdfs-site.xml`-确保`dfs.namenode.name.dir`和`dfs.datanode.data.dir`配置的路径存在且有写入权限。-检查`dfs.replication`配置(副本数,一般设置为3)。-确认SecondaryNameNode的配置(通常在`hdfs-site.xml`中设置`dfs.namenode.secondary.http-address`,例如:`hadoop2:50090`)。注意:如果配置了SecondaryNameNode在hadoop2上,那么hadoop2上应该出现SecondaryNameNode进程,但DataNode和NodeManager的缺失与SecondaryNameNode无关。####(3)`slaves`文件检查Hadoop安装目录下的`slaves`(或`workers`)文件,确保里面列出了所有应该启动DataNode和NodeManager的节点。例如:```hadoop1hadoop2hadoop3```如果这个文件没有正确配置,会导致只有主节点(hadoop1)尝试启动DataNode,而其他节点不会启动。另外,在启动YARN(ResourceManager和NodeManager)时,同样需要检查`yarn-site.xml`和`workers`文件。####(4)`yarn-site.xml`-确保`yarn.resourcemanager.hostname`指向正确的主节点(如hadoop1)。-检查`yarn.nodemanager.aux-services`等配置。###3.检查SSH无密码登录确保主节点(hadoop1)能够通过SSH无密码登录到所有从节点(包括自己)。可以通过以下命令测试:```bashsshhadoop2sshhadoop3```###4.检查HBase进程缺失问题HBase启动时,日志显示在hadoop1、hadoop2、hadoop3上都尝试启动了RegionServer,但是jps没有显示,说明RegionServer启动失败。查看RegionServer的日志(位于HBase安装目录下的logs目录,如`/home/qbf/HBase/hbase-3.0.0-beta-1/logs`):-查看`hbase-root-regionserver-hadoop1.log`等日志文件,查找错误信息。HBase的配置需要重点检查:-`hbase-site.xml`:确认`hbase.rootdir`指向HDFS的路径(如`hdfs://hadoop1:9000/hbase`),`hbase.zookeeper.quorum`配置正确(如`hadoop1,hadoop2,hadoop3`),`hbase.cluster.distributed`设为`true`。-`regionservers`文件:确保其中列出了所有要启动RegionServer的节点(如hadoop1、hadoop2、hadoop3)。另外,注意HBase依赖于ZooKeeper和HDFS。如果HDFS的DataNode没有启动,那么HBase启动RegionServer时也会失败,因为无法在HDFS上读写数据。###5.检查系统资源检查各个节点的系统资源(内存、磁盘空间等)。如果某个节点资源不足,可能会导致进程启动失败。###6.检查防火墙确保所有节点之间的必要端口都是开放的(例如Hadoop和HBase使用的端口)。###7.手动启动缺失的进程如果通过上述步骤找到具体原因,可以尝试手动启动缺失的进程,观察错误输出。-启动HDFS的DataNode(在对应节点上执行):```bashhadoop-daemon.shstartdatanode```-启动YARN的NodeManager(在对应节点上执行):```bashyarn-daemon.shstartnodemanager```-启动HBase的RegionServer(在对应节点上执行):```bashhbase-daemon.shstartregionserver```###总结问题原因根据现有信息,最可能的原因包括:1.`slaves`文件配置不正确,导致其他节点上的DataNode和NodeManager未被启动。2.DataNode或NodeManager启动时遇到错误(如目录权限问题、端口冲突等)。3.HBase启动RegionServer时,由于HDFS的DataNode未启动,导致RegionServer启动失败。4.SSH无密码登录未配置完全,导致主节点无法启动其他节点上的进程。因此,建议按照上述步骤逐一排查,重点关注配置文件和日志。§§相关问题§§1.Hadoop中如何配置多目录存储以提高磁盘利用率?2.HBase启动时RegionServer无法注册到ZooKeeper该如何解决?3.如何通过修改YARN配置优化NodeManager的资源分配?</think> ### Hadoop/HBase集群进程缺失排查指南 根据您提供的日志和集群状态,我将系统性地分析各服务缺失原因并提供排查解决方案(基于Linux环境,假设您已配置好环境变量): #### 排查总流程图 ```mermaid graph TD A[集群状态] --> B[NameNode缺失?] A --> C[DataNode缺失?] A --> D[SecNameNode缺失?] A --> E[YARN服务缺失?] A --> F[HBase服务缺失?] B --> G[检查NN日志] C --> H[检查workers文件] D --> I[检查secondaryNN配置] E --> J[检查RM日志] F --> K[检查RegionServer日志] ``` #### 1. NameNode排查 **问题现象**:仅hadoop1有NameNode,其他节点缺失 ```bash # 检查点1:验证NameNode服务状态 hdfs haadmin -getServiceState nn1 # 替换为您的NameNode ID # 检查点2:查看关键日志(注意替换路径) tail -n 50 /opt/hadoop/logs/hadoop-*-namenode-*.log # 常见问题: # 1. 端口冲突(默认8020/9000) netstat -tunlp | grep 9000 # 2. 元数据损坏(修复命令) hdfs namenode -recover ``` #### 2. DataNode全量缺失 **核心问题**:集群中无DataNode进程 ```bash # 检查点1:验证workers文件配置 cat $HADOOP_HOME/etc/hadoop/workers # 正确应包含: # hadoop1 # hadoop2 # hadoop3 # 检查点2:手动启动测试 hadoop-daemon.sh start datanode # 在任意节点执行 # 检查点3:查看启动错误 grep 'ERROR' $HADOOP_HOME/logs/hadoop-*-datanode-*.log ``` #### 3. SecondaryNameNode异常 **问题分析**:hadoop2显示SecNameNode但jps未显示 ```bash # 解决方案1:检查hdfs-site.xml配置 <!-- 确保存在该配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop2:9868</value> <!-- 需与您环境一致 --> </property> # 解决方案2:手动启动 hadoop-daemon.sh start secondarynamenode # 在hadoop2执行 ``` #### 4. YARN服务排查(ResourceManager/NodeManager) **问题现象**:仅hadoop1有NodeManager ```bash # 检查点1:验证yarn-site.xml配置 <!-- 确保NodeManager可用性 --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> <!-- 值需>0 --> </property> # 检查点2:检查资源过载 free -m # 确认内存充足 ulimit -a # 确认最大进程数>4096 # 检查点3:手动启动NodeManager yarn-daemon.sh start nodemanager # 在各节点执行 ``` #### 5. HBase服务排查 **关键问题**:RegionServer未显示但日志显示已启动 ```bash # 检查点1:验证regionservers文件 cat $HBASE_HOME/conf/regionservers # 正确应包含: # hadoop1 # hadoop2 # hadoop3 # 检查点2:查看HBase日志 tail $HBASE_HOME/logs/hbase-*-regionserver-*.log # 检查点3:HDFS健康检查 hdfs dfsadmin -report # 必须先有正常DataNode # 解决方案:手动启动RegionServer hbase-daemon.sh start regionserver # 在各节点执行 ``` #### 关键配置文件速查 | 配置文件 | 关键属性 | 建议值 | |----------------|-------------------------------|------------------------| | `core-site.xml`| `fs.defaultFS` | `hdfs://hadoop1:9000` | | `hdfs-site.xml`| `dfs.namenode.secondary.http-address` | `hadoop2:9868` | | `yarn-site.xml`| `yarn.resourcemanager.hostname` | `hadoop1` | | `workers` | 节点列 | hadoop1/2/3各一行 | | `regionservers`| 节点列 | hadoop1/2/3各一行 | > **注意**:修改配置后需同步所有节点,建议使用`scp`或集群同步工具 #### 自动化检查脚本 ```bash #!/bin/bash # cluster-check.sh nodes=("hadoop1" "hadoop2" "hadoop3") for node in ${nodes[@]}; do echo "===== $node 状态 =====" ssh $node "jps | grep -E 'NameNode|DataNode|NodeManager|HMaster|RegionServer'" ssh $node "netstat -tunlp | grep -E '9000|8032|16010'" # 关键端口检查 done ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值