多读书多实践,勤思考善领悟

大数据hadoop之 三十三.HBASE的伪分布与分布式安装

本文于1710天之前发表,文中内容可能已经过时。

一 伪分布式安装

1. 下载解压给权限

可以从官方下载地址下载 HBase 最新版本,推荐 stable目录下的二进制版本。我下载的是 hbase-1.1.3-bin.tar.gz 。确保你下载的版本与你现存的 Hadoop 版本兼容(兼容列表)以及支持的JDK版本(从HBase 1.0.x 已经不支持 JDK 6 了)。

兼容列表:

1
2
3
4
5
tar -zxvf hbase-1.1.3-bin.tar.gz
sudo mv hbase-1.1.3 /usr/local/hbase
cd /usr/local/
sudo chmod -R 775 hbase
sudo chown -R hadoop:hadoop: hbase

2. 修改HBASE的JDK环境变量

1
2
sudo nano /usr/local/hbase/conf/hbase-env.sh 
export JAVA_HOME=/usr/lib/jvm/

3. 修改hbase-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
hadoop@Master:/usr/local/hbase/conf$ sudo nano hbase-site.xml 

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://Master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>

4. 启动验证

  • 启动hbase
1
start-hbase.sh
  • 进入hbase shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
hadoop@Master:/usr/local/hbase/bin$ ./hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.1.3, r72bc50f5fafeb105b2139e42bbee3d61ca724989, Sat Jan 16 18:29:00 PST 2016

hbase(main):001:0>

hadoop@Master:/usr/local/hbase/bin$ jps
1601 ResourceManager
1430 SecondaryNameNode
2374 HRegionServer
1883 JobHistoryServer
3037 Jps
2253 HMaster
1246 NameNode
2190 HQuorumPeer
hadoop@Master:/usr/local/hbase/bin$

5. 尝试一下Thrift通信服务

这里我们尝试使用HBase 的 Thrift API,用Python和HBase进行简单交互。首先启动HBase的Thrift服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
hadoop@Master:/usr/local/hbase/bin$ ./hbase-daemon.sh start thrift
starting thrift, logging to /usr/local/hbase/bin/../logs/hbase-hadoop-thrift-Master.out

然后安装Python的happybase模块,HBase是对 HBase的Thrift接口的一个简单包装:

chuguaningdeMBP:~ chuguangming$ sudo pip install happybase

然后启动ipython,如果没有ipython,请通过pip安装:

Python 2.7.6 (default, Mar 22 2014, 22:59:56)
Type "copyright", "credits" or "license" for more information.

IPython 3.2.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.

In [1]: import happybase

In [2]: connection = happybase.Connection('localhost')

In [3]: connection.tables()
Out[3]: []

In [4]: families = {'basic':dict(max_versions=3),'detail':dict(max_versions=1000),'comment':dict(max_versions=1000),'answer':dict(max_versions=1000),'follower':dict(max_versions=1000)}

In [5]: connection.create_table('question',families)

In [6]: connection.tables()
Out[6]: ['question']

In [7]:

二 分布式安装

1. 软件环境

OS:Linux Master 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Java:java version “1.8.0_65”
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

Hadoop:Hadoop 2.6.0

Hbase:hbase-1.1.3

2. 集群部署机器:

IP HostName Master RegionServer
192.168.1.80 Master yes no
192.168.1.82 Slave1 no yes
192.168.1.84 Slave2 no yes

3. 准备:

假设你已经安装部署好了 Hadoop 集群和 Java,可以参考以前的部署 文章。

4. Master的安装:

1)基本安装

1
2
3
4
5
tar -zxvf hbase-1.0.0-bin.tar.gz
sudo mv hbase-1.0.0 /usr/local/hbase
cd /usr/local/
sudo chmod -R 775 hbase
sudo chown -R hadoop:hadoop: hbase

2)修改$JAVA_HOME为jdk安装目录

1
2
usr/local/hbase/conf$ sudo nano hbase-env.sh 
export JAVA_HOME=/usr/lib/jvm/

3)修改hbase-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/usr/local/hbase/conf/hbase-site.xml 

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://Master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>Master,Slave1,Slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop</value>
</property>
</configuration>

其中第一个属性指定本机的hbase的存储目录,必须与Hadoop集群的core-site.xml文件配置保持一致;第二个属性指定hbase的运行模式,true代表全分布模式;第三个属性指定 Zookeeper 管理的机器,一般为奇数个;第四个属性是数据存放的路径。这里我使用的默认的 HBase 自带的 Zookeeper。

4)配置regionservers

1
2
Slave1
Slave2

regionservers文件列出了所有运行hbase的机器(即HRegionServer)。此文件的配置和Hadoop中的slaves文件十分相似,每行指定一台机器的主机名。当HBase启动的时候,会将此文件中列出的所有机器启动。关闭时亦如此。

5)修改 ulimit 限制

HBase 会在同一时间打开大量的文件句柄和进程,超过 Linux 的默认限制,导致可能会出现错误。
所以编辑/etc/security/limits.conf文件,添加以下两行,提高能打开的句柄数量和进程数量。注意将hadoop改成你运行 HBase 的用户名。

1
2
hadoop  -       nofile  65535
hadoop - nproc 32000

还需要在 /etc/pam.d/common-session 加上这一行:

1
session required pam_limits.so

否则在/etc/security/limits.conf上的配置不会生效。

最后还要注销(logout或者exit)后再登录,这些配置才能生效!使用ulimit -n -u命令查看最大文件和进程数量是否改变了。记得在每台安装 HBase 的机器上运行哦。

5. Slave上面的操作

基本上把以上步骤重复一下就可以了.

在 Master 节点上执行:

1
2
3
4
cd /usr/local
hadoop@hadoopmaster:/usr/local$ sudo tar cvfz ~/hbase.tar.gz ./hbase
scp ~/hbase.tar.gz hadoop@hadoopslave1:/home/hadoop/
scp ~/hbase.tar.gz hadoop@hadoopslave2:/home/hadoop/

在Slave节点上执行:

1
2
3
hadoop@hadoopslave1:/usr/local$ sudo tar xvfz ~/hbase.tar.gz -C /usr/local/
hadoop@hadoopslave1:/usr/local$ sudo chown -R hadoop:hadoop /usr/local/hbase/
hadoop@hadoopslave1:/usr/local$ sudo chmod -R 775 /usr/local/hbase/

6. 运行 HBase

在master上运行

1
2
3
4
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
start-hbase.sh

7. 验证 HBase 成功安装

在 master 运行 jps 应该会有HMaster进程。在各个 slave 上运行jps 应该会有HQuorumPeer,HRegionServer两个进程。
在浏览器中输入 http://Master:16010 可以看到 HBase Web UI 。

三 安装疑难杂症

错误表现-SLF4J: Class path contains multiple SLF4J bindings.

错误表现:

1
2
3
4
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

含义为:发生jar包冲突了
分别为:

1
2
file:/usr/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class
file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class

移除其中一个jar包即可

解决方案:

使用下面命令

1
/usr/hbase/lib rm slf4j-log4j12-1.6.4.jar