当完成hdfs、zookeeper的安装配置后,现在进入到hbase的安装和配置环节。这样的做的目的之一是要把海量的数据存入到hbase数据库中。
JDK版本的要求
hbase对JDK版本是有要求的,不是JDK版本越高越好,根据我走过的坑,目前最好的JDK版本是JDK 8。
hbase下载
从此 Apache 下载镜像列表中选择一个下载站点。 单击建议的顶部链接。 这将带您进入HBase版本的镜像。 单击名为 stable 的文件夹,然后将以 .tar.gz 结尾的二进制文件下载到本地文件系统。 暂时不要下载以 src 结尾的文件.tar.gz。
解压缩下载的文件,并切换到新创建的目录。
环境变量设置
在启动 HBase 之前,必须设置环境变量。 为了简化此操作,HBase 允许您在 conf/hbase-env.sh 文件中设置它。您必须找到 Java 所在的位置 安装在您的计算机上,找到它的一种方法是使用 Whereis Java 命令。一旦你有了位置, 编辑 conf/hbase-env.sh 文件并取消注释以 #export JAVA_HOME= 开头的行,然后将其设置为 Java 安装路径。JAVA_HOME
设置JAVA_HOME的 hbase-env.sh 中提取的示例
# Set environment variables here.
# The java implementation to use.
export JAVA_HOME=/usr/jdk64/jdk1.8.0_112
伪分布配置
配置 HBase
编辑 hbase 站点.xml配置。 首先,添加以下属性,该属性指示 HBase 在分布式模式下运行,每个守护程序一个 JVM 实例。
<property><name>hbase.cluster.distributed</name><value>true</value></property>
接下来,使用 URI 语法为 添加 的配置,指向 HDFS 实例的地址。 在此示例中,HDFS 在端口 8020 的本地主机上运行。hbase.rootdirhdfs:
<property><name>hbase.rootdir</name><value>hdfs://localhost:8020/hbase</value></property>
您不需要在 HDFS 中创建目录。 HBase将为您执行此操作。如果创建目录,HBase 将尝试执行迁移,这不是您想要的。
最后,删除 和 的现有配置 ,hbase.tmp.dirhbase.unsafe.stream.capability.enforce
启动 HBase
使用 bin/start-hbase.sh 命令启动 HBase。 如果系统配置正确,则该命令应显示正在运行的 HMaster 和 HRegionServer 进程。jps
检查 HDFS 中的 HBase 目录
如果一切正常,HBase在HDFS中创建其目录。 在上面的配置中,它存储在 HDFS 上的 /hbase/ 中。 您可以使用 Hadoop 的 bin/ 目录中的命令列出此目录。hadoop fs
$ ./bin/hadoop fs -ls /hbase
Found 7 items
drwxr-xr-x - hbase users 02014-06-2518:58 /hbase/.tmp
drwxr-xr-x - hbase users 02014-06-2521:49 /hbase/WALs
drwxr-xr-x - hbase users 02014-06-2518:48 /hbase/corrupt
drwxr-xr-x - hbase users 02014-06-2518:58 /hbase/data
-rw-r--r-- 3 hbase users 422014-06-2518:41 /hbase/hbase.id
-rw-r--r-- 3 hbase users 72014-06-2518:41 /hbase/hbase.version
drwxr-xr-x - hbase users 02014-06-2521:49 /hbase/oldWALs
完全分布式部署
实际上,您需要一个完全分布式的配置来全面测试 HBase 并在实际方案中使用它。 在分布式配置中,群集包含多个节点,每个节点运行一个或多个 HBase 守护程序。 其中包括主实例和备份主实例、多个 ZooKeeper 节点和多个区域服务器节点。
本高级快速入门向群集添加了另外两个节点。 体系结构将如下所示:
Table 1. Distributed Cluster Demo Architecture
节点名称 | Master | ZooKeeper | RegionServer |
node-a.example.com | 是的 | 是的 | 不 |
node-b.example.com | 备份 | 是的 | 是的 |
node-c.example.com | 不 | 是的 | 是的 |
确保所有节点都具有通信的完全访问权限,并且没有防火墙规则可以阻止它们相互通信。 如果您看到任何错误,例如 ,请检查您的防火墙。no route to host
置无密码 SSH 访问
node-a需要能够登录和(和自身)才能启动守护进程。 实现此目的的最简单方法是在所有主机上使用相同的用户名,并配置从其他主机上到其他每个主机的无密码 SSH 登录。node-bnode-cnode-a
在主机上,生成密钥对。
以将运行 HBase 的用户身份登录时,使用以下命令生成 SSH 密钥对:
$ ssh-keygen -t rsa
如果命令成功,密钥对的位置将打印到标准输出。 公钥的默认名称为 id_rsa.pub。
创建将保存其他节点上的共享密钥的目录 以 HBase 用户身份登录,并在用户的主目录中创建一个 .ssh/ 目录(如果该目录尚不存在)。 如果它已存在,请注意它可能已经包含其他密钥。node-b、node-c。
将公钥复制到其他节点
通过使用 或其他一些安全方法,将公钥安全地复制到每个节点。 在其他每个节点上,创建一个名为 .ssh/authorized_keys 的新文件(如果有) 尚不存在,并将 id_rsa.pub 文件的内容追加到该文件的末尾。
cat id_rsa.pub >> ~/.ssh/authorized_keys
测试无密码登录
如果正确执行了该过程,则当您使用相同的用户名从 SSH 连接到其他任一节点时,系统不应提示您输入密码。node-a
如果正确执行了该过程,则当您使用相同的用户名从 SSH 连接到其他任一节点时,系统不应提示您输入密码。node-a
由于将运行备份主服务器,请重复上述过程,替换您看到的所有位置。 请确保不要覆盖现有的 .ssh/authorized_keys 文件,而是使用运算符而不是运算符将新密钥连接到现有文件。
配置regionserver
编辑 conf/regionservers 并删除包含 的行。添加包含 和 的主机名或 IP 地址的行。localhostnode-bnode-c
即使您确实想在 上运行 RegionServer ,也应该通过其他服务器用于与其通信的主机名来引用它。 在这种情况下,那将是. 这使您能够将配置分发到群集的每个节点,任何主机名冲突。 保存文件。
配置备份服务器
在 conf/ 中创建一个名为 backup-master 的新文件,并向其添加一个主机名为 的新行。 在本演示中,主机名为 。node-bnode-b.example.com。
配置连接到zookeeper
在 上,编辑 conf/hbase-site.xml并添加以下属性。node-a
<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>
常用命令
hbase启动命令
使用 bin/start-hbase.sh 命令启动 HBase。 如果系统配置正确,则该命令应显示正在运行的 HMaster 和 HRegionServer 进程。jps
hbase停止命令
与提供 bin/start-hbase.sh 脚本以方便地启动所有 HBase 守护程序的方式相同,bin/stop-hbase.sh 脚本会停止它们。
$ ./bin/stop-hbase.sh
stopping hbase....................
$
连接到 HBase
使用位于 HBase 安装的 bin/ 目录中的命令连接到正在运行的 HBase 实例。 在此示例中,省略了启动 HBase 命令行管理程序时打印的一些用法和版本信息。 HBase 外壳提示符以字符结尾。hbase shell>
$ ./bin/hbase shell
hbase(main):001:0>
创建表
使用该命令创建新表。 必须指定表名和列系列名。create
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
在这里,我们插入三个值,一次一个。 第一个插入位于 ,列 ,值为 。 HBase 中的列由列系列前缀(在本例中)后跟冒号和列限定符后缀(在本例中)组成。row1cf:avalue1cfa
一次扫描表中的所有数据
从 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
获取单行数据
若要一次获取一行数据,请使用该命令。get
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
删除表
若要删除(删除)表,请使用以下命令。drop表
hbase(main):011:0> drop 'test'0 row(s) in 0.1370 seconds
退出shell
若要退出 HBase 命令行管理程序并断开与群集的连接,请使用以下命令。quit
两个大坑
hadoop版本用2.8.X,jdk用1.8.X版本。用hadoop 3.X版本会有问题,jdk用1.8.X以上的版本也会有些莫名其妙的问题。