Apache HBase ™ 参考指南

Getting Started

1. Introduction

Quickstart 将先介绍如何部署单HBase实例至单节点上。

2. Quick Start – Standalone HBase

2.1. JDK Version Requirements

运行HBase需要先安装JDK,关于所支持的JDK版本的信息,请参阅 Java

2.2. Get Started with HBase
过程:下载、配置、已Standalone模式启动HBase
  1. Apache Download Mirrors列表中选择一个下载站点, 单击顶部推荐的站点链接,将跳转到HBase Releases的镜像页面,单击名为stable的文件夹,然后将以.tar.gz结尾的二进制文件下载到本地文件系统,暂时不要立即下载以src.tar.gz结尾的文件。

  2. 将下载的文件进行解压缩,cd到安装路径下

    $ tar xzvf hbase-3.0.0-SNAPSHOT-bin.tar.gz
    $ cd hbase-3.0.0-SNAPSHOT/
    
  3. 在启动HBase之前需要设置JAVA_HOME环境变量,您可以通过操作系统来设置变量,HBase同时也提供了一个统一的环境变量配置文件conf/hbase-env.sh, 编辑此文件,取消被注释的以JAVA_HOME开头的行,并将其设置为正确的jdk安装目录,应将JAVA_HOME变量设置为包含可执行文件bin/java的目录。大多数现代Linux操作系统都提供了一种机制,例如RHEL或CentOS上的/usr/bin/alternatives,用于透明地在不同版本可执行文件间进行切换,在这种情况下,您可以将JAVA_HOME设置为包含bin/java的符号链接的目录,通常为/usr

JAVA_HOME=/usr
  1. 编辑conf/hbase-site.xml,这个是HBase主要的配置文件,您需要为HBase和ZooKeeper指定本地文件系统上的路径,用于写入数据,如果不配置,默认为在/tmp下创建一个新目录,许多服务器配置为在重启时删除/tmp下的内容,因此应该将数据存储在其他路径。如下配置,将HBase的数据存储在hbase目录下,该目录位于名为testuser的用户的home目录下,将<property>粘贴在<configuration>下面,新安装的HBase该节点下默认无元素。

示例 1. Example hbase-site.xml for Standalone HBase

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///home/testuser/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/testuser/zookeeper</value>
  </property>
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
    <description>
      Controls whether HBase will check for stream capabilities (hflush/hsync).

      Disable this if you intend to run on LocalFileSystem, denoted by a rootdir
      with the 'file://' scheme, but be mindful of the NOTE below.

      WARNING: Setting this to false blinds you to potential data loss and
      inconsistent system state in the event of process and/or node failures. If
      HBase is complaining of an inability to use hsync or hflush it's most
      likely not a false positive.
    </description>
  </property>
</configuration>

不需要手动创建HBase数据目录,HBase会自动创建,如果已存在目录,HBase将尝试进行迁移,这可能不符合你预期。

上示例配置中的hbase.rootdir指向了本地文件系统中的路径,file://前缀用于标识本地文件系统,您应该将配置示例中WARNING部分牢记于心。在standalone模式下,HBase利用了Apache Hadoop project本地文件系统抽象,本地文件系统无法为HBase安全运行提供持续性保证,只适用于本地开发和测试用例,这样集群故障的成本能得到很好的控制,但不适合生产部署,极有可能会导致丢失数据。

在现有的HDFS实例上安装HBase,将hbase.rootdir设置为指向实例的路径:e.g. hdfs://namenode.example.org:8020/hbase,有关此变体的更多信息,请参阅下面有关运行Standalone HBase于HDFS的部分。

bin/start-hbase.sh脚本提供启动HBase的快捷方式,启动命令,如果一切顺利,将在标准输出中显示HBase已成功启动。可以使用jps命令验证是否有一个名为HMaster的进程正在运行,在standalone模式下,HBase将所有守护进程运行于一个JVM进程,包括HMaster,一个HRegionServer和ZooKeeper,通过http://localhost:16010即可访问HBase Web UI。

note: 需要安装Java并可用,如果有错误消息提示未安装Java,但系统又安装了java(可能位于非标准位置),编辑conf/hbase-env.sh文件并修改JAVA_HOME,指向包含bin/java的路径。

过程:首次使用HBase

Connect to HBase.

Connect to your running instance of HBase using the hbase shell command, located in the bin/ directory of your HBase install. In this example, some usage and version information that is printed when you start HBase Shell has been omitted. The HBase Shell prompt ends with a > character.

1、连接到HBase。

使用位于HBase安装目录bin/下的hbase shell命令连接到正在运行的HBase实例,在此示例中,省略了启动HBase Shell时打印的用法和版本信息,HBase Shell提示符以>字符结尾。

$ ./bin/hbase shell
hbase(main):001:0>

2、显示HBase Shell帮助文档.
输入help并按Enter,显示HBase Shell的一些基本用法信息,以及几个示例命令。请注意,表名,行,列都必须用引号括起来。

3、创建一张表。

使用create命令创建新表,必须指定表名和ColumnFamily名称。

hbase(main):001:0> create 'test', 'cf'
0 row(s) in 0.4170 seconds

=> Hbase::Table - test

4、列出有关您的表的信息
使用list命令确认表是否存在

hbase(main):002:0> list 'test'
TABLE
test
1 row(s) in 0.0180 seconds

=> ["test"]

使用describe命令查看详细信息,包括默认配置值

hbase(main):003:0> describe 'test'
Table test is ENABLED
test
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE =>
'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'f
alse', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE
 => '65536'}
1 row(s)
Took 0.9998 seconds

5、将数据插入表中
使用put命令将数据插入表中.

hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.0850 seconds

hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0110 seconds

hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0100 seconds

我们每次插入一个值,总共插入三个值,第一个insert 位于row1、列cf:a,值为value1。HBase中的列由列族前缀组成,此示例中为cf,后跟冒号,然后是列限定符后缀,本例中为a.
6、一次扫描表格中的所有数据
从HBase获取数据的一种方法是扫描,使用scan命令扫描表中的数据,可以以limit方式scan,如下获取了全表数据。

hbase(main):006:0> scan 'test'
ROW                                      COLUMN+CELL
 row1                                    column=cf:a, timestamp=1421762485768, value=value1
 row2                                    column=cf:b, timestamp=1421762491785, value=value2
 row3                                    column=cf:c, timestamp=1421762496210, value=value3
3 row(s) in 0.0230 seconds

7、获取单行数据.
使用get命令一次获取一行数据。

hbase(main):007:0> get 'test', 'row1'
COLUMN                                   CELL
 cf:a                                    timestamp=1421762485768, value=value1
1 row(s) in 0.0350 seconds

8、Disable一张表.
如果要删除表或修改表配置,以及在某些其他情况下,需要先使用disable命令禁用该表,也可以使用enable命令重新启用它。

hbase(main):008:0> disable 'test'
0 row(s) in 1.1820 seconds

hbase(main):009:0> enable 'test'
0 row(s) in 0.1770 seconds

9、删除表.
使用drop命令删除表

hbase(main):010:0> disable 'test'
0 row(s) in 1.1820 seconds

hbase(main):011:0> drop 'test'
0 row(s) in 0.1370 seconds

10、退出HBase Shell.
使用quit命令退出HBase Shell并断开与群集的连接。HBase实例仍然在后台运行

过程:关闭HBase

bin/start-hbase.sh脚本快捷地启动所有HBase守护进程,对应地,bin/stop-hbase.sh脚本关闭这些进程。

$ ./bin/stop-hbase.sh
stopping hbase....................

命令执行后,进程可能需要花几分钟才能完全关闭,使用jps确保关闭了HMaster和HRegionServer进程。

上面已经展示了如何启动和停止HBase的standalone实例。在接下来的部分,我们将简要概述其他hbase部署模式。

2.3 伪分布式本地安装

伪分布模式意味着HBase仍然在单个主机上运行,但每个HBase守护程序(HMaster,HRegionServer和ZooKeeper)作为单独的进程运行,在standalone模式下,所有守护进程都运行在一个jvm实例中。默认情况下,除非按照快速入门中的说明配置了hbase.rootdir属性,否则数据仍存储在/tmp/路径下。在本演练中,我们将数据存储在HDFS中,您可以跳过HDFS配置以继续将数据存储在本地文件系统中。

Hadoop配置
此过程假定您已在本地系统和/或远程系统上已安装配置了Hadoop和HDFS,并且它们正在运行且可用,还假设您正在使用Hadoop 2.x,Hadoop文档中Setting up a Single Node Cluster指南可以提供相关安装配置指导信息。

  1. 关闭HBase.
    如果HBase在运行,请将其停止。此过程将创建一个全新的目录用于HBase存储数据,因此您之前创建的任何数据库都将丢失。

  2. 配置HBase.
    编辑hbase-site.xml文件,首先,添加以下属性,该属性指示HBase以分布式模式运行,每个守护进程运行于独立的JVM实例。

    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
    </property>
    

接下来,使用hdfs:////URI语法将hbase.rootdir路径由本地文件系统更改为HDFS实例的地址。在此示例中,HDFS在运行于localhost的8020端口上。请确保删除了hbase.unsafe.stream.capability.enforce的配置或将其设置为true。
<property> <name>hbase.rootdir</name> <value>hdfs://localhost:8020/hbase</value> </property>
无需在HDFS手动创建目录,HBase会自动创建,如果您创建了目录,HBase将尝试进行迁移,这可能不是你期望的。

  1. 启动HBase
    使用bin/start-hbase.sh命令启动HBase。如果系统配置正确,运行jps命令应能显示正在运行的HMaster和HRegionServer进程。
  2. 检查HDFS中的HBase目录.
    如果一切正常,HBase会在HDFS中创建文件存储目录。以上面的配置为例,文件存储在HDFS上的/hbase/,可以在Hadoop的bin/目录下使用hadoop fs命令列出此目录。
$ ./bin/hadoop fs -ls /hbase
    Found 7 items
    drwxr-xr-x   - hbase users          0 2014-06-25 18:58 /hbase/.tmp
    drwxr-xr-x   - hbase users          0 2014-06-25 21:49 /hbase/WALs
    drwxr-xr-x   - hbase users          0 2014-06-25 18:48 /hbase/corrupt
    drwxr-xr-x   - hbase users          0 2014-06-25 18:58 /hbase/data
    -rw-r--r--   3 hbase users         42 2014-06-25 18:41 /hbase/hbase.id
    -rw-r--r--   3 hbase users          7 2014-06-25 18:41 /hbase/hbase.version
    drwxr-xr-x   - hbase users          0 2014-06-25 21:49 /hbase/oldWALs</pre>
  1. 创建一张表并用数据填充它.
    可以使用HBase Shell创建表,用数据填充表,扫描并从中获取数据,参照如 shell exercises

  2. 启动和停止一个备份HBase Master(HMaster)server
    在生产环境中同一硬件上运行多个HMaster实例没有意义,就像运行伪分布式集群对生产没有意义一样。此步骤仅用于测试和学习目的。

HMaster server控制整个HBase集群。可以启动最多9个HMaster备实例,加上主HMaser,总共就可以有10个HMaster实例。要启动HMaster备实例,使用 local-master-backup.sh。对于要启动的每个HMaster备实例,添加一个表示该HMaster备实例端口偏移量的参数,每个HMaster要用到两个端口(默认16000和16010),将端口偏移量与默认端口号相加得到备实例真正端口号,所以如使用偏移量2,HMaster备实例将使用端口16002和16012.以下示例命令,分别使用端口16002/16012,16003/16013和16005/16015启动3个备实例。

$ ./bin/local-master-backup.sh start 2 3 5

要在不kill整个群集的情况下kill掉HMaster备实例,需要找到它的进程号(PID)。PID存储在名为/tmp/hbase-USER-X-master.pid的文件中。该文件的唯一内容是PID。可以使用kill -9命令终止该PID。以下命令将终止端口偏移量为1的HMaster备实例,但集群仍能运行:

$ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9
  1. 启动和停止额外的RegionServers
    HRegionServer按照HMaster的指令管理其StoreFiles中的数据。通常,集群中每个HRegionServer运行于一个独立节点。在同节点上运行多个HRegionServers,在伪分布式模式下的进行测试是非常有用。local-regionservers.sh命令允许您运行多个RegionServers,它的工作方式与local-master-backup.sh命令很类似,脚本每个入参都代表实例的端口偏移量。每个RegionServer需要两个端口,默认端口为16020和16030.自1.1.0版本起,HMaster不再使用region server端口,这将留下10个端口(16020到16029和16030到16039)给RegionServers。要支持额外更多的RegionServers,请在运行local-regionservers.sh脚本前将环境变量 HBASE_RS_BASE_PORTHBASE_RS_INFO_BASE_PORT设置为适当的值。例如设置base端口分别为16200和16300,在单服务器上,可以支持额外99个RegionServers。以下命令启动四个额外RegionServers,以16022/16032端口号(base端口16020/16030加2)开始、顺序递增的端口上运行
$ .bin/local-regionservers.sh start 2 3 4 5

要手动停止RegionServer,请运行local-regionservers.sh命令,并传入stop参数和要停止的服务器的偏移量

$ .bin/local-regionservers.sh stop 3
  1. Stop HBase.
    您可以使用bin/stop-hbase.sh命令停止HBase。
2.4. 高级篇-分布式

实际上,您需要一个完全分布式的配置来测试HBase并在真实场景中使用它。 在分布式配置中,群集包含多个节点,每个节点运行一个或多个HBase守护进程。这些包括主和备Master实例,多个ZooKeeper节点和多个RegionServer节点。

此高级篇快速入门中,群集新增加了两个节点。 架构如下:
Table 1. Distributed Cluster Demo Architecture

Node NameMasterZooKeeperRegionServer
node-a.example.comyesyesno
node-b.example.combackupyesyes
node-c.example.comnoyesyes

本入门假定每个节点都是虚拟机,并且它们都在同一网络上,它建立在之前快速入门伪分布式本地安装的基础上,假设您在该过程中配置的节点现在是node-a,在继续之前先停止node-a上的HBase。

确保所有节点都具有完全的通信访问权限,并且没有防火墙规则阻止它们间相互通信。如果您发现任何错误,例如无主机路由,请检查您的防火墙。

过程:配置无密SSH访问

node-a需要能够登录到node-bnode-c(以及自身)才能启动守护进程,实现此目的的最简单方法是在所有主机上使用相同的用户名,并从node-a配置无密SSH登录到其他每个主机。

  1. node-a上,生成密钥对。
    以运行HBase的用户登录系统,使用以下命令生成SSH密钥对:
$ ssh-keygen -t rsa

如果命令运行成功,则密钥对的路径将被打印到标准输出,公钥的默认名称是id_rsa.pub

  1. 创建目录,用于保存其他节点的共享秘钥.
    node-bnode-c上,以HBase用户身份登录,并在用户home目录下创建一个.ssh/目录(如果该目录尚不存在)。 如果它已存在,请注意它可能已包含其他秘钥。

  2. 将公钥复制到其他节点.
    通过使用scp或其他一些安全方法,将公钥从node-a安全地复制到其他每个节点,在其他每个节点上,创建一个名为.ssh/authorized_keys的新文件(如果该文件尚不存在),并将id_rsa.pub文件的内容追加到其末尾。 请注意,您还需要为node-a本身执行此操作。

$ cat id_rsa.pub >> ~/.ssh/authorized_keys
  1. 测试无密登录.
    如果您正确执行了上述过程,则当您使用相同的用户名从node-a SSH到其他任一节点时,不会提示您输入密码
  2. 由于node-b将运行Master备实例,在node-b重复上面的过程,在node-a的任何地方替换node-b为即可,请确保不要覆盖现有的.ssh/authorized_keys文件,使用>>运算符而不是>运算符将新密钥追加到现有文件。
    原文作者:主君_05c4
    原文地址: https://www.jianshu.com/p/41eda35a2fbe
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞