Hbase学习01
1.1 快速介绍
1.1.1 快速入门,单节点Hbase
本小节介绍单节点独立HBase的设置。 独立实例包含所有HBase守护进程 - Master,RegionServers和ZooKeeper 在单个JVM中运行,并保存到本地文件系统。 这是我们最基本的部署配置文件。下面会介绍如何使用hbase shell CLI(Client的简称)在HBase中创建表,向表中插入行,对表执行放置和扫描操作,启用osr禁用表以及启动和停止HBase。
除了下载HBase之外,这个过程应该不到10分钟。
在HBase 0.94.x之前,HBase预计环回IP地址为127.0.0.1。 Ubuntu和其他一些发行版默认为127.0.1.1,这会给你带来问题。 请参阅HBase为什么关心或需要/etc/hosts(https://web-beta.archive.org/web/20140104070155/http://blog.devving.com/why-does-hbase-care-about-etchosts)为细节
|
以下的/ etc / hosts文件对于HBase 0.94.x及更早版本在Ubuntu上正常工作。 如果遇到麻烦,请将其作为模板使用。在Linux-Centos中无影响。
127.0.0.1 localhost
127.0.0.1 ubuntu.ubuntu-domain ubuntu
这个问题已经在hbase-0.96.0及更高版本中得到修复。
1.1.2 JDK Version Requirements
Table. Java JDK With Hbase Requirements |
||
HBase Version |
JDK 7 |
JDK 8 |
2.0 |
yes |
|
1.3 |
yes |
yes |
1.2 |
yes |
yes |
1.1 |
yes |
Running with JDK 8 will work but is not well tested. |
Warning:HBase will neither build nor compile with Java 6
1.2 Hbase 入门
Procedure: Download, Configure, and Start HBase in Standalone Mode
1.从Apache下载镜像列表中选择一个下载站点(https://www.apache.org/dyn/closer.cgi/hbase/)。 点击建议的顶部链接。 这将带你到HBase发布的镜像。 单击名为stable的文件夹,然后将以.tar.gz结尾的二进制文件下载到本地文件系统。 现在不要下载以src.tar.gz结尾的文件。
Extract the downloaded file, and change to the newly-created directory.
$ tar xzvf hbase-3.0.0-SNAPSHOT-bin.tar.gz
$ cd hbase-3.0.0-SNAPSHOT/
2.在启动HBase之前,需要设置JAVA_HOME环境变量。 可以通过操作系统的常规机制来设置变量(将JDK加入系统环境变量),但HBase提供了一个中心机制conf/hbase-env.sh。 编辑此文件,取消注释以JAVA_HOME开头的行,并将其设置为适合您操作系统的位置。(可以指定特定位置JDK) 应将JAVA_HOME变量设置为包含可执行文件bin/java的目录。大多数现代Linux操作系统提供了一种机制,例如RHEL或CentOS上的/usr/bin/alternatives,用于在诸如Java之类的可执行文件的版本之间进行透明切换。 在这种情况下,可以将JAVA_HOME设置为包含通常为/usr的bin/java的符号链接的目录。
JAVA_HOME=/usr
3.编辑conf/hbase-site.xml,这是HBase的主要配置文件。 此时,只需要在HBase和ZooKeeper写入数据的本地文件系统上指定目录即可。 默认情况下,在下创建一个新的目录/tmp目录。许多服务器被配置为在重启时删除/tmp的内容,所以你应该在其他地方存储数据。以下配置会将HBase的数据存储在名为testuser的用户的主目录下的hbase目录中。将<property>标签粘贴到<configuration>标签下,在新的HBase安装中应该是空的。
Example 1. Example hbase-site.xml for Standalone HBase
我们不需要创建HBase数据目录。HBase会为你做这个。如果你创建了这个目录,HBase会试图做一个迁移,这不是你想要的。
|
上例中的hbase.rootdir指向本地文件系统中的一个目录。'file:/'前缀是我们如何表示本地文件系统。要在现有的HDFS实例上安装HBase,请将hbase.rootdir设置为指向您实例上的目录:例如,HDFS://namenode.example.org:8020/HBase的。有关此参数的更多信息,文档后续会专门续写有关HDFS上的独立HBase的部分。
4.提供bin/start-hbase.sh脚本作为启动HBase的便捷方式。发出命令,如果一切正常,则会将消息记录到标准输出,以显示HBase已成功启动。 您可以使用jps命令来验证是否有一个名为HMaster的正在运行的进程。 在独立模式下,HBase在单个JVM中运行所有守护进程,
即HMaster,单个HRegionServer和ZooKeeper守护程序。转到http://localhost:16010查看HBase Web UI。(此处使用Hbase自带的zookeeper,无需关心。)
Java需要安装并可用。 如果你得到一个错误,指出没有安装Java,但是
它在您的系统上,也许在非标准位置,编辑conf/hbase-env.sh文件并修改
JAVA_HOME设置指向您的系统上包含bin/java的目录
1.3 Hbase Shell
1.Connect to HBase.
使用位于HBase安装的bin/目录中的hbase-shell命令连接到正在运行的HBase实例。在本例中,省略了启动HBaseShell时打印的一些用法和版本信息。HBase-Shell提示符以>字符结尾。
$./bin/hbase shell hbase(main):001:0>
2. Display HBase Shell Help Text.
输入help并按回车,显示HBase Shell的一些基本用法信息,以及几个示例命令。请注意,表名,行,列都必须用引号字符括起来
3. Create a table.
使用create命令创建一个新表。 您必须指定表名称和ColumnFamily(列簇)名称
hbase(main):001:0> create 'test', 'cf'
0 row(s) in 0.4170 seconds
=> Hbase::Table - test
4. List Information About your Table Use the list command to
hbase(main):002:0> list 'test' TABLE
test
1 row(s) in 0.0180 seconds
=> ["test"]
5. Put data into your table.
To put data into your table, use the put command.
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
在这里,我们插入三个值,一次一个。 第一个插入位于第一行,列cf:a,值为value1。 HBase中的列由一个列族前缀组成,在本例中是cf,后跟一个冒号,然后是列限定符后缀,在这种情况下.
6. Scan the table for all data at once.
从HBase获取数据的方法之一是扫描。 使用扫描命令扫描表中的数据。 你可以限制你的扫描,但现在,所有的数据都将被提取。
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 a single row of data.
要一次获取单行数据,请使用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 a table.
如果要删除表或更改其设置以及其他一些情况,则需要先使用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
Disable the table again if you tested the enable command above:
hbase(main):010:0> disable 'test'
0 row(s) in 1.1820 seconds
9. Drop the table.
要删除(删除)表,请使用drop命令.
hbase(main):011:0> drop 'test'
0 row(s) in 0.1370 seconds
10. Exit the HBase Shell.
要退出HBase Shell并从群集断开连接,请使用quit命令。 否则HBase Shell仍然在后台运行.
Procedure: Stop HBase
1. 和bin/start-hbase.sh脚本一样,为了方便启动所有的HBase守护进程,bin/stop-hbase.sh脚本停止它们。(这里主要讲解使用方法。启停等集群命令忽略)
$ ./bin/stop-hbase.sh
stopping hbase....................
$
2. .发出命令后,进程关闭可能需要几分钟的时间。 使用jps确保HMaster和HRegionServer进程已关闭.
1.4 伪分布式安装部署示例
在完成快速启动独立模式后,您可以重新配置HBase以伪分布模式运行。伪分布模式意味着HBase仍然在单个主机上完全运行,但每个HBase守护进程(HMaster,HRegionServer和ZooKeeper)都作为独立进程运行:在独立模式下,所有守护进程都在一个jvm进程/实例中运行。默认情况下,除非按照快速入门中所述配置hbase.rootdir属性,否则您的数据仍保存在中的/tmp/。在本演练中,我们将数据存储在HDFS中,假设您有HDFS可用。您可以跳过HDFS配置继续将数据存储在本地文件系统中。
Hadoop Configuration
此过程假定您已在本地系统和/或远程系统上配置Hadoop和HDFS,
和他们正在运行和可用。它还假定您正在使用Hadoop 2.关于在Hadoop中设置单节点群集的指南(https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html)文档是一个很好的起点。.
1.如果HBase正在运行,请停止。
如果您刚完成快速入门并且HBase仍在运行,请停止它。此过程将创建一个全新的目录,HBase将存储其数据,因此您之前创建的任何数据库都将丢失。
2.配置HBase。
编辑hbase-site.xml配置。首先,添加以下指示HBase以分布式运行的属性,每个守护进程一个JVM实例。
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
XML
接下来,使用hdfs:////将hbase.rootdir从本地文件系统更改为HDFS实例的地址
URI语法。在这个例子中,HDFS在端口8020的本地主机上运行。
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:8020/hbase</value>
</property>
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找到7项
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
3.创建一个表并使用数据填充它。
您可以使用HBase Shell创建一个表,使用数据填充它,使用与shell演练中相同的过程扫描并从中获取值。
4.启动和停止备份HBase主(HMaster)服务器。
在同一硬件上运行多个HMaster实例在生产环境中没有意义,
与运行伪分布式群集的方式相同,对于生产而言没有意义。此步骤仅供测试和学习之用。
HMaster服务器控制HBase群集。您可以启动最多9台备份HMaster服务器,这使得10台HMaster计算主服务器。要启动备份HMaster,请使用local-master-backup.sh。对于要启动的每个备份主节点,请添加一个表示该主节点的端口偏移量的参数。每个HMaster使用三个端口(默认情况下为16010,16020和16030)。端口偏移量将添加到这些端口,因此使用偏移量2时,备份HMaster将使用端口16012,16022和16032.以下命令使用端口16012/16022/16032,16013 / 16023/1603启动3个备份服务器,和16015/16025/16035。
$ ./bin/local-master-backup.sh 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
您不需要在HDFS中创建目录。 HBase会为你做到这一点。如果您创建目录,HBase将尝试执行迁移,这不是您想要的。
1.启动和停止其他RegionServer
HRegionServer按照HMaster的指示管理StoreFiles中的数据。通常,一个HRegionServer在集群中的每个节点上运行。在同一个系统上运行多个HRegionServers对于伪分布式模式下的测试非常有用。 local-regionservers.sh命令允许您运行多个RegionServer。它的工作方式与local-master-backup.sh命令类似,您提供的每个参数都代表实例的端口偏移量。每个RegionServer需要两个端口,默认端口为16020和16030.但是,由于HMaster使用默认端口,因此额外的RegionServers的基本端口不是默认端口,因为HMaster自从HBase版本1.0.0以来也是RegionServer。基本端口是16200和16300。您可以在服务器上运行另外99个不是HMaster或备份HMaster的RegionServer。以下命令会启动另外四个RegionServers,它们在从16202/16302开始的顺序端口上运行(基本端口16200/16300加上2)。
$ .bin / local-regionservers.sh start 2 3 4 5
要手动停止RegionServer,请使用带有stop参数的local-regionservers.sh命令,并停止服务器的偏移量。
$ .bin / local-regionservers.sh停止3
2.停止HBase。
您可以使用bin / stop-hbase.sh命令以与快速启动过程相同的方式来停止HBase。
1.5 完全分布式安装部署示例
实际上,您需要一个完全分布式的配置来全面测试HBase并将其用于实际场景。 在分布式配置中,群集包含多个节点,每个节点运行一个或多个HBase守护进程。 这些包括主要和备份主实例(主Master和备份Master),多个ZooKeeper节点和多个RegionServer节点。
此高级快速入门将两个以上的节点添加到您的群集。 架构如下:
Node Name |
Master |
ZooKeeper |
RegionServer |
node-a.example.com |
yes |
yes |
no |
node-b.example.com |
backup |
yes |
yes |
node-c.example.com |
no |
yes |
yes |
这个快速入门假设每个节点都是虚拟机,并且它们都在同一个网络中。 它建立在以前的快速入门“伪分布式本地安装”上。
确保所有节点都具有完全的通信访问权限,并且没有适用的防火墙规则
过程:配置无密码SSH访问(示例并非正式生产环境部署模式与过程)
节点a需要能够登录到节点b和节点c(以及自己)以启动守护程序。完成此操作的最简单方法是在所有主机上使用相同的用户名,并配置从节点a到其他每个用户的无密码SSH登录。
1.在节点-a上,生成密钥对。
以使用HBase的用户身份登录时,使用以下命令生成SSH密钥对:
$ ssh-keygen -t rsa BASH
如果命令成功,密钥对的位置将打印到标准输出。公钥的默认名称是id_rsa.pub。
2.创建将保存其他节点上的共享密钥的目录。
在node-b和node-c上,以HBase用户身份登录并在用户主目录中创建一个.ssh /目录(如果尚不存在)。如果它已经存在,请注意它可能已经包含其他键。
3.将公钥复制到其他节点。
通过使用scp或其他安全手段,将公钥从节点a安全地复制到每个节点。在其他每个节点上,创建一个名为.ssh / authorized_keys的新文件(如果该文件尚不存在),并将id_rsa.pub文件的内容附加到该文件的末尾。请注意,您还需要为node-a本身执行此操作。
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
4.测试无密码登录。
如果您正确执行了此过程,则在从节点a到使用相同用户名的其他节点之间进行SSH连接时,不应提示您输入密码。
5.由于节点-b将运行备份主节点,请重复上述过程,将节点-b替换为节点-a的任何位置。 请确保不要覆盖现有的.ssh / authorized_keys文件,而是使用>>操作符而不是>运算符将新键连接到现有文件。
过程:准备节点-a
node-a将运行您的主要主服务器和ZooKeeper进程,但不会运行RegionServers。停止启动RegionServer
节点a。
1.编辑conf/regionservers并删除包含localhost的行。添加具有节点b和节点c的主机名或IP地址的行。
即使您确实想在node-a上运行RegionServer,也应该使用其他服务器用来与其通信的主机名来引用它。在这种情况下,这将是node-a.example.com。这使您可以将配置分发给群集中的每个节点,但不会造成任何主机名冲突。保存文件。
2.将HBase配置为使用节点b作为备份主节点。
在conf/called backup-masters中创建一个新文件,并用node-b的主机名添加一个新行。在这个演示中,主机名是node-b.example.com。
3.配置ZooKeeper
实际上,你应该仔细考虑你的ZooKeeper配置。您可以在zookeeper部分找到更多关于配置ZooKeeper的信息。此配置将指示HBase在群集的每个节点上启动和管理ZooKeeper实例。
在节点-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,请将引用更改为指向其他节点将用于引用节点a的主机名。在这些示例中,主机名是node- a.example.com。
过程:准备节点b和节点c
node-b将运行备份主服务器和ZooKeeper实例。
1.下载并解压HBase。
就像您为独立和伪分布式快速启动一样,将HBase下载并解压到节点b。
2.将配置文件从节点a复制到节点b和节点c。
集群中的每个节点都需要具有相同的配置信息。将conf /目录的内容复制到node-b和node-c上的conf /目录。
过程:启动并测试群集
1.确保HBase未在任何节点上运行。
如果您之前的测试忘记停止HBase,则会出现错误。使用jps命令检查HBase是否在任何节点上运行。查找进程HMaster,HRegionServer和HQuorumPeer(Hbase自带的zookeeper)。如果他们存在,杀死他们。
2.启动群集。
在节点-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进程在运行。
Example 2. node-a jps Output
Example 3. node-b jps Output
Example 4. node-c jps Output
ZooKeeper进程名称
HQuorumPeer进程是一个由HBase控制和启动的ZooKeeper实例。 如果你使用
ZooKeeper以这种方式,每个群集节点仅限于一个实例,并且仅适用于测试。
如果ZooKeeper在HBase之外运行,则该进程称为QuorumPeer。 有关ZooKeeper配置的更多信息,包括在HBase中使用外部ZooKeeper实例,请参阅zookeeper部分。
4.浏览到Web UI。
Web UI端口更改Web UI端口更改
在比0.98.x更加新的HBase版本中,HBase Web UI使用的HTTP端口从主服务器的60010和每个RegionServer的60030更改为主服务器的16010和RegionServer的16030。
如果所有设置都正确,则应该能够连接到主http:// node- a.example.com:16010/的UI或http://node-b.example.com上的辅助主设备: 16010 /使用网络浏览器。 如果可以通过本地主机连接,但不能从另一台主机连接,请检查防火墙规则。 您可以在端口16030的IP地址中查看每个RegionServers的Web UI,也可以单击主页的Web UI中的链接。
5.测试节点或服务消失时会发生什么。
使用您配置的三节点群集,事情不会很有弹性。 您仍然可以通过关闭进程并查看日志来测试主要主服务器或RegionServer的行为。