HBase Locality

  其他常见问题
内容纲要

概要描述

本文主要描述HBase Locality 这个值的概念

详细描述

HBase模块基本知识点介绍

  • Zookeeper:负责多 master 选主,避免单节点故障
  • Client:缓存 region 信息(首次或者失败后从 Master meta 信息里获取)后直接访问 RegionServer
  • Master:
    分配新 Region 到 RegionServer,重分配失效 RegionServer 上的 Region,负载均衡
    记录维护 Region 信息:增删改查(切分合并等操作)
    监听存活
  • RegionServer:切分 Region,响应 Client 的 IO 请求
    HLog:WAL(write ahead log) 预写日志,数据写入先写日志再写Region,用于故障恢复重放(replay)
    HRegion:包含多个 Store
    Store:一个store对应一个CF,包含一个 Memstore 多个 StoreFile
    Memstore:数据先写入此处,达到阈值(RegionServer/Region下所有的 Memstore 大小和阈值、Memstore大小阈值、HLog数量阈值、定时周期阈值)后会 Flush 生成新的 Storefile。读先读 Memstore 再度 StoreFile
    StoreFile:数量增长到一定阈值后,通过 Compaction 合成更大的 Storefile,减少小文件数
    HFile :StoreFile 的底层实现,由多个 block 组成,结尾数据块包含索引信息

HDFS存储副本选择策略

  1. 第一个副本写在本地
  2. 第二个副本写不同机架的节点上(随机)
  3. 第三个副本存在第二副本机架的不同节点上(随机)

NameNode 不允许 DataNodes 具有同一个 block 的不同副本,所以最大副本数为当时的 DataNodes 数。如果大于三副本,会写到集群上的随机节点

HBase在HDFS中的文件布局

[root@kv1~/TDH-Client]# hdfs dfs -ls /hyperbase1
2023-11-02 09:21:05,418 INFO  [main] util.KerberosUtil (KerberosUtil.java:getDefaultPrincipalPattern(82)) - Using principal pattern: HTTP/_HOST
Found 10 items
drwxr-xr-x   - hbase hbase          0 2023-10-30 09:53 /hyperbase1/.hbase-snapshot
drwxr-xr-x   - hbase hbase          0 2023-10-23 13:07 /hyperbase1/.tmp
drwx--x--x   - hbase hbase          0 2023-11-02 09:11 /hyperbase1/MasterProcWALs
drwxr-xr-x   - hbase hbase          0 2023-10-23 13:09 /hyperbase1/WALs
drwxr-xr-x   - hbase hbase          0 2023-10-27 11:36 /hyperbase1/archive
drwxr-xr-x   - hbase hbase          0 2023-08-13 23:25 /hyperbase1/corrupt
drwxr-xr-x   - hbase hbase          0 2023-10-18 11:36 /hyperbase1/data
-rw-r--r--   3 hbase hbase         42 2023-08-12 13:47 /hyperbase1/hbase.id
-rw-r--r--   3 hbase hbase          7 2023-08-12 13:47 /hyperbase1/hbase.version
drwxr-xr-x   - hbase hbase          0 2023-11-02 09:12 /hyperbase1/oldWALs

参数说明如下:
.hbase-snapshot:snapshot文件存储目录。用户执行snapshot后,相关的snapshot元数据文件存储在该目录

.tmp:临时文件目录,主要用于HBase表的创建和删除操作。表创建的时候首先会在tmp目录下执行,执行成功后再将tmp目录下的表信息移动到实际表目录下。表删除操作会将表目录移动到tmp目录下,一定时间过后再将tmp目录下的文件真正删除。

MasterProcWALs:存储Master Procedure过程中的WAL文件。Master Procedure功能主要用于可恢复的分布式DDL操作。在早期HBase版本中,分布式DDL操作一旦在执行到中间某个状态发生宕机等异常的情况时是没有办法回滚的,这会导致集群元数据不一致。Master Procedure功能使用WAL记录DDL执行的中间状态,在异常发生之后可以通过WAL回放明确定位到中间状态点,继续执行后续操作以保证整个DDL操作的完整性。

WALs:存储集群中所有RegionServer的HLog日志文件。

archive:文件归档目录。这个目录主要会在以下几个场景下使用。所有对HFile文件的删除操作都会将待删除文件临时放在该目录。

  • 进行Snapshot或者升级时使用到的归档目录:
  • Compaction删除HFile的时候,也会把旧的HFile移动到这里。

corrupt:存储损坏的HLog文件或者HFile文件。
hbase.id:集群启动初始化的时候,创建的集群唯一id。
hbase.version:HBase软件版本文件,代码静态版本。
oldWALs:WAL归档目录。一旦一个WAL文件中记录的所有KV数据确认已经从MemStore持久化到HFile,那么该WAL文件就会被移到该目录。

data:存储集群中所有Region的HFile数据。HFile文件在data目录下的完整路径如下所示:

/hyperbase1/data/default/lkw.etl_job_log/1f545eb6e6ba061f49c47effbc401a00/f/51b5038b4b4240d1aabf7e441c64779e
  • default:命名空间
  • lkw.etl_job_log:表名
  • 1f545eb6e6ba061f49c47effbc401a00:为Region名称
  • f:列簇名
  • 51b5038b4b4240d1aabf7e441c64779e:HFile文件名

除了HFile文件外,data目录下还存储了一些重要的子目录和子文件。

[root@kv1~/TDH-Client]# hdfs dfs -ls /hyperbase1/data/default/lkw.etl_job_log
2023-11-02 09:52:16,875 INFO  [main] util.KerberosUtil (KerberosUtil.java:getDefaultPrincipalPattern(82)) - Using principal pattern: HTTP/_HOST
Found 3 items
drwxr-xr-x   - hbase hbase          0 2023-09-13 14:20 /hyperbase1/data/default/lkw.etl_job_log/.tabledesc
drwxr-xr-x   - hbase hbase          0 2023-09-13 14:20 /hyperbase1/data/default/lkw.etl_job_log/.tmp
drwxr-xr-x   - hbase hbase          0 2023-11-01 08:15 /hyperbase1/data/default/lkw.etl_job_log/1f545eb6e6ba061f49c47effbc401a00

.tabledesc:表描述文件,记录对应表的基本schema信息。
.tmp: 表临时目录,主要用来存储Flush和Compaction过程中的中间结果。

[root@kv1~/TDH-Client]# hdfs dfs -ls /hyperbase1/data/default/lkw.etl_job_log/1f545eb6e6ba061f49c47effbc401a00
2023-11-02 09:52:36,825 INFO  [main] util.KerberosUtil (KerberosUtil.java:getDefaultPrincipalPattern(82)) - Using principal pattern: HTTP/_HOST
Found 4 items
-rw-r--r--   3 hbase hbase         50 2023-09-13 14:20 /hyperbase1/data/default/lkw.etl_job_log/1f545eb6e6ba061f49c47effbc401a00/.regioninfo
drwxr-xr-x   - hbase hbase          0 2023-11-01 08:15 /hyperbase1/data/default/lkw.etl_job_log/1f545eb6e6ba061f49c47effbc401a00/.tmp
drwxr-xr-x   - hbase hbase          0 2023-11-01 08:16 /hyperbase1/data/default/lkw.etl_job_log/1f545eb6e6ba061f49c47effbc401a00/f
drwxr-xr-x   - hbase hbase          0 2023-10-23 13:09 /hyperbase1/data/default/lkw.etl_job_log/1f545eb6e6ba061f49c47effbc401a00/recovered.edits

.regioninfo:Region描述文件。
recovered.edits:存储故障恢复时该Region需要回放的WAL日志数据。RegionServer宕机之后,该节点上还没有来得及flush到磁盘的数据需要通过WAL回放恢复。WAL文件首先需要按照Region进行切分,每个Region拥有对应的WAL数据片段,回放时只需要回放自己的WAL数据片段即可。

HBase Locality

某些服务可能和DataNode部署在同一批机器上。因为DataNode本身需要消耗的内存资源和CPU资源都非常少,主要消耗网络带宽和磁盘资源。而HBase的RegionServer服务本身是内存和CPU消耗型服务,于是我们把RegionServer和DataNode部署在一批机器上。对某个DFSClient来说,一个文件在这台机器上的locality可以定义为:
locality =该文件存储在本地机器的字节数之和 / 该文件总字节数
因此,locality是[0, 1]之间的一个数,locality越大,则读取的数据都在本地,无需走网络进行数据读取,性能就越好。反之,则性能越差。读取数据就需要走网络,影响效率。

短路读(Short Circuit Read)

短路读是指对那些block落在和DFSClient同一台机器上的数据,可以不走TCP协议进行读取,而是直接由DFSClient向本机的DataNode请求对应Block的文件描述符(File Descriptor),然后创建一个BlockReaderLocal,通过fd进行数据读取,这样就节省了走本地TCP协议栈的开销。

locality和短路读对HBase的读性能影响重大。在locality=1.0情况下,不开短路读的p99性能要比开短路读差10%左右。如果用locality=0和locality=1相比,读操作性能则差距巨大。

HBase Locality 低的常用解决方案

查看对应的表的Locality
file
major compaction 可以解决

major_compact ‘表名称’

这里可以观察compact 的进度情况,只有所有regionserver的compaction都为100% 才表示compact结束
file
compact期间,hyperbase的读写性能是会有一定的影响的。

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。