Hbase集群配置信息如下:
Hadoop:hadoop-0.20.2,1 个Master节点(兼做Slave节点)3个Slave节点
Zookeeper:zookeeper-3.3.2 3个Zookeeper节点
Hbase:hbase-0.90.3 一个HMasterServer节点(兼做HRegionServer),3个HRegionServer节点
OS : ubuntu11.04
机器环境(3个VM节点):
192.168.128.131 master
192.168.128.132 slave1
192.168.128.133 slave2
并配置ssh无密码通信
一、关于虚拟机注意事项
在机器上创建第一个虚拟机后,默认的hostname 为 ubuntu,这时候拷贝两个备份,三台虚拟机的主机名均为ubuntu。
1.如果不更改hostname的话,搭建hadoop集群后执行Reduce任务时会抛出异常:
mapred.JobClient: Task Id :attempt_201111222034_0001_m_000002_0, Status : FAILED Too many fetch-failures 11/11/22 20:56:19 WARN mapred.JobClient: Error reading taskoutputConnectionrefused 2.因此要修改各虚拟机的/etc/hostname文件,将主机名分别修改成master、slave1、slave2.之后重启系统。
3.每次重启系统后,系统都会在/etc/hosts 文件中设置添加如下信息:
127.0.0.1 localhost master
::1 localhost6 master
因此每次重启系统后,我们要手动注释掉这两行信息。不然,启动hadoop后,bin/hadoop dfs –ls 命令会出现如下错误:
INFO ipc.Client: Retrying connect toserver: localhost/192.168.128.131:9000. Already tried 0time(s).
INFO ipc.Client: Retrying connect toserver: localhost/192.168.128.131:9000. Alreadytried 1 time(s)......
具体各节点/etc/hosts文件正确配置如下:
#127.0.0.1 localhost master
#::1 localhost6 master
192.168.128.131 master
192.168.128.132 slave1
192.168.128.133 slave2
二、hadoop部署
1.下载安装
#wget http://labs.renren.com/apache-mirror//hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz
#tar -zxvf hadoop-0.20.2.tar.gz
#
2.修改 /hadoop/conf下6个配置文件
(1) masters:
master
(2)slaves: (这里将master节点兼做slave节点)
master
slave1
slave2
修改
#export JAVA_HOME=/usr/local/jdk6
为:export JAVA_HOME =/usr/local/jdk6.0_13 (假设你的JAVA_HOME为/usr/local/jdk6.0_13)
(4)core-site.xml:
<?xmlversion="1.0"?>
<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>
<!-- Put site-specific property overrides in thisfile. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
(5) hdfs-site.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>
<!-- Put site-specific property overrides in thisfile. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
<!--指定 HDFS 中每个 Block 被复制的次数,起数据冗余备份的作用。在典型的生产系统中,这个数常常设置为3-->
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/hadoopfs/name</value>#hadoop的name目录路径
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/hadoopfs/data</value> #hadoop的data目录路径
</property>
</configuration>
(6) mapred-site.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>
<!-- Put site-specific property overrides in thisfile. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://master:9001/</value>
</property>
</configuration>
3、将hadoop拷贝到slave节点,并格式化namenode
#cd/hadoop/hadoop/bin
#./hadoop namenode -format
将hadoop拷贝到slave节点,且路径和master中的相同。
#cd /usr/local/hadoop
#scp -r ./* root@slave1:/usr/local/hadoop
#scp -r./* root@slave2:/usr/local/hadoop
4、启动所有hadoop守护进程
#./start-all.sh
说明:
在bin/下面有很多启动脚本,可以根据自己的需要来启动。
* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker,tasktrack
* stop-all.sh 停止所有的Hadoop
* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack
* stop-mapred.sh 停止Map/Reduce守护
* start-dfs.sh 启动Hadoop DFS守护.Namenode和Datanode
* stop-dfs.sh 停止DFS守护
[root@master bin]# jps
6801NameNode
5004Jps
6921JobTracker
6624SecondaryNameNode
出现4个这样的进程,且datanode没有error,同时访问ui正常才算成功。
ui: http://master:50070 --web UIfor HDFS name node(s)
LiveNodes 的个数为3 才正确(有时要多次刷新才显示3)
Nodes的个数为3才正确(有时要多次刷新才显示3)
5、简单测试
#cd /usr/local/hadoop/
#bin/hadoop dfs –put conf
#bin/hadoop dfs
启动wordcount的例子,查看mapreduce作业的执行情况…
root@ubuntu:/usr/local/hadoop#bin/hadoop jar hadoop-*-examples.jar wordcount /test1 /test2
11/11/22 20:42:33 INFO input.FileInputFormat: Total input paths toprocess : 14
11/11/22 20:42:33 INFO mapred.JobClient: Running job:job_201111222034_0001
11/11/22 20:42:34 INFO mapred.JobClient: map 0%reduce 0%
11/11/22 20:45:07 INFO mapred.JobClient: map 14%reduce 4%
11/11/22 20:45:43 INFO mapred.JobClient: map 21%reduce 8%
....
二、配置zookeeper
需要安装包:
zookeeper-3.3.2.tar.gz(stable版本)
安装步骤
HBase从0.20.0开始,需要首先安装ZooKeeper。
(1)在namenode节点新建usr/local/hdfs/zookeeper目录,在该目录下新建myid文件。
(2)在zookeeper-3.3.2/conf目录下,拷贝zoo_sample.cfg为zoo.cfg。在zoo.cfg中将dataDir改为/home/hdfs/zookeeper,在文件末位添加所有的主机:
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
(3)用scp命令将namenode节点的的/usr/local/hdfs/zookeeper-3.3.2和/home/hdfs/zookeeper拷贝到其余所有主机的/usr/local/hdfs目录下。
(4)参照zoo.cfg中的配置,在各主机myid文件中写入各自的编号。如:10.192.1.1入1,10.192.1.2写入2
(5)在所有节点上执行bin/zkServer.sh start,分别启动。
执行bin/zkCli.sh -server xxx.xxx.xxx.xxx:2181,检查指定服务器是否成功启动。
三、安装和配置hbase
需要软件包hbase-0.90.3
下载HBase-0.90.3版本,解压到namenode节点的/usr/local/hdfs/目录下。
配置说明
(1)系统所有配置项的默认设置在hbase-default.xml中查看,如果需要修改配置项的值,在hbase-site.xml中添加配置项。
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>#用主机名master,不要用IP
<description>The directory sharedby region servers.</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description>The mode the clusterwill be in. Possible values are
false: standalone and pseudo-distributed setups with managedZookeeper
true: fully-distributed with unmanaged Zookeeper Quorum (seehbase-env.sh)
</description>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>60000</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2222</value>
</property>
<property>
<name>hbase.master</name>
<value>master</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
<property>
<name>hbase.master.port</name>
<value>60000</value>
</property>
</configuration>
(2)在conf/hbase-env.sh中修改添加配置项:
export JAVA_HOME=/usr/java/jdk1.6.0_13
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/usr/local/hadoop/conf
并把/usr/local/hadoop/conf/hdfs-site.xml拷贝至/usr/local/hdfs/hbase-0.90.3/conf/目录下。
(3)将ZooKeeper的配置文件zoo.cfg添加到HBase所有主机的CLASSPATH中
:把zoo.cfg 拷贝到 hbase-0.90.3/conf/下
(4) hbase-0.90.3与hadoop-0.20.2间存在版本兼容性问题,解决办法是:
下否则,启动HBASE的master 时候会报错
org.apache.hadoop.ipc.RPC$VersionMismatch:Protocol org.apache.hadoop.hdfs.protocol.ClientProtocol versionmismatch. (client = 42, server = 41)
不过这样虽然保证HMaster能运行,打开web界面http://master:60010时,提示:没有hadoop-append的支持,可能会丢失数据。
(5)在conf/regionservers中添加hbase-0.90.3/conf/slaves中所有的datanode节点。
master
slave1
slave2
启动
Hadoop、ZooKeeper和HBase之间应该按照顺序启动和关闭:启动Hadoop—>启动ZooKeeper集群—>启动HBase—>停止HBase—>停止ZooKeeper集
群—>停止Hadoop。
在namenode节点执行bin/hbase-daemon.sh,启动master。执行bin/start-hbase.sh和bin/stop-hbase.sh脚本启动和停止HBase服务。
bin/hbase-daemon.sh start master
在master节点执行jps命令,会出现HMaster进程
bin/start-hbase.sh
在各节点执行jps 命令,会出现HRegionServer进程
(注:如果集群节点的系统时间和master的时间不一致的话,从节点启动不起来,报错如下:
org.apache.hadoop.hbase.ClockOutOfSyncException: org.apache.hadoop.hbase.ClockOutOfSyncException: Server ub9001,60020,1343694176934 has been rejected; Reported time is too far out of sync with master. Time difference of 410865ms > max allowed of 180000ms
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
在从节点jps也查看不到HRegionServer进程,解决办法是将时间设置的和master一致。)
测试
http://master:60010能看到hbase集群的运行情况
打开hbase shell 进行测试
#bin/hbase shell
hbase(main):003:0> create 'test', 'cf' 0 row(s) in 1.2200 secondshbase(main):003:0> list 'table' test 1 row(s) in 0.0550 seconds hbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1' 0 row(s) in 0.0560 seconds hbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2' 0 row(s) in 0.0370 seconds hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3' 0 row(s) in 0.0450 seconds