Apache HBase【从无到有从有到无】【AH3】入门

目录

1.入门

1.1.介绍

1.2.快速入门-Standalone HBase

1.3.JDK版本要求

1.4.HBase入门

1.4.1.过程:以独立模式下载,配置和启动HBase

1.4.2.过程:首次使用HBase

1.4.3.过程:停止HBase

1.5.伪分布式(Pseudo-Distributed)本地安装

1.6.高级-完全分布式(Fully Distributed)

1.6.1.过程:配置无密码的SSH访问

1.6.2.过程:准备node-a

1.6.3.过程:准备node-b和node-c

1.6.4.过程:启动和测试集群

1.7.接下来去哪里


1.入门

1.1.介绍

快速入门可帮助您在HBase的单节点独立实例上运行。

1.2.快速入门-Standalone HBase

本节描述了单节点独立HBase的设置。 一个独立的实例具有所有的HBase守护程序(包括Master,RegionServers和ZooKeeper),它们在单个JVM中运行并持久化到本地文件系统。 这是我们最基本的部署配置文件。 我们将向您展示如何使用hbase shell CLI在HBase中创建表,如何在表中插入行,对表执行put和scan操作,启用或禁用表以及启动和停止HBase。

除了下载HBase之外,此过程还需要不到10分钟的时间。

1.3.JDK版本要求

HBase要求安装JDK。 有关受支持的JDK版本的信息,请参见Java

1.4.HBase入门

1.4.1.过程:以独立模式下载,配置和启动HBase

1.从Apache Download Mirrors列表中选择一个下载站点。 单击建议的顶部链接。 这将带您了解HBase版本的镜像。 单击名为 stable 的文件夹,然后将以.tar.gz结尾的二进制文件下载到本地文件系统。 现在不要下载以src.tar.gz结尾的文件。

2.解压缩下载的文件,然后转到新创建的目录。

$ 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安装的位置,找到它的一种方法是使用 java命令 whereis 。 找到位置后,编辑 conf/hbase-env.sh 文件,并取消注释以#export JAVA_HOME =开头的行,然后将其设置为Java安装路径。

从hbase-env.sh中提取示例示例,其中设置了JAVA_HOME

# Set environment variables here.
# The java implementation to use.
export JAVA_HOME=/usr/jdk64/jdk1.8.0_112

4.编辑 conf/hbase-site.xml,这是HBase主要的配置文件。 这时,您需要在本地文件系统上指定HBase和ZooKeeper写入数据的目录并确认一些风险。 默认情况下,在 /tmp 下创建一个新目录。 许多服务器配置为在重新引导时删除 /tmp 的内容,因此您应该将数据存储在其他位置。 以下配置会将HBase的数据存储在名为testuser的用户的主目录中的hbase目录中。 将<property>标记粘贴在<configuration>标记下方,在新的HBase安装中,该标记应为空。

例子1.独立HBase的例子hbase-site.xml

<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”。 在独立模式下,HBase使用Apache Hadoop项目中的本地文件系统抽象。 这种抽象不能提供HBase安全运行所需的持久性保证。 这对于很好地控制集群故障成本的本地开发和测试用例来说是很好的选择。 它不适用于生产部署; 最终您将丢失数据。

要将HBase放置在现有HDFS实例上,请将 hbase.rootdir 设置为指向您实例上的目录:例如 hdfs://namenode.example.org:8020/hbase。 有关此变体的更多信息,请参见下面有关基于HDFS的独立HBase的部分。

1.提供 bin/start-hbase.sh 脚本是启动HBase的便捷方法。 发出命令,如果一切顺利,则会在标准输出中记录一条消息,表明HBase已成功启动。 您可以使用jps命令来验证您是否有一个名为HMaster的正在运行的进程。 在独立模式下,HBase在此单个JVM中运行所有守护程序,即HMaster,单个HRegionServer和ZooKeeper守护程序。 转到 http://localhost:16010 查看HBase Web UI。

Java需要安装并可用。 如果收到指示未安装Java的错误,但该错误在系统上(可能位于非标准位置),请编辑conf/hbase-env.sh文件并修改JAVA_HOME设置以指向包含bin的目录 bin/java 在您的系统上。

1.4.2.过程:首次使用HBase

1.连接到HBase。

使用hbase shell命令连接到正在运行的HBase实例,该命令位于HBase安装目录的bin/ 目录中。 在此示例中,省略了启动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

在这里,我们插入三个值,一次插入一个。 第一次插入是在row1cf:a列,其值为value1。 HBase中的列由列族前缀(在此示例中为cf)组成,后跟冒号,然后是列限定符后缀(在本例中为a)。

6.一次扫描表中的所有数据。

从HBase获取数据的一种方法是扫描。 使用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命令禁用该表。 您可以使用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

如果您测试了上面的enable命令,请再次禁用该表:

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

9.删除表

要drop (delete)表,请使用drop命令。

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

10.退出HBase Shell。

要退出HBase Shell并从群集断开连接,请使用quit命令。 HBase仍在后台运行。

1.4.3.过程:停止HBase

1.与提供 bin/start-hbase.sh 脚本以方便地启动所有HBase守护程序相同,bin/stop-hbase.sh 脚本将停止它们。

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

2.发出命令后,关闭进程可能需要几分钟。 使用jps确保HMaster和HRegionServer进程已关闭。

上面显示了如何启动和停止HBase的独立实例。 在下一节中,我们将简要概述hbase部署的其他模式。

1.5.伪分布式(Pseudo-Distributed)本地安装

在快速入门独立模式下工作之后,您可以将HBase重新配置为以伪分布式模式运行。

伪分布式模式意味着HBase仍完全在单个主机上运行,但是每个HBase守护程序(HMaster,HRegionServer和ZooKeeper)作为单独的进程运行:在独立模式下,所有守护程序都在一个jvm进程/实例中运行。

默认情况下,除非您按照快速入门中的说明配置hbase.rootdir属性,否则您的数据仍存储在/tmp/中。 在本演练中,假设您有可用的HDFS,我们将数据存储在HDFS中。 您可以跳过HDFS配置,以继续将数据存储在本地文件系统中。

Hadoop配置
此过程假定您已在本地系统and/or远程系统上配置了Hadoop和HDFS,并且它们正在运行并且可用。 它还假定您正在使用Hadoop2。Hadoop文档中有关设置单节点群集的指南是一个很好的起点。

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在本地主机上的端口8020上运行。请确保删除hbase.unsafe.stream.capability.enforce的条目或将其设置为true

<property>
  <name>hbase.rootdir</name>
  <value>hdfs://localhost:8020/hbase</value>
</property>

您无需在HDFS中创建目录。 HBase将为您完成此任务。 如果创建目录,则HBase将尝试进行迁移,这不是您想要的。

3.启动HBase

使用 bin/start-hbase.sh 命令启动HBase。 如果系统配置正确,则jps命令应显示正在运行的HMaster和HRegionServer进程。

4.检查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

5.创建一个表并用数据填充它。

您可以使用HBase Shell创建一个表,使用数据填充该表,扫描并从中获取值,方法与shell exercises相同。

6.启动和停止备用HBase主服务器(HMaster)服务器。

在生产环境中,在同一硬件上运行多个HMaster实例没有任何意义,就像在生产环境中运行伪分布式集群没有意义。 此步骤仅用于测试和学习目的。

HMaster服务器控制HBase群集。 您最多可以启动9台备用HMaster服务器,这使总数为10台HMaster成为主要服务器。

要启动备份HMaster,请使用local-master-backup.sh。

对于要启动的每个备份主服务器,添加一个代表该主服务器的端口偏移量的参数。

每个HMaster使用两个端口(默认情况下为16000和16010)。

端口偏移量已添加到这些端口,因此,使用偏移量2时,备份HMaster将使用端口16002和16012。以下命令使用端口16002/16012, 16003/16013 和16005/16015启动3个备份服务器。

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

要杀死备份主服务器而不杀死整个集群,您需要找到其进程ID(PID)。 PID以类似/tmp/hbase-USER-X-master.pid的名称存储在文件中。 该文件的唯一内容是PID。 您可以使用kill -9命令杀死该PID。 以下命令将杀死端口偏移为1的主服务器,但使集群保持运行状态:

$ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9

7.启动和停止其他RegionServer

HRegionServer按照HMaster的指示管理其StoreFiles中的数据。通常,群集中的每个节点都运行一个HRegionServer。

在同一系统上运行多个HRegionServer对于在伪分布式模式下进行测试非常有用。 local-regionservers.sh命令允许您运行多个RegionServer。

它的工作方式与local-master-backup.sh命令类似,因为您提供的每个参数都代表实例的端口偏移量。每个RegionServer需要两个端口,默认端口为16020和16030。

由于HBase版本1.1.0,HMaster不使用区域服务器端口,因此剩下10个端口(16020到16029和16030到16039)用于RegionServer。为了支持其他RegionServer,请在运行脚本local-regionservers.sh之前将环境变量HBASE_RS_BASE_PORT和HBASE_RS_INFO_BASE_PORT设置为适当的值。

例如通过基本端口的值16200和16300,可以在服务器上支持99个其他RegionServer。以下命令启动四个附加的RegionServer,它们在从16022/16032(基本端口16020/16030加2)开始的顺序端口上运行。

$ .bin/local-regionservers.sh start 2 3 4 5

要手动停止RegionServer,请使用带有stop参数的local-regionservers.sh命令和要停止的服务器偏移量。

$ .bin/local-regionservers.sh stop 3

8.停止HBase。

您可以使用 bin/stop-hbase.sh 命令以与快速入门过程中相同的方式停止HBase。

1.6.高级-完全分布式(Fully Distributed)

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

此高级快速入门为集群添加了两个以上的节点。 架构如下:

表1.分布式集群演示架构

Node NameMasterZooKeeperRegionServer

node-a.example.com

yes

yes

no

node-b.example.com

backup

yes

yes

node-c.example.com

no

yes

yes

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

确保所有节点都具有完全的通信访问权限,并且没有适当的防火墙规则可能阻止它们相互通信。 如果看到任何错误,例如没有通往主机的路由,请检查防火墙。

1.6.1.过程:配置无密码的SSH访问

节点a需要能够登录到节点b和节点c(以及自身)才能启动守护程序。 完成此操作的最简单方法是在所有主机上使用相同的用户名,并配置从节点a到其他每个节点的无密码SSH登录。

1.在node-a上,生成密钥对。

以将要运行HBase的用户身份登录后,使用以下命令生成SSH密钥对:

$ ssh-keygen -t rsa

如果命令成功执行,则将密钥对的位置打印到标准输出。 公钥的默认名称是id_rsa.pub

2.创建将在其他节点上保存共享密钥的目录。

在node-b和node-c上,以HBase用户身份登录,并在用户的主目录中创建 .ssh/ 目录(如果尚不存在)。 如果已经存在,请注意它可能已经包含其他密钥。

3.将公钥复制到其他节点。

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

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

4.测试无密码登录。

如果正确执行了该过程,那么当您使用相同的用户名从node-a SSH到其他任何一个节点时,不应该提示您输入密码。

5.由于node-b将运行备份主服务器,因此重复上述过程,在看到node-a的任何地方都替换node-b。 确保不要覆盖现有的 .ssh/authorized_keys 文件,而是使用>>运算符而不是>运算符将新密钥连接到现有文件上。

1.6.2.过程:准备node-a

node-a将运行您的主要主服务器和ZooKeeper进程,但不运行RegionServer。 停止RegionServer在node-a上启动。

1.编辑conf/regionservers并删除包含localhost的行。 为node-b和node-c添加带有主机名或IP地址的行。

即使您确实想在node-a上运行RegionServer,也应使用其他服务器用来与其通信的主机名来引用它。 在这种情况下,它将是node-a.example.com。 这使您可以将任何主机名冲突将配置分发到群集的每个节点。 保存文件。

2.配置HBase以将node-b用作备份主服务器。

conf/中创建一个名为backup-masters的新文件,并在其中添加带有node-b主机名的新行。 在此演示中,主机名是node-b.example.com。

3.配置ZooKeeper

实际上,您应该仔细考虑您的ZooKeeper配置。 您可以在zookeeper部分中找到有关配置ZooKeeper的更多信息。 此配置将指导HBase在群集的每个节点上启动和管理ZooKeeper实例。

在node-a上,编辑 conf/hbase-site.xml 并添加以下属性。

<property>
  <name>hbase.zookeeper.quorum</name>
  <value>node-a.example.com,node-b.example.com,node-c.example.com</value>
</property>
<property>
  <name>hbase.zookeeper.property.dataDir</name>
  <value>/usr/local/zookeeper</value>
</property>

4.在配置中您已将node-a称为localhost的任何地方,都将引用更改为指向其他节点将用来引用node-a的主机名。 在这些示例中,主机名是node-a.example.com。

1.6.3.过程:准备node-b和node-c

node-b将运行一个备份主服务器和一个ZooKeeper实例。

1.下载并解压缩HBase。

将HBase下载并解压缩到node-b,就像对独立和伪分布式快速入门所做的那样。

2.将配置文件从node-a复制到node-b和node-c。

群集的每个节点都需要具有相同的配置信息。 将conf/目录的内容复制到node-b和node-c上的conf/目录。

1.6.4.过程:启动和测试集群

1.确保HBase不在任何节点上运行。

如果您忘记从先前的测试中停止HBase,则将出现错误。 使用jps命令检查HBase是否在您的任何节点上运行。 查找进程HMaster,HRegionServer和HQuorumPeer。 如果它们存在,杀死它们。

2.启动集群。

在node-a上,发出start-hbase.sh命令。 您的输出将类似于以下内容。

$ bin/start-hbase.sh
node-c.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-c.example.com.out
node-a.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-a.example.com.out
node-b.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-b.example.com.out
starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master-node-a.example.com.out
node-c.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-regionserver-node-c.example.com.out
node-b.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-regionserver-node-b.example.com.out
node-b.example.com: starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master-nodeb.example.com.out

ZooKeeper首先启动,然后是主机,然后是RegionServers,最后是备份主机。

3.验证进程正在运行。

在集群的每个节点上,运行jps命令并验证每个服务器上是否正在运行正确的进程。 如果将其他Java进程用于其他目的,则可能还会看到它们在服务器上运行。

node-a jps 输出

$ jps
20355 Jps
20071 HQuorumPeer
20137 HMaster

node-b jps 输出

$ jps
15930 HRegionServer
16194 Jps
15838 HQuorumPeer
16010 HMaster

node-c jps 输出

$ jps
13901 Jps
13639 HQuorumPeer
13737 HRegionServer

ZooKeeper进程名称

HQuorumPeer进程是由HBase控制和启动的ZooKeeper实例。

如果以这种方式使用ZooKeeper,则每个群集节点仅限于一个实例,并且仅适用于测试。

如果ZooKeeper在HBase外部运行,则该过程称为QuorumPeer。

有关ZooKeeper配置的更多信息,包括将外部ZooKeeper实例与HBase一起使用,请参阅zookeeper部分。

4.浏览到Web UI。

Web UI端口更改
在HBase高于0.98.x的版本中,HBase Web UI使用的HTTP端口从Master的60010和每个RegionServer的60030变为Master的16010和RegionServer的16030。

如果一切设置正确,则应该能够连接到主服务器 http://node-a.example.com:16010/ 或辅助主服务器的UI,位于 http://node-b.example.com:16010/ 使用网络浏览器。 如果您可以通过localhost 连接,但不能从其他主机连接,请检查防火墙规则。 您可以在其IP地址的端口16030上单击每个RegionServer的Web UI,也可以单击主服务器的Web UI中的链接。

5.测试当节点或服务消失时会发生什么。

使用已配置的三节点群集,事情将不会非常灵活。 您仍然可以通过终止关联的进程并查看日志来测试主要Master或RegionServer的行为。

1.7.接下来去哪里

下一章“配置configuration”提供了有关不同HBase运行模式,运行HBase的系统要求以及用于设置分布式HBase群集的关键配置区域的更多信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值