您的位置:首页 > 运维架构

hadoop集群搭建之三(Hbase、zookeeper安装)

2015-03-30 23:40 633 查看
前两步实现了Hadoop集群的搭建,但是对于数据的存储要用数据库。一般小规模的网站上,我们会用MySQL,在WEB应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。但是MySQL在处理大型的并发性能上远远不行。这里我们会考虑用oracle和Hbase,对于大量的统计业务就使用Oracle,而对于数据挖掘搜索引擎使用Hbase。这里我主要做数据挖掘,机器学习的研究,所以我使用Hbase。
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式.
Hbase是bigtable的开源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

HBase中的表一般有这样的特点:
1 大:一个表可以有上亿行,上百万列
2 面向列:面向列(族)的存储和权限控制,列(族)独立检索。
3 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
安装参考文章:http://hbase.apache.org/book.html#architecture

安装前需要注意Hbase支持的JAVA版本:

HBase VersionJDK 6JDK 7JDK 8
1.0
Not Supported
yes
Running with JDK 8 will work but is not well tested.
0.98
yes
yes
Running with JDK 8 works but is not well tested. Building with JDK 8 would require removal of thedeprecated
remove()
method of the
PoolMap
class and is under consideration. SeeHBASE-7608
for more information about JDK 8support.
0.96
yes
yes
N/A
0.94
yes
yes
N/A
hadoop支持的情况:

Hadoop version support matrix

"S" = supported

"X" = not supported

"NT" = Not tested

HBase-0.92.xHBase-0.94.xHBase-0.96.xHBase-0.98.x (Support for Hadoop 1.1+ is deprecated.)HBase-1.0.x (Hadoop 1.x is NOT supported)
Hadoop-0.20.205
S
X
X
X
X
Hadoop-0.22.x
S
X
X
X
X
Hadoop-1.0.x
X
X
X
X
X
Hadoop-1.1.x
NT
S
S
NT
X
Hadoop-0.23.x
X
S
NT
X
X
Hadoop-2.0.x-alpha
X
NT
X
X
X
Hadoop-2.1.0-beta
X
NT
S
X
X
Hadoop-2.2.0
X
NT
S
S
NT
Hadoop-2.3.x
X
NT
S
S
NT
Hadoop-2.4.x
X
NT
S
S
S
Hadoop-2.5.x
X
NT
S
S
S
这里我使用单独的zookeeper。集群的结构如下:

主机名 IP地址 用途
master.hadoop 192.168.0.1 HMster、zookeeper
slave1.hadoop 192.168.0.2 regionserver、zookeeper
slave2.hadoop 192.168.0.3 regionserver、zookeeper
slave3.hadoop 192.168.0.4 regionserver、zookeeper
这里我们先安装zookeeper。zookeeper的下载地址如下:

http://www.apache.org/dyn/closer.cgi/zookeeper/

解压缩安装包,复制zookeeper到/usr/local。先修改环境变量,参考安装Hadoop的例子:

export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$ZOOKEEPER_HOME/bin


然后修改zookeeper的配置文件:

cd  zookeeper/conf
cp  zoo_sample.cfg zoo.cfg
vim zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/home/hadoop/hadoopdata/zookeeper/zookeeper-data
# the port at which the clients will connect
clientPort=2222
server.1=master.hadoop:2888:3888
server.2=slave1.hadoop:2888:3888
server.3=slave2.hadoop:2888:3888
server.4=slave3.hadoop:2888:2888
然后创建zookeeper-data文件夹:

mkdir /home/hadoop/hadoopdata/zookeeper/zookeeper-data


再把master.hadoop上的zookeeper目录同步到slave1.hadoop、slave2.hadoop、slave3.hadoop。
同样在部署zookeeper的节点上创建/home/hadoop/hadoopdata/zookeeper/zookeeper-data目录,然后在此新建一个myid文件里写入zoo.cfg文件对应的server号码,例如:master.hadoop写1,slave1.hadoop写2,依次类推,配置文件处写了多少就写多少。
下面准备启动zookeeper。(在hadoop已经启动的条件下,确保集群内各个节点上的防火墙关闭)
在每个部署zookeeper节点的机器上执行如下命令
zkServer.sh start


然后每个节点上执行下面命令,查看节点是那种角色:

zkServer.sh status


要停止zookeeper,每个节点上执行下面命令:

zkServer.sh stop


Hbase安装包的下载地址如下,这里建议下载stable版本的安装包,本次安装的时Hbase1.0

http://www.apache.org/dyn/closer.cgi/hbase/
在master上解压缩文件hbase-1.0.0-bin.tar.gz,进入目录conf,编辑文件hbase-env.sh,添加下面内容:

# The java implementation to use.  Java 1.7+ required.
export JAVA_HOME=/usr/local/jdk1.7.0_21/

# Extra Java CLASSPATH elements.  Optional.
export HBASE_CLASSPATH=/usr/local/hadoop/etc/hadoop
再编辑文件hbase-site.xml,添加下面内容,这里需要注意的是hbase.rootdir的端口号一定要和hadoop的配置文件core-site.xml中的fs.default.name下的端口号保持一致:

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master.hadoop:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master.hadoop,slave1.hadoop,slave2.hadoop,slave3.hadoop</value>
</property>
<property>
<name>hbase.zookeeper.sission.timeout</name>
<value>60000</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2222</value>
</property>
<property>
<name>hbase.master</name>
<value>master.hadoop:60000</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
<property>
<name>hbase.regionserver.info.port</name>
<value>60030</value>
</property>
<property>
<name>hbase.master.maxclockskew</name>
<value>6000000000</value>
</property>
</configuration>


这里需要注意的是最后一个参数,每次启动Hbase的时候发现,有一个slave没有起来,查看日志得知这个节点的时钟与master节点的时钟相比相差很多,超过阈值,所以这里设置这个参数增大这个阈值。其实也可以试试其他集群同步时间的方法,这里用了比较莽夫的方法~~~~

然后修改/etc/profie文件

export HADOOP_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin


至此主节点上的配置全部完成,然后将配置好的hbase文件利用scp拷贝到各个slave的/usr/local/目录下,再修改环境变量即可。然后在主节点上启动Hbase,利用下面的命令:

start-hbase.sh
这里需要注意的一点时启动Hbase之前要确定Hadoop一定启动了,关闭的时候,我们先关闭Hbase再关闭Hadoop。

启动Hbase后,主节点终端键入jps可以看到下面的现象:

15279 ResourceManager
24690 SecondaryNameNode
20497 QuorumPeerMain
14948 NameNode
20587 HMaster
20914 Jps
slave节点上信息如下:

14844 QuorumPeerMain
14949 Jps
20587 HRegionServer
13927 NodeManager1
3801 DataNode



至此Hbase的安装完成。主节点上键入下面命令进入Hbase的shell:

hbase shell
hbase(main):001:0>


如果要关闭Hbase使用下面命令:

stop-hbase.sh


至此hadoop、zookeeper、Hbase安装完毕,注意启动的时候顺序是hadoop->zookeeper->hbase,关闭的时候是hbase->zookeeper->hadoop。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: