hbase在hadoop2.2.0编译安装,及常见问题

来源:互联网 发布:mac如何查看所有应用 编辑:程序博客网 时间:2024/05/06 07:15

我的环境是:

hadoop 2.2.0 

hbase 0.94.11

有5台机器:

baby19,baby18,baby17,baby16,baby15



一. 编译;

1.下载hbase,解压

2.hbase的pom.xml里面hadoop 2.0用的是2.0.0-alpha,编辑pom.xml, 
把<hadoop.version>2.0.0-alpha</hadoop.version> 
改成:<hadoop.version>2.2.0</hadoop.version>。 

3.到hbase的安装目录下,执行如下语句: 

${MAVEN_HOME}/bin/mvn-e -Dmaven.test.skip.exec=true -Dhadoop.profile=2.0 package 



   4.然后就是等待了,大概讲下各个参数的含义: 
-e 编译时打印出详细错误信息 
-Dmaven.test.skip.exec=true 编译时跳过测试步骤 
-Dhadoop.profile=2.0 编译时使用hadoop.profile 2.0,也就是针对2.0的hadoop编译。 

5,然后就是到target路径下找hbase-0.94.1.tar.gz的包,用这个包部署。 

二. 安装部署 

1.编辑hbase-site.xml,添加如下信息

<configuration>

<property>

 <name>hbase.rootdir</name>

 <value>hdfs://baby20:8020/hbase</value>

</property>

<property>

 <name>hbase.cluster.distributed</name>

 <value>true</value>

</property>

<property>

<name>hbase.master</name>

<value>10.1.1.40:60000</value>

</property>

<property>

 <name>hbase.zookeeper.quorum</name>

 <value>baby19,baby18,baby17,baby16,baby15</value>

</property>

</configuration>

说明一下:

a.hbase.rootdir为hbase在hdfs的存储路径,其中

          hdfs://baby20:8020

要与hadoop的hdfs-site.xml中fs.defaultFS的配置一致
b.我这里没用单独的zookeeper,用的是hbase自己的,如果用已有的zookeeper,将HBASE_MANAGES_ZK设置为false

2.编辑hbase-env.xml

          export HBASE_MANAGES_ZK=true

          exportJAVA_HOME=/usr/lib/jvm/jdk1.7.0_21



3.编辑reginserver文件,把子节点都添加进去

          baby15

          baby16

          baby17

          baby18

          baby19



4.分发文件到各主机

5.运行,执行bin下的start-hbase.sh开启hbase,执行stop-hbase.sh停止hbase

打开网页为  baby20:60010,也能看到hbase界面

 

 

三. 问题解决:

1.遇到FATALorg.apache.hadoop.hbase.master.HMaster: Unhandled exception.Starting shutdown.

java.io.IOException:Exception in makeDirOnFileSystem,权限不够的问题

hbase需要hadoop首先把之前设置的hbase.rootdir路径给设置好,并且赋予hbase用户权限

我的hadoop的hdfs是用hdfs用户起来的,hbase使用hbase用户管理的,所以执行如下操作

Hdfs帐号建一个hbase目录  

hadoopfs mkdir /hbase



然后把所有者改为hbase       

hadoop fs -chown-R hbase /hbase

2.遇到版本不一致的问题:

 

java.lang.VerifyError:classorg.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$AppendRequestProtooverrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet;

 

这个的原因是 hadoop lib下的protobuf和hbase lib 下的protobuf版本不一致,把hbase的jar包替换一下就可以了,详见


http://blog.csdn.net/teddeyang/article/details/16339503

 

 


原创粉丝点击