HBASE完全分布式模式的安装

hadoop环境搭建好了,也学习了在eclipse中调试wordcount了,嘿嘿,下面试试hbase集成进去,年后争取顺利转入hadoop工作

 

首先 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

[a] HBase 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.1.0.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.94.0, 对应hadoop-core-1.0.0.jar

解压hbase过程略过。

tar -zxvf /home/hadoop/hbase-0.94.0-hadoop1-bin.tar.gz

mv hbase-0.94.0-hadoop1 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.94版本压缩包解压后会有 $HBASE_HOME/src/main/resources/hbase-default.xml (不用全拷,其实就下面的就够了)拷贝里面的内容加入

<configuration>
        <property>
          <name>hbase.rootdir</name>
          <value>hdfs://192.168.40.145: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>Master.Hadoop</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环境

 

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.40.145: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,实际生产环境推荐第二种

posted @ 2014-01-14 11:46  小飞侠2014  阅读(349)  评论(0编辑  收藏  举报