HBASE完全分布式模式的安装

首先 hadoop 和hbase版本需要对应,不然很多未知问题的  对应表如下

Table 2.1. Hadoop version support matrix

 HBase-0.92.xHBase-0.94.xHBase-0.96.0
Hadoop-0.20.205 S X X
Hadoop-0.22.x S X X
Hadoop-1.0.0-1.0.2[a] S S X
Hadoop-1.0.3+ S S S
Hadoop-1.1.x NT S S
Hadoop-0.23.x X S NT
Hadoop-2.0.x-alpha X NT X
Hadoop-2.1.0-beta X NT S
Hadoop-2.2.0 X NT S
Hadoop-2.x X NT S

[aHBase requires hadoop 1.0.3 at a minimum; there is an issue where we cannot find KerberosUtil compiling against earlier versions of Hadoop.

 

S = supported and tested,

X = not supported,

NT = it should run, but not tested enough.

1集群环境下hadoop.2.2.0已经安装成功

  确保hadoop集群正常。  hadoop dfsadmin -report 正常就ok

2配置hosts,确保涉及的主机名均可以解析为ip, 解压hbase(hadoop用户安装

配置好需要安装hbase的机器,因为要用到zoopkeeper最好确保机器个数为奇数个。 

注意事项,hbase的版本要兼容hadoop集群的hadoop-core-xxx.jar的版本。最好hbase版本里lib下的hadoop-core-xxx.jar和hadoop集群的一样。

所以这里我选择了HBase-0.96.0, 对应hadoop-core-2.2.0.jar

解压hbase过程略过。

tar -zxvf /home/hadoop/hbase-0.96.0-hadoop2-bin.tar.gz

mv hbase-0.96.0-hadoop2 hbase ##重命名为hbase 

  

①配置环境变量。

su 切换root用户

vi /etc/profile

export HBASE_HOME=/home/hadoop/hbase 

export PATH=.:$HBASE_HOME/bin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH

 

②使环境变量生效

source /etc/profile

su hadoop

③验证hbase

hbase version

 

3编辑$HBASE_HOME/conf/hbase-env.xml

 

复制代码
#Java环境

export  JAVA_HOME=/usr/java/jdk1.6.0_24

#通过hadoop的配置文件找到hadoop集群

export  HBASE_CLASSPATH=/usr/hadoop/conf    (我的hadoop放usr下面了)

#使用HBASE自带的zookeeper管理集群

export  HBASE_MANAGES_ZK=true
复制代码


 

4编辑$HBASE_HOME/conf/hbase-site.xml

在 $HBASE_HOME/conf/hbase-site.xml 添加下面内容(hbase-0.96版本压缩包解压后会有 $HBASE_HOME/src/main/resources/hbase-default.xml (不用全拷,其实就下面的就够了)拷贝里面的内容加入

复制代码
<configuration>
        <property>
          <name>hbase.rootdir</name>
          <value>hdfs://192.168.1.101:9000/hbase</value>
        </property>
        <property>
          <name>hbase.cluster.distributed</name>
          <value>true</value>
        </property>
        <property>
          <name>hbase.zookeeper.session.timeout</name>
          <value>60000</value>
        </property>
        <property>
          <name>hbase.zookeeper.property.clientPort</name>
          <value>2181</value>
        </property>
        <property>
          <name>hbase.master.port</name>
          <value>60000</value>
        </property>
        <property>
          <name>hbase.master</name>
          <value>Master.Hadoop</value>
        </property>
        <property>
          <name>hbase.tmp.dir</name>
          <value>/home/hadoop/hbase/hbase-tmp</value>
        </property>
            <property>
          <name>hbase.zookeeper.quorum</name>
          <value>192.168.1.101,192.168.1.102,192.168.1.103</value>
        </property>
<!--
<property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/hadoop/hbase/hbase-tmp/zookeeper</value> </property>
-->
</configuration>
复制代码

  

5编辑$HBASE_HOME/conf/regionservers文件

Slave2.Hadoop
Slave3.Hadoop

6把Hbase复制到其它节点

scp -r /home/hadoop/hbase/ hadoop@Slave2.Hadoop:/home/hadoop/
scp -r /home/hadoop/hbase/ hadoop@Slave3.Hadoop:/home/hadoop/
 
su 切换root
scp -r /etc/profile   root@Slave2.Hadoop:/etc
scp -r /etc/profile   root@Slave3.Hadoop:/etc
 
source /etc/profile
分别验证
hbase version
 

7启动Hbase

启动Hbase之前要确保zookeeper起来了

[hadoop@Master logs]$ jps
22484 Jps
21854 SecondaryNameNode
21938 JobTracker
21677 NameNode
22069 QuorumPeerMain

 

而且hadoop要处于非安全模式下(重要),hadoop启动后默认有30秒属于安全模式

查看命令

hadoop dfsadmin -safemode get

如果是ON   ,可以等30秒或者

hadoop dfsadmin -safemode leave

然后再启动hbase
start-hbase.sh   

复制代码
[hadoop@Master logs]$ jps
22513 Jps
21854 SecondaryNameNode
21938 JobTracker
22269 HMaster
21677 NameNode
22069 QuorumPeerMain
复制代码

 

停止hbase

stop-hbase.sh

8验证启动

验证:jps 可以查看进程  或者 用 hbase shell尝试进入 hbase环境

 

Hbase启动如下图所示:

    最好输入JPS命令测试一下你当前Hbase集群进程。如下图:

 

 

 

然后输入如下命令进入hbase的命令行管理界面:

 

1
/home/hbase/bin/hbase shell

   在hbase shell下 输入list,如下所示,列举你当前数据库的名称,如下图所示。如果你的Hbase没配置成功会抛出java错误。

 

   我们也可以通过WEB页面来管理查看HBase数据库。

  HMaster:http://192.168.1.101:60010/master.jsp

9问题总结

复制代码
2014-01-15 14:03:11,120 DEBUG org.apache.hadoop.hbase.util.FSUtils: Created version file at hdfs://192.168.40.145:9000/hbase set its version at:7
2014-01-15 14:03:11,135 WARN org.apache.hadoop.hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /hbase/hbase.version could only be replicated to 0 nodes, instead of 1
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1558)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:696)
    at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382)
复制代码

试验中,出现上面的问题,在master机器上,HMaster服务起来了一会,自动就关掉了,而http://192.168.1.101:60010/master-status   也打不开,

这个问题可能是存在于 hadoop的 namenode的VERSION不一致了,两个办法

 原因:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下的所有目录。

  第一种解决方案如下:

  1)先删除"/usr/hadoop/tmp"

rm -rf /usr/hadoop/tmp

  2)创建"/usr/hadoop/tmp"文件夹

mkdir /usr/hadoop/tmp

  3)删除"/tmp"下以"hadoop"开头文件

   rm -rf /tmp/hadoop*

  4)重新格式化hadoop

hadoop namenode -format

  5)启动hadoop

start-all.sh

  使用第一种方案,有种不好处就是原来集群上的重要数据全没有了。假如说Hadoop集群已经运行了一段时间。建议采用第二种。

  第二种方案如下:

  1)修改每个Slave的namespaceID使其与Master的namespaceID一致。

  或者

  2)修改Master的namespaceID使其与Slave的namespaceID一致。

  该"namespaceID"位于"/usr/hadoop/tmp/dfs/data/current/VERSION"文件中,前面蓝色的可能根据实际情况变化,但后面红色是不变的。

  例如:查看"Master"下的"VERSION"文件

保证namenode和datanode上这个一致就ok了

测试环境可以采用第一种直接format,实际生产环境推荐第二种

 

问题总结2:

 不知为何,Zookeeper中设置RegionServer的主机名解析不了,只能设置IP才能解析连接,不知为何。

        <property>
          <name>hbase.zookeeper.quorum</name>
          <value>192.168.1.101,192.168.1.102,192.168.1.103</value>
        </property>

 

 

参考链接:

http://www.cnblogs.com/fw5454f/p/3518713.html

 

posted @ 2014-05-05 13:07  手足无措  阅读(388)  评论(0编辑  收藏  举报