188、故障排除和调试HBase:NameNode

NameNode

有关NameNode的更多信息,请参阅HDFS

表和区域的HDFS利用率

要确定HBase在HDFS上使用的空间大小,请使用NameNode中的hadoop shell命令。例如:

hadoop fs -dus /hbase/

返回所有HBase对象的总磁盘利用率。

hadoop fs -dus /hbase/myTable

返回HBase表’myTable’的总磁盘利用率。

hadoop fs -du /hbase/myTable

…返回HBase表’myTable’下的区域列表及其磁盘利用率。

有关HDFS shell命令的更多信息,请参阅HDFS FileSystem Shell文档

浏览HBase对象的HDFS

有时需要探索HDFS上存在的HBase对象。这些对象可能包括WAL(预写日志),表,区域,StoreFiles等。最简单的方法是使用运行在端口50070上的NameNode Web应用程序。NameNode Web应用程序将提供指向集群中所有DataNode的链接,以便可以无缝浏览它们。

集群中HBase表的HDFS目录结构是:

/hbase
    /data
        /<Namespace>                    (Namespaces in the cluster)
            /<Table>                    (Tables in the cluster)
                /<Region>               (Regions for the table)
                    /<ColumnFamily>     (ColumnFamilies for the Region for the table)
                        /<StoreFile>    (StoreFiles for the ColumnFamily for the Regions for the table)

HBase WAL的HDFS目录结构是:

/hbase
    /WALs
        /<RegionServer>    (RegionServers)
            /<WAL>         (WAL files for the RegionServer)

大小为零的WALs,其中包含数据

问题:获取RegionServer的WALs目录中的所有文件的列表时,一个文件的大小为0,但它包含数据。

答:这是HDFS的特殊情况。当前正在写入的文件的大小似乎为0,但一旦关闭,它将显示其真实大小。

用例

用于查询HBase对象的HDFS的两个常见用例是研究表的未压缩程度。如果每个ColumnFamily都有大量StoreFiles,则表明需要进行主要压缩。此外,在进行主要压缩后,如果生成的StoreFile为“small”,则表明需要减少表的ColumnFamilies。

意外的文件系统增长

如果您看到HBase意外地增加了文件系统的使用,两个可能的原因是快照和WAL。

快照

创建快照时,HBase会保留在快照时重新创建表状态所需的一切。这包括已删除的单元格或过期版本。因此,您应该精心规划快照的使用模式,并且应该修剪不再需要的快照。快照存储在/hbase/.hbase-snapshot中,用于还原快照所需的存档位于/hbase/archive/<_tablename_>/<_region_>/<_column_family_>/。

*不要*通过HDFS手动管理快照或存档。HBase提供API和
用于管理它们的HBase Shell命令。有关更多信息,请参阅<< ops.snapshots >>。

WAL

预写日志(WAL)存储在HBase根目录的子目录中,通常是/hbase/,具体取决于它们的状态。已经处理好的WALs存储在/hbase/oldWALs/并且损坏的WAL存储在/hbase/.corrupt/中,以供检查。如果其中一个子目录的大小正在增长,请检查HBase服务器日志以找出未正确处理WAL的原因。

如果您使用复制并且/hbase/oldWALs/使用的空间超出预期,请记住,只要存在对等项,复制被禁用时就会保存WAL。

不要通过HDFS手动管理WAL。

文章永久链接:https://ddkk.com/?p=12334