HBase 为集群的管理,分析和调试提供了多种工具。大多数这些工具的入口点是 bin / hbase 命令,尽管 dev-support / 目录中提供了一些工具。

要查看 bin / hbase 命令的使用说明,请运行它,不带参数或使用-h参数。这些是 HBase 0.98.x 的使用说明。某些命令(例如versionpelttclean)在以前的版本中不可用。

$ bin/hbase
Usage: hbase [<options>] <command> [<args>]
Options:
  --config DIR     Configuration direction to use. Default: ./conf
  --hosts HOSTS    Override the list in 'regionservers' file
  --auth-as-server Authenticate to ZooKeeper using servers configuration

Commands:
Some commands take arguments. Pass no args or -h for usage.
  shell           Run the HBase shell
  hbck            Run the HBase 'fsck' tool. Defaults read-only hbck1.
                  Pass '-j /path/to/HBCK2.jar' to run hbase-2.x HBCK2.
  snapshot        Tool for managing snapshots
  wal             Write-ahead-log analyzer
  hfile           Store file analyzer
  zkcli           Run the ZooKeeper shell
  master          Run an HBase HMaster node
  regionserver    Run an HBase HRegionServer node
  zookeeper       Run a ZooKeeper server
  rest            Run an HBase REST server
  thrift          Run the HBase Thrift server
  thrift2         Run the HBase Thrift2 server
  clean           Run the HBase clean up script
  classpath       Dump hbase CLASSPATH
  mapredcp        Dump CLASSPATH entries required by mapreduce
  pe              Run PerformanceEvaluation
  ltt             Run LoadTestTool
  canary          Run the Canary tool
  version         Print the version
  backup          Backup tables for recovery
  restore         Restore tables from existing backup image
  regionsplitter  Run RegionSplitter tool
  rowcounter      Run RowCounter tool
  cellcounter     Run CellCounter tool
  CLASSNAME       Run the class named CLASSNAME 

下面的一些工具和实用程序是 Java 类,它们直接传递给 bin / hbase 命令,如使用说明的最后一行所述。其他如hbase shellApache HBase Shell ),hbase upgrade升级)和hbase thriftThrift API 和过滤语言) ,在本指南的其他地方记录。

150.1。加纳利

Canary 工具可以帮助用户“测试”HBase 集群状态。默认的“区域模式”从每个区域的每个列族中获取一行。在“regionserver 模式”中,Canary 工具将从每个集群的 RegionServers 上的随机区域中获取一行。在“zookeeper 模式”中,Canary 将读取 zookeeper 集合的每个成员上的根 znode。

要查看用法,请传递-help参数(如果未传递参数,则 Canary 工具将在默认区域“mode”中开始执行,从群集中的每个区域获取一行)。

2018-10-16 13:11:27,037 INFO  [main] tool.Canary: Execution thread count=16
Usage: canary [OPTIONS] [<TABLE1> [<TABLE2]...] | [<REGIONSERVER1> [<REGIONSERVER2]..]
Where [OPTIONS] are:
 -h,-help        show this help and exit.
 -regionserver   set 'regionserver mode'; gets row from random region on server
 -allRegions     get from ALL regions when 'regionserver mode', not just random one.
 -zookeeper      set 'zookeeper mode'; grab zookeeper.znode.parent on each ensemble member
 -daemon         continuous check at defined intervals.
 -interval <N>   interval between checks in seconds
 -e              consider table/regionserver argument as regular expression
 -f <B>          exit on first error; default=true
 -failureAsError treat read/write failure as error
 -t <N>          timeout for canary-test run; default=600000ms
 -writeSniffing  enable write sniffing
 -writeTable     the table used for write sniffing; default=hbase:canary
 -writeTableTimeout <N>  timeout for writeTable; default=600000ms
 -readTableTimeouts <tableName>=<read timeout>,<tableName>=<read timeout>,...
                comma-separated list of table read timeouts (no spaces);
                logs 'ERROR' if takes longer. default=600000ms
 -permittedZookeeperFailures <N>  Ignore first N failures attempting to
                connect to individual zookeeper nodes in ensemble

 -D<configProperty>=<value> to assign or override configuration params
 -Dhbase.canary.read.raw.enabled=<true/false> Set to enable/disable raw scan; default=false

Canary runs in one of three modes: region (default), regionserver, or zookeeper.
To sniff/probe all regions, pass no arguments.
To sniff/probe all regions of a table, pass tablename.
To sniff/probe regionservers, pass -regionserver, etc.
See http://hbase.apache.org/book.html#_canary for Canary documentation. 

Sink类使用hbase.canary.sink.class配置属性进行实例化。

此工具将向用户返回非零错误代码,以便与其他监视工具(如 Nagios)协作。错误代码定义是:

private static final int USAGE_EXIT_CODE = 1;
private static final int INIT_ERROR_EXIT_CODE = 2;
private static final int TIMEOUT_ERROR_EXIT_CODE = 3;
private static final int ERROR_EXIT_CODE = 4;
private static final int FAILURE_EXIT_CODE = 5; 

以下是基于以下给定情况的一些示例:给定两个名为 test-01 和 test-02 的 Table 对象,每个对象分别具有两个列族 cf1 和 cf2,部署在 3 个 RegionServers 上。请参见下表。

RegionServer 的 测试 01 测试 02
RS1 R1 R2
RS2 r2
RS3 r2 r1

以下是基于先前给定案例的一些示例输出。

150.1.1。 Canary 测试每个表的每个区域的每个列族(商店)

$ ${HBASE_HOME}/bin/hbase canary

3/12/09 03:26:32 INFO tool.Canary: read from region test-01,,1386230156732.0e3c7d77ffb6361ea1b996ac1042ca9a. column family cf1 in 2ms
13/12/09 03:26:32 INFO tool.Canary: read from region test-01,,1386230156732.0e3c7d77ffb6361ea1b996ac1042ca9a. column family cf2 in 2ms
13/12/09 03:26:32 INFO tool.Canary: read from region test-01,0004883,1386230156732.87b55e03dfeade00f441125159f8ca87\. column family cf1 in 4ms
13/12/09 03:26:32 INFO tool.Canary: read from region test-01,0004883,1386230156732.87b55e03dfeade00f441125159f8ca87\. column family cf2 in 1ms
...
13/12/09 03:26:32 INFO tool.Canary: read from region test-02,,1386559511167.aa2951a86289281beee480f107bb36ee. column family cf1 in 5ms
13/12/09 03:26:32 INFO tool.Canary: read from region test-02,,1386559511167.aa2951a86289281beee480f107bb36ee. column family cf2 in 3ms
13/12/09 03:26:32 INFO tool.Canary: read from region test-02,0004883,1386559511167.cbda32d5e2e276520712d84eaaa29d84\. column family cf1 in 31ms
13/12/09 03:26:32 INFO tool.Canary: read from region test-02,0004883,1386559511167.cbda32d5e2e276520712d84eaaa29d84\. column family cf2 in 8ms 

所以你可以看到,table test-01 有两个区域和两个列族,因此默认的“区域模式”中的 Canary 工具将从 4 个(2 个区域* 2 个商店)不同的商店中挑选 4 个小块数据。这是默认行为。

150.1.2。对特定表格的每个区域的每个列族(商店)进行 Canary 测试

您还可以通过传递表名来测试一个或多个特定表。

$ ${HBASE_HOME}/bin/hbase canary test-01 test-02 

150.1.3。使用 RegionServer 粒度进行 Canary 测试

在“regionserver 模式”中,Canary 工具将从每个 RegionServer 中选取一小段数据(在“regionserver 模式”下,您还可以将一个或多个 RegionServer 名称作为参数传递给 canary-test)。

$ ${HBASE_HOME}/bin/hbase canary -regionserver

13/12/09 06:05:17 INFO tool.Canary: Read from table:test-01 on region server:rs2 in 72ms
13/12/09 06:05:17 INFO tool.Canary: Read from table:test-02 on region server:rs3 in 34ms
13/12/09 06:05:17 INFO tool.Canary: Read from table:test-01 on region server:rs1 in 56ms 

150.1.4。金丝雀测试与正则表达式模式

在“区域模式”下,您可以为表名传递正则表达式,在“regionserver 模式”下,可以为服务器名传递正则表达式。下面将测试 table test-01 和 test-02。

$ ${HBASE_HOME}/bin/hbase canary -e test-0[1-2] 

150.1.5。运行金丝雀测试作为“守护进程”

通过选项-interval定义的间隔重复运行(默认值为 60 秒)。如果发生任何错误,此守护程序将自行停止并返回非零错误代码。要让守护程序继续运行错误,请传递-f 标志,并将其值设置为 false(请参阅上面的用法)。

$ ${HBASE_HOME}/bin/hbase canary -daemon 

要以 5 秒的间隔重复运行而不是因错误而停止,请执行以下操作。

$ ${HBASE_HOME}/bin/hbase canary -daemon -interval 5 -f false 

150.1.6。如果金丝雀测试卡住,则强制超时

在某些情况下,请求被卡住,并且没有响应被发送回客户端。这可能发生在主服务器尚未注意到的死区域服务器上。因此,我们提供了一个超时选项来终止金丝雀测试并返回非零错误代码。以下设置超时值为 60 秒(默认值为 600 秒)。

$ ${HBASE_HOME}/bin/hbase canary -t 60000 

150.1.7。在金丝雀中启用写嗅探

默认情况下,canary 工具仅检查读取操作。要启用写入嗅探,可以在设置了-writeSniffing选项的情况下运行 canary。启用写入嗅探时,金丝雀工具将创建一个 hbase 表,并确保将表的区域分发到所有区域服务器。在每个嗅探期间,金丝雀将尝试将数据放入这些区域以检查每个区域服务器的写入可用性。

$ ${HBASE_HOME}/bin/hbase canary -writeSniffing 

默认写表为hbase:canary,可以使用选项-writeTable指定。

$ ${HBASE_HOME}/bin/hbase canary -writeSniffing -writeTable ns:canary 

每个 put 的默认值大小为 10 个字节。您可以通过配置键设置它:hbase.canary.write.value.size

150.1.8。将读/写失败视为错误

默认情况下,金丝雀工具仅记录读取失败 - 由于例如 RetriesExhaustedException 等 - 并将返回'正常'退出代码。要将读/写失败视为错误,可以使用-treatFailureAsError选项运行 canary。启用时,读/写失败将导致错误退出代码。

$ ${HBASE_HOME}/bin/hbase canary -treatFailureAsError 

150.1.9。在启用 Kerberos 的群集中运行 Canary

要在启用 Kerberos 的群集中运行 Canary,请在 hbase-site.xml 中配置以下两个属性:

  • hbase.client.keytab.file

  • hbase.client.kerberos.principal

当 Canary 以守护进程模式运行时,Kerberos 凭据每 30 秒刷新一次。

要为客户端配置 DNS 接口,请在 hbase-site.xml 中配置以下可选属性。

  • hbase.client.dns.interface

  • hbase.client.dns.nameserver

示例 40.启用 Kerberos 的群集中的 Canary

此示例显示具有有效值的每个属性。

<property>
  <name>hbase.client.kerberos.principal</name>
  <value>hbase/_HOST@YOUR-REALM.COM</value>
</property>
<property>
  <name>hbase.client.keytab.file</name>
  <value>/etc/hbase/conf/keytab.krb5</value>
</property>
<!-- optional params -->
<property>
  <name>hbase.client.dns.interface</name>
  <value>default</value>
</property>
<property>
  <name>hbase.client.dns.nameserver</name>
  <value>default</value>
</property> 

150.2。 RegionSplitter

usage: bin/hbase regionsplitter <TABLE> <SPLITALGORITHM>
SPLITALGORITHM is the java class name of a class implementing
                      SplitAlgorithm, or one of the special strings
                      HexStringSplit or DecimalStringSplit or
                      UniformSplit, which are built-in split algorithms.
                      HexStringSplit treats keys as hexadecimal ASCII, and
                      DecimalStringSplit treats keys as decimal ASCII, and
                      UniformSplit treats keys as arbitrary bytes.
 -c <region count>        Create a new table with a pre-split number of
                          regions
 -D <property=value>      Override HBase Configuration Settings
 -f <family:family:...>   Column Families to create with new table.
                          Required with -c
    --firstrow <arg>      First Row in Table for Split Algorithm
 -h                       Print this usage help
    --lastrow <arg>       Last Row in Table for Split Algorithm
 -o <count>               Max outstanding splits that have unfinished
                          major compactions
 -r                       Perform a rolling split of an existing region
    --risky               Skip verification steps to complete
                          quickly. STRONGLY DISCOURAGED for production
                          systems. 

有关其他详细信息,请参见手动区域分割

150.3。健康检查员

您可以将 HBase 配置为定期运行脚本,如果它失败了 N 次(可配置),请让服务器退出。有关配置和详细信息,请参阅 _HBASE-7351 定期运行状况检查脚本 _。

150.4。司机

几个经常访问的实用程序作为Driver类提供,并由 bin / hbase 命令执行。这些实用程序代表在群集上运行的 MapReduce 作业。它们以下列方式运行,将 UtilityName 替换为您要运行的实用程序。此命令假定您已将环境变量HBASE_HOME设置为服务器上解压缩 HBase 的目录。

${HBASE_HOME}/bin/hbase org.apache.hadoop.hbase.mapreduce.UtilityName 

可以使用以下实用程序:

LoadIncrementalHFiles

完成批量数据加载。

CopyTable

将表从本地群集导出到对等群集。

Export

将表数据写入 HDFS。

Import

导入先前Export操作写入的数据。

ImportTsv

以 TSV 格式导入数据。

RowCounter

计算 HBase 表中的行数。

CellCounter

计算 HBase 表中的单元格。

replication.VerifyReplication

比较两个不同集群中表的数据。警告:自时间戳更改以来,它不适用于 incrementColumnValues 的单元格。请注意,此命令与其他命令位于不同的程序包中。

RowCounterCellCounter之外的每个命令都接受单个--help参数来打印使用说明。

150.5。 HBase hbck

hbase-1.x 附带的hbck工具已在 hbase-2.x 中设置为只读。由于 hbase 内部组件已更改,因此无法修复 hbase-2.x 群集。其只读模式的评估也不应该受到信任,因为它不了解 hbase-2.x 操作。

下一节中描述的新工具 HBase HBCK2 取代hbck

150.6。 HBase HBCK2

HBCK2HBase hbck 的后继者,hbase-1.x 修复工具(A.K.A hbck1)。使用它代替hbck1进行 hbase-2.x 安装修复。

HBCK2不作为 hbase 的一部分发货。它可以作为 Apache HBase HBCK2 工具的伴随 hbase-operator-tools 存储库的子项目找到。 HBCK2被移出 hbase,因此除了 hbase 核心之外,它还能以节奏发展。

有关HBCK2hbck1的区别,请参阅 https://github.com/apache/hbase-operator-tools/tree/master/hbase-hbck2 主页,以及如何构建和使用它。

构建完成后,您可以按如下方式运行HBCK2

$ hbase hbck -j /path/to/HBCK2.jar 

这将生成描述命令和选项的HBCK2用法。

150.7。 HFile 工具

参见 HFile 工具

150.8。 WAL 工具

150.8.1。 FSHLog 工具

FSHLog上的主要方法提供手动拆分和转储设施。传递它 WALs 或分裂的产物, recover.edits 的内容。目录。

您可以通过执行以下操作获取 WAL 文件内容的文本转储:

 $ ./bin/hbase org.apache.hadoop.hbase.regionserver.wal.FSHLog --dump hdfs://example.org:8020/hbase/WALs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012 

如果文件有任何问题,返回代码将为非零,因此您可以通过将STDOUT重定向到/dev/null并测试程序返回来测试文件的健康性。

类似地,您可以通过执行以下操作强制拆分日志文件目录:

 $ ./bin/hbase org.apache.hadoop.hbase.regionserver.wal.FSHLog --split hdfs://example.org:8020/hbase/WALs/example.org,60020,1283516293161/ 
WALPrettyPrinter

WALPrettyPrinter是一个带有可配置选项的工具,用于打印 WAL 的内容。您可以使用'wal'命令通过 HBase cli 调用它。

 $ ./bin/hbase wal hdfs://example.org:8020/hbase/WALs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012 

WAL 打印旧版本的 HBase

在版本 2.0 之前,WALPrettyPrinter在 HBase 的预写日志的内部名称之后被称为HLogPrettyPrinter。在这些版本中,您可以使用与上面相同的配置打印 WAL 的内容,但使用'hlog'命令。

 $ ./bin/hbase hlog hdfs://example.org:8020/hbase/.logs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012 

150.9。压缩工具

compression.test

150.10。 CopyTable

CopyTable 是一个实用程序,可以将部分或全部表复制到同一个集群或另一个集群。目标表必须首先存在。用法如下:

$ ./bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --help
/bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --help
Usage: CopyTable [general options] [--starttime=X] [--endtime=Y] [--new.name=NEW] [--peer.adr=ADR] <tablename>

Options:
 rs.class     hbase.regionserver.class of the peer cluster,
              specify if different from current cluster
 rs.impl      hbase.regionserver.impl of the peer cluster,
 startrow     the start row
 stoprow      the stop row
 starttime    beginning of the time range (unixtime in millis)
              without endtime means from starttime to forever
 endtime      end of the time range.  Ignored if no starttime specified.
 versions     number of cell versions to copy
 new.name     new table's name
 peer.adr     Address of the peer cluster given in the format
              hbase.zookeeer.quorum:hbase.zookeeper.client.port:zookeeper.znode.parent
 families     comma-separated list of families to copy
              To copy from cf1 to cf2, give sourceCfName:destCfName.
              To keep the same name, just give "cfName"
 all.cells    also copy delete markers and deleted cells

Args:
 tablename    Name of the table to copy

Examples:
 To copy 'TestTable' to a cluster that uses replication for a 1 hour window:
 $ bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --starttime=1265875194289 --endtime=1265878794289 --peer.adr=server1,server2,server3:2181:/hbase --families=myOldCf:myNewCf,cf2,cf3 TestTable

For performance consider the following general options:
  It is recommended that you set the following to >=100\. A higher value uses more memory but
  decreases the round trip time to the server and may increase performance.
    -Dhbase.client.scanner.caching=100
  The following should always be set to false, to prevent writing data twice, which may produce
  inaccurate results.
    -Dmapred.map.tasks.speculative.execution=false 

扫描仪缓存

输入的缓存扫描通过作业配置中的hbase.client.scanner.caching进行配置。

默认情况下,CopyTable 实用程序仅复制最新版本的行单元格,除非在命令中明确指定了--versions=n

有关CopyTable的更多信息,请参阅 Jonathan Hsieh 的在线 HBase 备份和 CopyTable 博客文章。

150.11。哈希表/ SyncTable

HashTable / SyncTable 是一个用于同步表数据的两步工具,其中每个步骤都实现为 MapReduce 作业。与 CopyTable 类似,它可用于在相同或远程群集下进行部分或整个表数据同步。但是,它以比 CopyTable 更有效的方式执行同步。 HashTable(第一步)不是复制指定行键/时间段范围内的所有单元格,而是为源表上的批处理单元格创建散列索引,并将其作为结果输出。在下一个阶段,SyncTable 扫描源表,现在计算表格单元格的哈希索引,将这些哈希值与 HashTable 的输出进行比较,然后只扫描(并比较)单元格以获得不同的哈希值,只更新不匹配的单元格。这样可以减少网络流量/数据传输,这可能会在同步远程群集上的大型表时产生影响。

150.11.1。第 1 步,HashTable

首先,在源表集群上运行 HashTable(这是将其状态复制到其对应表的表)。

用法:

$ ./bin/hbase org.apache.hadoop.hbase.mapreduce.HashTable --help
Usage: HashTable [options] <tablename> <outputpath>

Options:
 batchsize     the target amount of bytes to hash in each batch
               rows are added to the batch until this size is reached
               (defaults to 8000 bytes)
 numhashfiles  the number of hash files to create
               if set to fewer than number of regions then
               the job will create this number of reducers
               (defaults to 1/100 of regions -- at least 1)
 startrow      the start row
 stoprow       the stop row
 starttime     beginning of the time range (unixtime in millis)
               without endtime means from starttime to forever
 endtime       end of the time range.  Ignored if no starttime specified.
 scanbatch     scanner batch size to support intra row scans
 versions      number of cell versions to include
 families      comma-separated list of families to include

Args:
 tablename     Name of the table to hash
 outputpath    Filesystem path to put the output data

Examples:
 To hash 'TestTable' in 32kB batches for a 1 hour window into 50 files:
 $ bin/hbase org.apache.hadoop.hbase.mapreduce.HashTable --batchsize=32000 --numhashfiles=50 --starttime=1265875194289 --endtime=1265878794289 --families=cf2,cf3 TestTable /hashes/testTable 

batchsize 属性定义在单个散列值中将给定区域的单元数据散列在一起的程度。正确调整大小会对同步效率产生直接影响,因为它可能会导致 SyncTable 的映射器任务执行的扫描次数减少(该过程的下一步)。经验法则是,不同步的单元数量越少(找到差异的概率越低),可以确定更大的批量大小值。

150.11.2。第 2 步,SyncTable

在源群集上完成 HashTable 后,可以在目标群集上运行 SyncTable。就像复制和其他同步作业一样,它要求源集群上的所有 RegionServers / DataNode 都可以由目标集群上的 NodeManagers 访问(其中将运行 SyncTable 作业任务)。

Usage:

$ ./bin/hbase org.apache.hadoop.hbase.mapreduce.SyncTable --help
Usage: SyncTable [options] <sourcehashdir> <sourcetable> <targettable>

Options:
 sourcezkcluster  ZK cluster key of the source table
                  (defaults to cluster in classpath's config)
 targetzkcluster  ZK cluster key of the target table
                  (defaults to cluster in classpath's config)
 dryrun           if true, output counters but no writes
                  (defaults to false)
 doDeletes        if false, does not perform deletes
                  (defaults to true)
 doPuts           if false, does not perform puts
                  (defaults to true)

Args:
 sourcehashdir    path to HashTable output dir for source table
                  (see org.apache.hadoop.hbase.mapreduce.HashTable)
 sourcetable      Name of the source table to sync from
 targettable      Name of the target table to sync to

Examples:
 For a dry run SyncTable of tableA from a remote source cluster
 to a local target cluster:
 $ bin/hbase org.apache.hadoop.hbase.mapreduce.SyncTable --dryrun=true --sourcezkcluster=zk1.example.com,zk2.example.com,zk3.example.com:2181:/hbase hdfs://nn:9000/hashes/tableA tableA tableA 

当需要只读,差异报告时, dryrun 选项很有用,因为它只会产生指示差异的 COUNTERS,但不会执行任何实际更改。它可以用作 VerifyReplication 工具的替代方案。

默认情况下,SyncTable 将使目标表成为源表的精确副本(至少,对于指定的 startrow / stoprow 或/和 starttime / endtime)。

将 doDeletes 设置为 false 会修改默认行为,以便不删除源上缺少的目标单元格。同样,将 doPuts 设置为 false 会修改默认行为,以便不在目标上添加缺少的单元格。将 doDeletes 和 doPuts 都设置为 false 会产生与将 dryrun 设置为 true 相同的效果。

在双向复制方案中将 doDeletes 设置为 false

在双向复制或源集群和目标集群都可以获取数据的其他情况下,建议始终将 doDeletes 选项设置为 false,因为在 SyncTable 目标集群上插入但尚未复制到源的任何其他单元格将被删除,并且可能永远失去了。

将 sourcezkcluster 设置为实际源群集 ZK quoru

虽然不是必需的,但如果未设置 sourcezkcluster,则 SyncTable 将连接到源和目标的本地 HBase 集群,这不会产生任何有意义的结果。

不同 Kerberos 领域的远程集群

目前,无法为不同 Kerberos 领域上的远程群集运行 SyncTable。有一些工作要在 HBASE-20586 上解决这个问题

150.12。出口

Export 是一个实用程序,它将表的内容转储到序列文件中的 HDFS。可以通过协处理器端点或 MapReduce 运行导出。通过以下方式调用

基于 mapreduce 的出口

$ bin/hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]] 

基于端点的导出

通过将org.apache.hadoop.hbase.coprocessor.Export添加到hbase.coprocessor.region.classes,确保启用了导出协处理器。

$ bin/hbase org.apache.hadoop.hbase.coprocessor.Export <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]] 

outputdir 是导出前不存在的 HDFS 目录。完成后,导出的文件将由调用导出命令的用户拥有。

基于端点的导出和基于 Mapreduce 的导出的比较

基于端点的导出 基于 Mapreduce 的导出
HBase 版本要求 2.0+ 0.2.1+
Maven 依赖 HBase 的端点 hbase-mapreduce(2.0 +),hbase-server(2.0 之前)
转储前的要求 在目标表上挂载 endpoint.Export 部署 MapReduce 框架
读延迟 低,直接从区域读取数据 传统的 RPC 扫描
读可伸缩性 取决于地区的数量 取决于映射器的数量(请参阅 TableInputFormatBase #getSplits)
超时 操作超时。由 hbase.client.operation.timeout 配置 扫描超时。由 hbase.client.scanner.timeout.period 配置
许可要求 阅读,执行
容错 没有 取决于 MapReduce

要查看使用说明,请运行不带任何选项的命令。可用选项包括指定列族和导出期间应用过滤器。

默认情况下,Export工具仅导出给定单元格的最新版本,而不管存储的版本数量。要导出多个版本,请用所需的版本数替换。

注意:输入扫描的缓存是通过作业配置中的hbase.client.scanner.caching配置的。

150.13。进口

Import 是一个实用程序,它将加载已导出回 HBase 的数据。通过以下方式调用

$ bin/hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir> 

要查看使用说明,请运行不带任何选项的命令。

要在 0.96 群集中或之后导入 0.94 导出的文件,您需要在运行导入命令时设置系统属性“hbase.import.version”,如下所示:

$ bin/hbase -Dhbase.import.version=0.94 org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir> 

150.14。 ImportTsv

ImportTsv 是一个实用程序,它将 TSV 格式的数据加载到 HBase 中。它有两个不同的用法:通过 Puts 将数据从 HDFS 中的 TSV 格式加载到 HBase 中,并准备通过completebulkload加载 StoreFiles。

通过 Puts 加载数据(即非批量加载):

$ bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c <tablename> <hdfs-inputdir> 

要生成 StoreFiles 以进行批量加载:

$ bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c -Dimporttsv.bulk.output=hdfs://storefile-outputdir <tablename> <hdfs-data-inputdir> 

这些生成的 StoreFiles 可以通过 completebulkload 加载到 HBase 中。

150.14.1。 ImportTsv 选项

不带参数运行ImportTsv会打印简要的用法信息:

Usage: importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>

Imports the given input directory of TSV data into the specified table.

The column names of the TSV data must be specified using the -Dimporttsv.columns
option. This option takes the form of comma-separated column names, where each
column name is either a simple column family, or a columnfamily:qualifier. The special
column name HBASE_ROW_KEY is used to designate that this column should be used
as the row key for each imported record. You must specify exactly one column
to be the row key, and you must specify a column name for every column that exists in the
input data.

By default importtsv will load data directly into HBase. To instead generate
HFiles of data to prepare for a bulk data load, pass the option:
  -Dimporttsv.bulk.output=/path/for/output
  Note: the target table will be created with default column family descriptors if it does not already exist.

Other options that may be specified with -D include:
  -Dimporttsv.skip.bad.lines=false - fail if encountering an invalid line
  '-Dimporttsv.separator=|' - eg separate on pipes instead of tabs
  -Dimporttsv.timestamp=currentTimeAsLong - use the specified timestamp for the import
  -Dimporttsv.mapper.class=my.Mapper - A user-defined Mapper to use instead of org.apache.hadoop.hbase.mapreduce.TsvImporterMapper 

150.14.2。 ImportTsv 示例

例如,假设我们将数据加载到名为'datatsv'的表中,其中 ColumnFamily 称为'd',其中包含两列“c1”和“c2”。

假设输入文件存在如下:

row1    c1    c2
row2    c1    c2
row3    c1    c2
row4    c1    c2
row5    c1    c2
row6    c1    c2
row7    c1    c2
row8    c1    c2
row9    c1    c2
row10    c1    c2 

要使 ImportTsv 使用此输入文件,命令行需要如下所示:

 HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/hbase-mapreduce-VERSION.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,d:c1,d:c2 -Dimporttsv.bulk.output=hdfs://storefileoutput datatsv hdfs://inputfile 

...在本例中,第一列是 rowkey,这就是使用 HBASE_ROW_KEY 的原因。文件中的第二列和第三列将分别导入为“d:c1”和“d:c2”。

150.14.3。 ImportTsv 警告

如果您准备了大量数据以进行批量加载,请确保对目标 HBase 表进行适当的预分割。

150.14.4。也可以看看

有关将 HFiles 批量加载到 HBase 中的更多信息,请参见 arch.bulk.load

150.15。 CompleteBulkLoad

completebulkload实用程序会将生成的 StoreFiles 移动到 HBase 表中。该实用程序通常与 importtsv 的输出结合使用。

有两种方法可以通过显式类名和驱动程序调用此实用程序:

显式类名

$ bin/hbase org.apache.hadoop.hbase.tool.LoadIncrementalHFiles <hdfs://storefileoutput> <tablename> 

司机

HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/hbase-server-VERSION.jar completebulkload <hdfs://storefileoutput> <tablename> 

150.15.1。 CompleteBulkLoad 警告

通过 MapReduce 生成的数据通常使用与正在运行的 HBase 进程不兼容的文件权限创建。假设您在启用权限的情况下运行 HDFS,则需要在运行 CompleteBulkLoad 之前更新这些权限。

有关将 HFile 批量加载到 HBase 中的更多信息,请参见 arch.bulk.load

150.16。 WALPlayer

WALPlayer 是一个将 WAL 文件重放到 HBase 中的实用程序。

可以为一组表或所有表重放 WAL,并且可以提供时间范围(以毫秒为单位)。 WAL 被过滤到这组表。输出可以选择性地映射到另一组表。

WALPlayer 还可以生成 HFile 以供以后批量导入,在这种情况下,只能指定一个表,并且不能指定映射。

通过以下方式调用

$ bin/hbase org.apache.hadoop.hbase.mapreduce.WALPlayer [options] <wal inputdir> <tables> [<tableMappings>]> 

例如:

$ bin/hbase org.apache.hadoop.hbase.mapreduce.WALPlayer /backuplogdir oldTable1,oldTable2 newTable1,newTable2 

默认情况下,WALPlayer 作为 mapreduce 作业运行。若要不将 WALPlayer 作为集群上的 mapreduce 作业运行,请通过在命令行上添加标志-Dmapreduce.jobtracker.address=local来强制它在本地进程中运行。

150.16.1。 WALPlayer 选项

不带参数运行WALPlayer会打印简要的用法信息:

Usage: WALPlayer [options] <wal inputdir> <tables> [<tableMappings>]
Replay all WAL files into HBase.
<tables> is a comma separated list of tables.
If no tables ("") are specified, all tables are imported.
(Be careful, hbase:meta entries will be imported in this case.)

WAL entries can be mapped to new set of tables via <tableMappings>.
<tableMappings> is a comma separated list of target tables.
If specified, each table in <tables> must have a mapping.

By default WALPlayer will load data directly into HBase.
To generate HFiles for a bulk data load instead, pass the following option:
  -Dwal.bulk.output=/path/for/output
  (Only one table can be specified, and no mapping is allowed!)
Time range options:
  -Dwal.start.time=[date|ms]
  -Dwal.end.time=[date|ms]
  (The start and the end date of timerange. The dates can be expressed
  in milliseconds since epoch or in yyyy-MM-dd'T'HH:mm:ss.SS format.
  E.g. 1234567890120 or 2009-02-13T23:32:30.12)
Other options:
  -Dmapreduce.job.name=jobName
  Use the specified mapreduce job name for the wal player
For performance also consider the following options:
  -Dmapreduce.map.speculative=false
  -Dmapreduce.reduce.speculative=false 

150.17。 RowCounter

RowCounter 是一个 mapreduce 作业,用于计算表的所有行。这是一个很好的实用程序,可用作健全性检查,以确保如果存在元数据不一致的问题,HBase 可以读取表的所有块。它将在一个进程中运行 mapreduce,但如果你有一个 MapReduce 集群可以利用它,它将运行得更快。可以使用--starttime=[starttime]--endtime=[endtime]标志限制要扫描的数据的时间范围。可以使用--range=[startKey],[endKey][;[startKey],[endKey]…​]选项基于键限制扫描数据。

$ bin/hbase rowcounter [options] <tablename> [--starttime=<start> --endtime=<end>] [--range=[startKey],[endKey][;[startKey],[endKey]...]] [ ...] 

RowCounter 每个单元只计算一个版本。

性能考虑使用-Dhbase.client.scanner.caching=100-Dmapreduce.map.speculative=false选项。

150.18。 CellCounter

HBase 发布了另一个叫做 CellCounter 的诊断 mapreduce 工作。与 RowCounter 一样,它收集有关您的表的更细粒度的统计信息。 CellCounter 收集的统计数据更精细,包括:

  • 表中的总行数。

  • 所有行中的 CF 总数。

  • 所有行的总限定符。

  • 每个 CF 的总发生次数。

  • 每个限定符的总出现次数。

  • 每个限定符的版本总数。

该程序允许您限制运行的范围。提供行正则表达式或前缀以限制要分析的行。使用--starttime=&lt;starttime&gt;--endtime=&lt;endtime&gt;标志指定扫描表的时间范围。

使用hbase.mapreduce.scan.column.family指定扫描单列族。

$ bin/hbase cellcounter <tablename> <outputDir> [reportSeparator] [regex or prefix] [--starttime=<starttime> --endtime=<endtime>] 

注意:就像 RowCounter 一样,输入的缓存扫描是通过作业配置中的hbase.client.scanner.caching配置的。

150.19。 mlockall 用于

通过让服务器在启动时调用 mlockall ,可以选择将服务器固定在物理内存中,从而降低在超额订阅环境中换出的可能性。参见 HBASE-4391 添加以 root 身份启动 RS 的功能,并调用 mlockall 了解如何构建可选库并使其在启动时运行。

150.20。离线压缩工具

CompactionTool 提供了一种运行压缩(次要或主要)作为 RegionServer 的独立进程的方法。它重用了 RegionServer 压缩功能执行的相同内部实现类。但是,由于它在一个完全独立的独立 java 进程上运行,因此它会从重写一组 hfiles 所涉及的开销中释放 RegionServers,这对于延迟敏感的用例非常重要。

Usage:

$ ./bin/hbase org.apache.hadoop.hbase.regionserver.CompactionTool

Usage: java org.apache.hadoop.hbase.regionserver.CompactionTool \