Hbase最新官方文档中文翻译与注解1-10|hbase简介与配置信息等
Posted 涤生手记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hbase最新官方文档中文翻译与注解1-10|hbase简介与配置信息等相关的知识,希望对你有一定的参考价值。
注意:翻译的Hbase官方手册,文中黑色加粗的是官方文档中提醒用户应该注意的地方。红色加粗是作者个人经验总结分享,非官方文档里的内容。
一.前言
1.简介
快速入门将使您在 HBase 的单节点独立实例上启动并运行。
2. 快速入门 - 独立 HBase
本节介绍单节点独立 HBase 的设置。一个独立的实例包含所有 HBase 守护进程——Master、RegionServers 和 ZooKeeper——在一个持久化到本地文件系统的 JVM 中运行。这是我们最基本的部署配置文件。我们将向您展示如何使用hbase shell
CLI在 HBase 中创建表、向表中插入行、对表执行放置和扫描操作、启用或禁用表以及启动和停止 HBase。
除了下载 HBase 外,此过程应该不到 10 分钟
2.1. JDK 版本要求
HBase 要求安装 JDK。有关支持的 JDK 版本的信息,请参阅Java。
2.2. HBase 入门
-
从此Apache 下载镜像列表中选择一个下载站点。单击建议的顶部链接。这将带您到HBase Releases的镜像。单击名为stable的文件夹,然后将以.tar.gz结尾的二进制文件下载到本地文件系统。暂时不要下载以src.tar.gz结尾的文件。
-
解压下载的文件,并切换到新创建的目录。
$ tar xzvf hbase-3.0.0-alpha-2-SNAPSHOT-bin.tar.gz $ cd hbase-3.0.0-alpha-2-SNAPSHOT/
-
您必须
JAVA_HOME
在启动 HBase 之前设置环境变量。为了更容易,HBase 允许您在conf/hbase-env.sh文件中设置它。您必须找到机器上安装 Java 的位置,找到它的一种方法是使用whereis java命令。获得位置后,编辑conf/hbase-env.sh文件并取消注释以#export JAVA_HOME=开头的行,然后将其设置为 Java 安装路径。从设置了JAVA_HOME 的hbase-env.sh中提取的示例# 这里设置环境变量。 # 要使用的 java 实现。 导出 JAVA_HOME=/usr/jdk64/jdk1.8.0_112
-
bin/ start-hbase.sh脚本是作为启动HBase的一种便捷方式。发出命令,如果一切顺利,标准输出会记录一条消息,表明 HBase 已成功启动。您可以使用该
jps
命令来验证您是否有一个名为 的正在运行的进程HMaster
。在独立模式下,HBase 在这个单个 JVM 中运行所有守护进程,即 HMaster、单个 HRegionServer 和 ZooKeeper 守护进程。转到http://localhost:16010查看 HBase Web UI。
-
连接到 HBase。
使用
hbase shell
位于HBase 安装的bin/目录中的命令连接到正在运行的 HBase 实例。在本示例中,省略了启动 HBase Shell 时打印的一些用法和版本信息。HBase Shell 提示以>
字符结尾。$ ./bin/hbase shell hbase(main):001:0>
-
显示 HBase Shell 帮助文本。
键入
help
并按 Enter键,以显示 HBase Shell 的一些基本用法信息,以及几个示例命令。请注意,表名、行、列都必须用引号引起来。 -
通过Hbase Shell创建一个表。
使用该
create
命令创建一个新表。您必须指定表名称和 ColumnFamily 名称。hbase(main):001:0> create 'test', 'cf' 0 row(s) in 0.4170 seconds => Hbase::Table - test
-
列出你的所有表
使用
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
-
将数据放入表中
要将数据放入表中,请使用该
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
在这里,我们使用put命令插入三个值,一次一个。注意put命令:第一个参数'test'是表名,第二个插入是rowkey,这里是
row1
, 第三个是列族:列名,这里是cf:a
,最后第四个是这个列对应的值为value1
。HBase 中的列由列族前缀组成,
cf
在本例中就是列族,后跟冒号:,然后是列限定符后缀,a这里就是列。组合起来就是cf:a -
一次扫描表格中的所有数据。
从 HBase 获取数据的方法之一是扫描scan。使用该
scan
命令扫描表中的数据。您可以限制扫描(通过各种限制条件,显示scan范围),这里的案例是扫描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
-
获取表中单行数据。
要一次获取一行数据,请使用该
get
命令。(get一次获取一行数据,所以就需要指定表名,rowkey名即可)hbase(main):007:0> get 'test', 'row1' COLUMN CELL cf:a timestamp=1421762485768, value=value1 1 row(s) in 0.0350 seconds
-
禁用表。
如果要删除表或更改其设置,以及在某些其他特殊情况下,您需要先使用该
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
-
删除表
要删除(删除)表,请使用该
drop
命令。(注意这里更简洁,没有drop table )hbase(main):011:0> drop 'test' 0 row(s) in 0.1370 seconds #注意删除表需先禁用 hbase(main):009:0> drop 'test' ERROR: Table test is enabled. Disable it first. For usage try 'help "drop"'
-
退出 HBase Shell。
要退出 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 的独立实例。在接下来的部分中,我们将快速概述 hbase 部署的其他模式。
2.3. 用于本地测试的伪分布式
在完成快速入门独立模式后,您可以重新配置 HBase 以在伪分布式模式下运行。伪分布式模式意味着 HBase 仍然完全运行在单个主机上,但每个 HBase 守护进程(HMaster、HRegionServer 和 ZooKeeper)作为一个单独的进程运行:在独立模式下,所有守护进程都在一个 jvm 进程/实例中运行。
默认情况下,除非您hbase.rootdir
按照快速入门中的说明配置该属性 ,否则您的数据仍存储在/tmp/ 中。在本演练中,我们将您的数据存储在 HDFS 中,假设您有可用的 HDFS。您可以跳过 HDFS 配置以继续将数据存储在本地文件系统中。
Hadoop 配置
此过程假设您已在本地系统和/或远程系统上配置 Hadoop 和 HDFS,并且它们正在运行且可用。它还假设您使用的是 Hadoop 2。Hadoop 文档中关于设置单节点集群的指南 是一个很好的起点。 |
-
如果 HBase 正在运行,请停止它。
如果您刚刚完成快速入门并且 HBase 仍在运行,请停止它。此过程将创建一个全新的目录,HBase 将在其中存储其数据,因此您之前创建的任何数据库都将丢失。
-
配置 HBase。
编辑hbase-site.xml配置。首先,添加以下属性,指示 HBase 以分布式模式运行,每个守护程序有一个 JVM 实例。
<property> <name>hbase.cluster.distributed</name> <value>true</value> </property>
接下来,
hbase.rootdir
使用hdfs:
URI 语法添加指向 HDFS 实例地址的配置。在本例中,HDFS 在 localhost 的 8020 端口上运行。<property> <name>hbase.rootdir</name> <value>hdfs://localhost:8020/hbase</value> </property>
您不需要在 HDFS 中创建目录。HBase 会为你做这件事。如果您创建目录,HBase 将尝试进行迁移,这不是您想要的。
最后,删除如下现有的有配置:
hbase.tmp.dir hbase.unsafe.stream.capability.enforce,
-
启动 HBase。
使用bin/start-hbase.sh命令启动 HBase。如果您的系统配置正确,该
jps
命令应显示正在运行的 HMaster 和 HRegionServer 进程。 -
检查 HDFS 中的 HBase 目录。
如果一切正常,HBase 在 HDFS 中创建它的目录。在上面的配置中,它存储在HDFS 上的/hbase/中。您可以使用
hadoop fs
命令(这个命令在hadoop/bin目录中)来列出该目录。$ ./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
-
创建一个表,并添加数据。
您可以使用 HBase Shell 创建一个表,给他添加数据,扫描scan它并从中获取数据,使用与上面的shell一样的命令。
-
启动和停止备份 HBase Master (HMaster) 服务器。
在同一硬件上运行多个 HMaster 实例在生产环境中没有意义,就像在生产环境中运行伪分布式集群没有意义一样。此步骤仅用于测试和学习目的。 HMaster 服务器控制 HBase 集群。您最多可以启动 9 个备份 HMaster 服务器,总共有 10 个 HMaster,包括主服务器。要启动备份 HMaster,请使用
local-master-backup.sh
. 对于您要启动的每个备份master,添加一个代表该主站端口偏移的参数。每个 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
-
启动和停止额外的 RegionServers
HRegionServer 按照 HMaster 的指示管理其 StoreFiles 中的数据。通常,集群中的每个节点运行一个 HRegionServer。在同一个系统上运行多个 HRegionServer 对伪分布式模式下的测试很有用。该
local-regionservers.sh
命令允许您运行多个 RegionServers。它的工作方式与local-master-backup.sh
命令类似,因为您提供的每个参数都代表实例的端口偏移量。每个 RegionServer 需要两个端口,默认端口为 16020 和 16030。由于 HBase 1.1.0 版本,HMaster 不使用区域服务器端口,这留下 10 个端口(16020 到 16029 和 16030 到 16039)用于 RegionServers。为了支持额外的 RegionServers,在运行脚本之前将环境变量 HBASE_RS_BASE_PORT 和 HBASE_RS_INFO_BASE_PORT 设置为适当的值local-regionservers.sh
. 例如,对于基本端口的值 16200 和 16300,可以在服务器上支持 99 个额外的 RegionServers。以下命令启动四个额外的 RegionServers,在从 16022/16032(基本端口 16020/16030 加 2)开始的顺序端口上运行。$ .bin/local-regionservers.sh start 2 3 4 5
要手动停止 RegionServer,请使用
local-regionservers.sh
带有stop
参数和要停止的服务器的偏移量的命令。.bin/local-regionservers.sh stop 3
-
停止 HBase。
您可以使用bin/stop-hbase.sh命令以与快速入门过程中相同的方式停止 HBase 。
2.4. 完全分布式生产
实际上,您需要一个完全分布式的配置来全面测试 HBase 并在实际场景中使用它。在分布式配置中,集群包含多个节点,每个节点运行一个或多个 HBase 守护进程。其中包括主备Master实例、多个ZooKeeper节点和多个RegionServer节点。
此高级快速入门将另外两个节点添加到您的集群。架构如下:
节点名称 | Master | zookeeper | regionserver |
---|---|---|---|
node-a.example.com | 是的 | 是的 | 不 |
node-b.example.com | 备份 | 是的 | 是的 |
node-c.example.com | 不 | 是的 | 是的 |
本快速入门假设每个节点都是一个虚拟机,并且它们都在同一网络上。它建立在之前的快速入门Pseudo-Distributed for Local Testing之上,假设您在该过程中配置的系统现在是node-a
. node-a
在继续之前停止 HBase 。
确保所有节点都具有通信的完全访问权限,并且没有防火墙规则可以阻止它们相互通信。如果您看到类似 的任何错误no route to host ,请检查您的防火墙。 |
node-a
需要能够登录node-b
和node-c
(以及登录到自己)才能启动守护进程。完成此操作的最简单方法是在所有主机上使用相同的用户名,并配置从node-a
其他主机到其他主机的无密码 SSH 登录。
-
在 上
node-a
,生成密钥对。运行HBase的用户身份登录后,使用以下命令生成 SSH 密钥对:
$ ssh-keygen -t rsa
如果命令成功,密钥对的位置将打印到标准输出。公钥的默认名称是id_rsa.pub。
-
创建将在其他节点上保存共享密钥的目录。
在
node-b
和 上node-c
,以 HBase 用户身份登录并在用户的主目录中创建一个.ssh/目录(如果该目录尚不存在)。如果它已经存在,请注意它可能已经包含其他键。 -
将公钥复制到其他节点。
node-a
通过使用scp
或其他一些安全手段,将公钥安全地复制到每个节点。在其他每个节点上,创建一个名为.ssh/authorized_keys 的新文件(如果尚不存在),并将id_rsa.pub文件的内容附加到它的末尾。请注意,您还需要为node-a
自己执行此操作。$ cat id_rsa.pub >> ~/.ssh/authorized_keys
-
测试无密码登录。
如果您正确执行了该过程,则在您
node-a
使用相同的用户名从其他节点通过SSH 连接时,不应提示您输入密码。 -
由于
node-b
将运行一个备份 Master,重复上面的过程,替换node-b
你看到的所有地方node-a
。确保不要覆盖现有的.ssh/authorized_keys文件,注意使用的是追加>>运算符而不是覆盖>运算符,将新密钥追加到现有文件上。
node-a
node-a
将运行您的主要 master 和 ZooKeeper 进程,但不会运行 RegionServers。停止 RegionServer 从 开始node-a
。
-
编辑conf/regionservers并删除包含
localhost
. 添加node-b和node-c的主机名或IP地址行。即使您确实想在节点a上运行RegionServer,您也应该通过其他服务器用于与之通信的主机名来引用它。在本例中,它是node-a.example.com。这使您能够将配置分发到集群的每个节点,以避免主机名冲突。保存文件。
-
将 HBase 配置为
node-b
用作备份Master节点在conf/ 中创建一个名为backup-masters的新文件,并在其中添加一个新行,主机名为
node-b
. 在本演示中,主机名是node-b.example.com
. -
配置 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>
-
在配置中将node-a引用为localhost的任何地方,都需要将引用改为指向其他节点将使用的主机名。在本示例中,主机名是node-a.example.com。
node-b
和node-c
node-b
将运行一个备份Master和一个 ZooKeeper 实例。
-
下载并解压 HBase。
下载 HBase 并将其解压到
node-b
,就像您在独立和伪分布式快速入门中所做的一样。 -
将配置文件从
node-a复制到node-b和
node-c同名目录下
集群的每个节点都需要具有相同的配置信息。将node-a的conf /目录下文件复制到
node-b
和node-c的/conf目录下
-
确保 HBase 未在任何节点上运行。
如果您在之前的测试中忘记停止 HBase,则会出现错误。使用
jps
命令检查 HBase 是否正在您的任何节点上运行,可以查看HMaster
,HRegionServer
和HQuorumPeer这些进程是否存在
。如果它们存在,就杀死它们。 -
启动集群。
在 上
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 首先启动,然后是 master,然后是 RegionServers,最后是备份 master。
-
验证进程是否正在运行。
在集群的每个节点上,运行
jps
命令并验证每个服务器上运行的进程是否正确。如果有其他 Java 进程用于其他目的,您可能还会看到服务器上运行的其他 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部分。 -
浏览到 Web UI。
Web UI 端口更改在0.98.x以上的HBase中,HBase Web UI使用的HTTP端口从Master的60010和每个RegionServer的60030变为Master的16010和RegionServer的16030。
如果一切设置正确,您应该能够 使用 Web 浏览器连接到 Master
http://node-a.example.com:16010/
或辅助Master 的 UIhttp://node-b.example.com:16010/
。如果您可以通过localhost
但不能从其他主机连接,请检查您的防火墙规则。您可以在其 IP 地址的端口 16030 处查看每个 RegionServers 的 Web UI,或者通过单击它们在 Master 的 Web UI 中的链接。 -
测试当节点或服务消失时会发生什么。
使用您配置的三个节点集群,测试不会非常有弹性(因为三个节点可以测试的范围有限,3个以上节点测试的变量更多)。但您仍然可以通过杀死相关进程并查看其日志来测试主 Master 或 RegionServer 的行为。
2.5. 下一步去哪里
下一章,配置,提供有关不同 HBase 运行模式、运行 HBase 的系统要求以及设置分布式 HBase 集群的关键配置区域的更多信息。
二.Apache HBase 配置
3. 配置文件
Apache HBase 使用与 Apache Hadoop 相同的配置系统。所有配置文件都位于conf/目录中,需要为集群上的每个节点保持同步。
backup-masters
默认情况下不存在。一个纯文本文件,其中列出了 Master 应该在其上启动备份 Master 进程的主机,每行一个主机。
hadoop-metrics2-hbase.properties
用于连接HBase Hadoop的Metrics2框架。有关 Metrics2 的更多信息,请参阅Hadoop Wiki 条目。默认情况下仅包含注释掉的示例。
hbase-env.cmd和hbase-env.sh
适用于 Windows 和 Linux / Unix 环境的脚本,用于设置 HBase 的工作环境,包括 Java 的位置、Java 选项和其他环境变量。该文件包含许多注释掉的示例以提供指导。
hbase-policy.xml
RPC 服务器用于对客户端请求做出授权决策的默认策略配置文件。仅在启用HBase安全性时使用。
hbase-site.xml
主要的 HBase 配置文件。此文件指定覆盖 HBase 的默认配置的配置选项。您可以在hbase-common/src/main/resources/hbase-default.xml查看(但不要编辑)默认配置文件。您还可以在 HBase Web UI的HBase 配置选项卡中查看集群的整个有效配置(默认和覆盖)。
log4j2.xml 以上是关于Hbase最新官方文档中文翻译与注解1-10|hbase简介与配置信息等的主要内容,如果未能解决你的问题,请参考以下文章 20191226 Spring官方文档(Core 1.10)