关闭

在hdfs2.2.0上部署hbase

标签: hbasehdfs2.0分布式存储数据库
2586人阅读 评论(0) 收藏 举报
分类:

文档说明

本文是在hadoop2.0(hdfs2.2.0)上部署hbase0.96版本时遇到的一些问题及其相应的解决办法。文中所述操作均在ubuntu10.04系统上进行。囿于作者水平有限,文章难免有错误简陋之处,欢迎读者朋友批评指正!

1. 集群介绍

本文是在hadoop2.0上搭建hbase时遇到的一些问题,及其相应的解决办法。

hbase版本:0.96.0;hdfs版本:2.2.0。

1.1. 硬件环境

本集群共有12台机器,机器配置如下

机器名 ip 内存 硬盘 操作系统
M244 10.10.0.14 64GB 3TB HP ubuntu 10.04
M245 10.10.0.15 64GB 3TB HP ubuntu 10.04
M246 10.10.0.16 64GB 3TB HP ubuntu 10.04
M247 10.10.0.17 64GB 3TB HP ubuntu 10.04
M248 10.10.0.18 64GB 3TB HP ubuntu 10.04
M249 10.10.0.19 64GB 3TB HP ubuntu 10.04
M250 10.10.0.20 64GB 3TB HP ubuntu 10.04
M251 10.10.0.21 64GB 3TB HP ubuntu 10.04
M252 10.10.0.22 64GB 3TB HP ubuntu 10.04
M253 10.10.0.23 64GB 3TB HP ubuntu 10.04
M254 10.10.0.24 64GB 3TB HP ubuntu 10.04
M255 10.10.0.25 64GB 3TB HP ubuntu 10.04

1.2. 集群架构

在12台机器上部署角色:两个master,一主一备;12个regionserver。

选定M244、M245两台机器作为两个master节点,M244为主M245为备。然后在每台机器上启动一个regionserver。

2. Hbase部署

问题1) Hadoop2.2.0有关的jar包(hdfsmapreduceyarn

问题描述

因为hbase是以hadoop中的hdfs作为后端存储,且有一定的mapreduce任务要建立在hbase之上,因此在启动hbase之前,需要先将hadoop中的一些jar包拷贝到hbase的lib目录中。这些jar包包括三类:公共包、hdfs相关包、mapreduce相关包。因为hadoop2.0中将hadoop1.0里Mapreduce的资源管理功能分拆到yarn,yarn作为hadoop内核的一个独立组件。

公共包:

hadoop-annotations-2.2.0.jar
hadoop-auth-2.2.0.jar
hadoop-common-2.2.0.jar

Hdfs相关包:

hadoop-hdfs-2.2.0.jar

Mapreduce相关包:

mapreduce部分

hadoop-mapreduce-client-app-2.1.0-beta.jar
hadoop-mapreduce-client-common-2.1.0-beta.jar
hadoop-mapreduce-client-core-2.1.0-beta.jar
hadoop-mapreduce-client-jobclient-2.1.0-beta.jar
hadoop-mapreduce-client-shuffle-2.1.0-beta.jar

Yarn部分

hadoop-yarn-api-2.1.0-beta.jar
hadoop-yarn-client-2.1.0-beta.jar
hadoop-yarn-common-2.1.0-beta.jar
hadoop-yarn-server-common-2.1.0-beta.jar
hadoop-yarn-server-nodemanager-2.1.0-beta.jar

报错信息

hbase中使用到的hadoop相关jar包没有被替换时,可能的报错信息如下:

2013-11-14 00:04:45,723 ERROR [main] regionserver.HRegionServerCommandLine: Region server exiting

java.lang.RuntimeException: Failed construction of Regionserver: class org.apache.hadoop.hbase.regionserver.HRegionServer

        at org.apache.hadoop.hbase.regionserver.HRegionServer.constructRegionServer(HRegionServer.java:2296)

        at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.start(HRegionServerCommandLine.java:61)

        at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.run(HRegionServerCommandLine.java:85)

        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)

        at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:126)

        at org.apache.hadoop.hbase.regionserver.HRegionServer.main(HRegionServer.java:2311)

Caused by: java.lang.reflect.InvocationTargetException

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

        at org.apache.hadoop.hbase.regionserver.HRegionServer.constructRegionServer(HRegionServer.java:2294)

        ... 5 more

Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/util/PlatformName

问题2) Hbase.rootdir的配置——无法识别的Hdfs

问题描述

Hadoop1.0中的hdfs配置如下

<property>
  <name>fs.default.name</name>
  <value>hdfs://namenode:port</value>
</property>

Hadoop2.0中针对hdfsnamenode单点问题启动了HA方案,新配置如下

<property>
  <name>fs.default.name</name>
  <value>hdfs://hdfs_cluster</value>
</property>

这里hdfs_cluster代表了整个hdfs集群,该集群中可能有多个HAnamenode节点(关于hadoop2.0中的Hdfs集群namenodeHA配置详见[参考资料1]

建立在hadoop2.0上的hbase需要根据hadoop2.0里的hdfs HA方案做相应修改。解决方法(详见[参考资料2]):

  Change the distributed file system URI in hbase-site.xml to the name specified in the dfs.nameservices property in hdfs-site.xml.  The clients must also have access to hdfs-site.xml's  dfs.client.* settings to properly use HA.

实际操作时将hdfs的配置文件core-site.xmlhdfs-site.xml拷贝到hbaseconf目录下即可解决问题。

报错信息

2013-11-14 00:43:05,004 FATAL [master:SY-0244:60000] master.HMaster: Unhandled exception. Starting shutdown.

java.io.IOException: Failed on local exception: java.io.IOException: Couldn't set up IO streams; Host Details : local host is: "SY-0244/10.10.65.13"; destination host is: "hadoop-test":8020;

Caused by: java.io.IOException: Couldn't set up IO streams

Caused by: java.nio.channels.UnresolvedAddressException

2013-11-14 00:55:20,287 ERROR [main] master.HMasterCommandLine: Master exiting

java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster

Caused by: java.net.UnknownHostException: hadoop-test

问题3) 绑定端口错误——address already in use

问题描述

这个错误比较简单,服务器配置中比较常见也比较容易解决!

下面对hbase中需要配置的端口做个小结

  配置参数 默认端口 作用描述
Master hbase.master.port 60000 Master对外服务端口
hbase.master.info.port 60010 通过web界面查看master和整个集群配置信息端口
Region server hbase.regionserver.port 60020 Regionserver提供服务(读写数据)的端口
hbase.regionserver.info.port 60030 通过web界面查看regionserver信息端口
Zookeeper hbase.zookeeper.peerport 2888 这两个端口是hbase自己管理zookeeper时才需要配置。Peerportzookeeper节点之间通信端口,leaderport为选举leader的端口。
hbase.zookeeper.leaderport 3888
hbase.zookeeper.property.clientPort 2181 hbase使用外部zookeeper系统时使用。Hbasezookeeper通信的端口,该配置需要与hbase.zookeeper.quorum配合使用

报错信息

2013-11-14 00:59:14,823 ERROR [RpcServer.handler=11,port=60000] master.HMaster: Region server SY-0244,60020,13843 61978263 reported a fatal error:

ABORTING region server SY-0263,60020,1384361978263: Unhandled: Unknown out of band call #-2147483647

Cause:

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.RpcServerException): Unknown out of band call #-2147483647

2013-11-14 00:59:16,146 ERROR [RpcServer.handler=30,port=60000] master.HMaster: Region server SY-0244,60020,13843 61954798 reported a fatal error:

ABORTING region server SY-0244,60020,1384361954798: Unhandled: Port in use: 0.0.0.0:8030

Cause:

java.net.BindException: Port in use: 0.0.0.0:8030

Caused by: java.net.BindException: Address already in use

3. Thrift server启动

启动好hbase集群后,在每台机器上启动hbasethrift server服务。由于hbase本身没有提供多个thrift server之间的高可靠配置,因此我们通过zookeeper来保证。每个thrift serverzookeeper注册,zookeeper保存一个现有存活的hbase thrift server列表,使用hbase的服务通过zookeeper查询到该列表,然后访问hbase集群。

4. 参考资料

[参考资料1] Hadoop2.0中hdfs的namenode高可靠配置(HA配置)参考http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-High-Availability-Guide/cdh4hag_topic_2_3.html

[参考资料2] 如何使得hbase适应hadoop2.0里hdfs的HA方案http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-High-Availability-Guide/cdh4hag_topic_2_6.html


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5950次
    • 积分:107
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类