[HBase] 从零开始部署HBase集群

本文详细介绍了如何在Ubuntu环境下搭建Hadoop及HBase集群,包括配置Hadoop、Zookeeper和HBase的具体步骤,以及解决部署过程中遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
  mvhadoop-0.20.2  /usr/local/hadoop
   
2.修改 /hadoop/conf下6个配置文件
(1) masters:
master

(2)slaves: (这里将master节点兼做slave节点)

master
slave1
slave2


(3)hadoop-env.sh:

修改
#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)
    http://master:50030 --web UI forMapReduce job tracker(s)

Nodes的个数为3才正确(有时要多次刷新才显示3)
    http://slave1:50060  --web UI for task tracker(s)

5、简单测试

#cd /usr/local/hadoop/

#bin/hadoop dfs –put conf  /input1

#bin/hadoop dfs  jar hadoop*examples.jarwordcount /input1 /output2

启动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间存在版本兼容性问题,解决办法是:

   1.删除hbase-0.90.3/lib/目录下的hadoop-core-0.20-append-r1056497.jar

   2.将hadoop/下的hadoop-0.20.2-core.jar拷贝到hbase-0.90.3/lib目录下

下否则,启动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 seconds
hbase(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值