您的位置:首页 > 其它

HBase 在Ubuntu12.04下的安装 以及遇到问题解决

2014-11-14 13:51 288 查看
HBase安装
hadoop集群:
hadoop1.1.2
master192.168.1.161
slave01192.168.1.163
slave02192.168.1.164
slave03192.168.1.165
slave04192.168.1.166

hbase版本:hbase0.94

1、修改hadoophdfs-site.xml
dfs.datanode.max.xcievershbase操作时并发量很大,需要修改并发量,默认是1024
dfs.support.append可以追加数据,添加保存时需要用到。

<property>
<name>dfs.support.append</name>
<value>true</value>
</property>

<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>

2、启动hadoop,查看进程hadoop进程
3、解压hbase0.94,我解压在与hadoop同一级目录
4、配置hbase/conf/hbase-env.sh
exportJ***A_HOME=/usr/jdk1.7.25
exportHBASE_MANAGES_ZK=true#hbase要用zookeeper来进行管理
5、配置hbase/confhbase-site.xml
hbase.rootdir设置hbase在hdfs上的目录,和hadoop连接。主机名为hdfs的节点所在的主机
hbase.cluster.distributed分布式,表明是完全分布式hbase集群
hbase.master设置hbase的主机和端口
hbase.tmp.dirhbase的临时文件目录
hbase.zookeeper.quorumzookeeper的主机,建议使用单数
hbase.zookeeper.property.clientPort
设置zookeeper的端口,默认是2181
hbase.zookeeper.property.dataDir设置zookeeper的存储目录

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://nistest.master:9000/hbase</value>
<description>Thedirectorysharedbyregionservers.</description>
</property>
<property>
<name>hbase.master</name>
<value>nistest.master</value>
</property>
<property>
<name>hbase.master.port</name>
<value>60000</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/hadoop/hbase/tmp</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/hadoop/zookeeper/data</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>nistest.node1,nistest.node2,nistest.node3,nistest.node4</value>
</property></configuration>

6、配置regionservers,将regionserver添加到这个文件
Nistest.node1,nistest.node2,nistest.node3,nistest.node4
7、拷贝hadoop-core-1.2.1.jar到hbase/lib目录下,覆盖旧的版本。
替换Hbase中的jar包

需要用{HADOOP_HOME}下的hadoop-1.2.1-core.jar
替换掉{HBASE_HOME}/lib目录下的hadoop-core-0.20-append-r1056497.jar
。如果不替换jar文件Hbase启动时会因为hadoop和Hbase的客户端协议不一致而导致HMaster启动异常。报错如下:

localhost:Exceptioninthread"main"org.apache.hadoop.ipc.RPC$VersionMismatch:Protocolorg.apache.hadoop.hdfs.protocol.ClientProtocolversionmismatch.(client=42,server=41)

所以如果遇到以上错误,就通过替换jar包解决。
并把~/hadoop/conf/hdfs-site.xml拷贝至~/hbase/conf/目录下。
8、将hbase复制到各个节点
scp-rhbasehadoop@nistest.node1:/usr/local/hadoop

9、启动hbase
bin/start-hbase.sh
10、查看进程
查看各节点上进程:
jps

11、hbaseweb界面http://master:60010
如果此时不能访问那有可能是hadoop没有离开安全模式的原因,此时
 当在hbaseshell下创建表时,出现MasterNotRunningException异常,list、get等不能正常执行,通过JavaAPI同样不能创建表,究其原因在于分布式文件系统处于安全模式状态下,执行hadoopdfsadmin-safemodeleave,重新启动hbase,问题即可解决。
  Hadoop分布式文件系统为什么不自动退出安全模式呢?就让我们来看一下Hadoop安全模式吧。
  namenode在启动的时候首先进入安全模式,如果datanode丢失的block达到一定的比例(datanode通过心跳包上报的block块数达到元数据记录的block块数的0.9990,系统会自动退出安全模式),则系统会一直处于安全模式状态即只读状态。默认情况下dfs.safemode.threshold.pct的值为0.999f。关于安全模式的命令:
  hadoopdfsadmin-safemodeget(获取安全模式是否开启)
  hadoopdfsadmin-safemodeleave(强制退出)
  hadoopdfsadmin-safemodeenter(进入)
  hadoopdfsadmin-safemodewait(一直等待直到退出安全模式)

11、hbase操作:
bin/habseshell
list
create'user','f1','2','f3'

HbaseShell练习

shell连接你的Hbase

$./bin/hbaseshell

HBaseShell;enter'help<RETURN>'forlistofsupportedcommands.

Type"exit<RETURN>"toleavetheHBaseShell

Version:0.90.0,r1001068,FriSep2413:55:42PDT2010


hbase(main):001:0>

输入help然后<RETURN>可以看到一列shell命令。这里的帮助很详细,要注意的是表名,行和列需要加引号。

创建一个名为
test
的表,这个表只有一个columnfamily
cf
。可以列出所有的表来检查创建情况,然后插入些值。

hbase(main):003:0>create'test','cf'

0row(s)in1.2200seconds

hbase(main):003:0>list'table'

test

1row(s)in0.0550seconds

hbase(main):004:0>put'test','row1','cf:a','value1'

0row(s)in0.0560seconds

hbase(main):005:0>put'test','row2','cf:b','value2'

0row(s)in0.0370seconds

hbase(main):006:0>put'test','row3','cf:c','value3'

0row(s)in0.0450seconds

以上我们分别插入了3行。第一个行key为
row1
,
列为
cf:a
,值是
value1
。Hbase中的列是由
columnfamily前缀和列的名字组成的,以冒号间隔。例如这一行的列名就是
a
.

检查插入情况.

Scan这个表,操作如下

hbase(main):007:0>scan'test'

ROWCOLUMN+CELL

row1column=cf:a,timestamp=1288380727188,value=value1

row2column=cf:b,timestamp=1288380738440,value=value2

row3column=cf:c,timestamp=1288380747365,value=value3

3row(s)in0.0590seconds

Get一行,操作如下

hbase(main):008:0>get'test','row1'

COLUMNCELL

cf:atimestamp=1288380727188,value=value1

1row(s)in0.0400seconds

disable再drop
这张表,可以清除你刚刚的操作

hbase(main):012:0>disable'test'

0row(s)in1.0930seconds

hbase(main):013:0>drop'test'

0row(s)in0.0770seconds

关闭shell

hbase(main):014:0>exit

在安装中出现的问题:

1)

用./start-hbase.sh启动HBase后,执行hbaseshell

#bin/hbaseshell

HBaseShell;enter'help<RETURN>'forlistofsupportedcommands.

Version:0.20.6,rUnknown,ThuOct2819:02:04CST2010

接着创建表时候出现如下情况:hbase(main):001:0>create'test',''c

NativeException:org.apache.hadoop.hbase.MasterNotRunningException:null

jps下,发现主节点上HMaster没有启动,查理HBaselog(logs/hbase-hadoop-master-ubuntu.log)里有下面异常:

FATALorg.apache.hadoop.hbase.master.HMaster:Unhandledexception.Startingshutdown.

java.io.IOException:Calltonode1/10.64.56.76:49002failedonlocalexception:java.io.EOFException

解决:

从hadoop_home/下面cp一个hadoop/hadoop-core-0.20.203.0.jar到hbase_home/lib下。

因为Hbase建立在Hadoop之上,所以他用到了hadoop.jar,这个Jar在
lib里面。这个jar是hbase自己打了branch-0.20-append补丁的hadoop.jar.Hadoop使用的hadoop.jar和Hbase使用的必须一致。所以你需要将
Hbaselib目录下的hadoop.jar替换成Hadoop里面的那个,防止版本冲突。比方说CDH的版本没有HDFS-724而branch-0.20-append里面有,这个HDFS-724补丁修改了RPC协议。如果不替换,就会有版本冲突,继而造成严重的出错,Hadoop会看起来挂了。

再用./start-hbase.sh启动HBase后,jps下,发现主节点上HMaster还是没有启动,在HBaselog里有下面异常:

FATALorg.apache.hadoop.hbase.master.HMaster:Unhandledexception.Startingshutdown.

java.lang.NoClassDefFoundError:org/apache/commons/configuration/Configuration

解决:

在NoClassDefFoundError,缺少org/apache/commons/configuration/Configuration

果断给他加一个commons-configuration包,

从hadoop_home/lib下面cp一个hadoop/lib/commons-configuration-1.6.jar到hbase_home/lib下。

(集群上所有机子的hbase配置都需要一样)

2注意事项:

1)、先启动hadoop后,再开启hbase

2)、去掉hadoop的安全模式:hadoopdfsadmin-safemodeleave

3)、把/etc/hosts里的ubuntu的IP改为服务器当前的IP

4)、确认hbase的hbase-site.xml中

<name>hbase.rootdir</name>

<value>hdfs://node:49002/hbase</value>

与hadoop的core-site.xml中

<name>fs.default.name</name>

<value>hdfs://node:49002/hbase</value>

红字部分保持一致

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

6)、重新执行./start-hbase.sh之前,先kill掉当前的hbase和zookeeper进程



PS:遇到问题时,先查看logs,很有帮助。

HBase官方文档,全面介绍hbase安装配置:

http://www.yankay.com/wp-content/hbase/book.html#hbase_default_configurations
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐