前两步实现了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 Version | JDK 6 | JDK 7 | JDK 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 |
0.96 |
yes |
yes |
N/A |
0.94 |
yes |
yes |
N/A |
"S" = supported
"X" = not supported
"NT" = Not tested
HBase-0.92.x | HBase-0.94.x | HBase-0.96.x | HBase-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。集群的结构如下:
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
zkServer.sh start
然后每个节点上执行下面命令,查看节点是那种角色:
zkServer.sh status
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>
然后修改/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 Jpsslave节点上信息如下:
14844 QuorumPeerMain 14949 Jps 20587 HRegionServer 13927 NodeManager1 3801 DataNode
至此Hbase的安装完成。主节点上键入下面命令进入Hbase的shell:
hbase shell
hbase(main):001:0>
如果要关闭Hbase使用下面命令:
stop-hbase.sh