本文假设已经安装好一个三个节点的Hadoop集群,NameNode为namenode, 而DataNode为datanode1,datanode2。关于Hadoop集群的配置可以查看博客 集群分布式 Hadoop安装详细步骤,这里不再说明。
Hbase要求每台机器必须能用主机名(而不是IP)来相互访问,因此在安装之前需要配置每个主机的/etc/host文件。本系统三个节点主机名和IP对应如下:
192.168.1.19 namenode
192.168.1.7 datanode1
192.168.1.20 datanode2
另外,HBase集群要求每个节点的时间必须同步。这主要是因为HBase需要使用系统时间来产生时间戳。如果系统时间不同步的话,那么每个节点产生的时间戳差异会比较大,这就违背了时间戳设计的初衷。HBase对于节点间的时间扭曲的容忍度在秒级,如果Hbase发现节点间的时间差异已经有几十秒会拒绝启动。节点间同步的方法是建立NTP服务器,然后让所有的节点都和NTP服务器同步。
HBase集群依赖一个Zookeeper集群来进行同步和协作,其中至少需要配置一个Zookeeper节点。部署的Zookeeper节点越多,可靠性越高。Zookeeper节点的个数最好为奇数个。下面我们先在namenode,datanode1,datanode2上部署一个3个节点的Zookeeper集群。
在Apache Zookeeper发布页面(http://www.apache.org/dyn/closer.cgi/zookeeper)下载一个Zookeeper稳定版,然后在namenode解压:
$ tar xzf zookeeper-3.4.5.tar.gz
在zookeeper-3.4.5/conf文件夹下将文件zoo_sample.cfg改为zoo.cfg
$ cp zoo_sample.cfg zoo.cfg
修改zoo.cfg文件,主要是添加最后面的server主机名,其余基本不需要改动。
# 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.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/var/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=namenode:2888:3888
server.2=datanode1:2888:3888
server.3=datanode2:2888:3888
用scp将namenode节点的zookeeper-3.4.5文件夹拷贝到datanode1,datanode2,然后在每个节点的/var目录下新建一个文件夹zookeeper,在该目录下新建名为myid的文件。根据zoo.cfg中的配置,在各自的myid文件中写入各自的编号,如:namenode的myid文件中写入1,datanode1的myid文件中写入2,datanode2写入3.
在所有节点的zookeeper-3.4.5文件夹下启动Zookeeper:
$ ./zkServer.sh start
下面开始部署HBase,在Apache HBase发布页面(http://www.apache.org/dyn/closer.cgi/hbase)下载一个HBase稳定版本,解压到namenode:
$ tar xzf hbase-0.94.7.tar.gz
$ cd hbase-0.94.7
在hbase-0.94.7/conf/hbase-site.xml文件(这个是HBase的主配置文件)中配置如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://namenode:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>namenode,datanode1,datanode2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/var/zookeeper</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
修改hbase-env.sh(在/hbase-0.94.7/conf目录, 这个是Hbase的启动配置脚本,用于设置环境变量、内存设置等),增加内容如下:
export JAVA_HOME=/usr/java/jdk1.6.0_45/jre
export HADOOP_HOME=/home/hadoop/hadoop-1.2.1
export HBASE_HOME=/home/hadoop/hbase-0.94.7
在hbase-0.94.7/conf/regionservers中添加节点,内容如下:
namenode
datanode1
datanode2
在hadoop-1.0.3/lib文件下的hadoop-core-1.0.3.jar拷贝到hbase-0.94.7/lib下,(这个根据自己的hadoop版本拷贝),替换掉hadoop-core-xxx.jar文件。
最后,把配置好的hbase-0.94.7用scp发送到其他节点。
在namenode节点执行bin/start-hbase.sh脚本启动Hbase集群。
$ ./bin/start-hbase.sh
下一步就可以编程了。
内容来源:《深入理解大数据,大数据处理与编程实践》黄宜华教授主编