HBase

16次阅读
没有评论

这篇文章主要介绍 HBase-0.98.9 如何搭建配置,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一     配置 1.1  hbase-env.sh

其它不变,export HBASE_MANAGES_ZK=false,这表示不使用 hbase 自带的 zookeeper,而使用外部的 zookeeper(我使用的是跟 hadoop 集群配置的 zookeeper)

1.2  hbase-site.xml

configuration 
 property 
  name hbase.rootdir /name 
  value hdfs://master1:8020/hbase /value 
  description The directory shared by region servers. /description 
 /property 
 property 
  name hbase.zookeeper.property.clientPort /name 
  value 2181 /value 
  description Property from ZooKeeper s config zoo.cfg. The port at which the clients will connect.
  /description 
 /property 
 property 
  name zookeeper.session.timeout /name 
  value 120000 /value 
 /property 
 property 
  name hbase.zookeeper.quorum /name 
  value master1,master2,slave1 /value 
 /property 
 property 
  name hbase.tmp.dir /name 
  value /root/hbasedata /value 
 /property 
 property 
  name hbase.cluster.distributed /name 
  value true /value 
 /property 
 /configuration

HBase-0.98.9 如何搭建配置

1.3  regionservers

master1
master2
slave1

1.4  一些配置参数的解释

hbase.zookeeper.property.clientPort:指定 zk 的连接端口

zookeeper.session.timeout:RegionServer 与 Zookeeper 间的连接超时时间。当超时时间到后,ReigonServer 会被 Zookeeper 从 RS 集群清单中移除,HMaster 收到移除通知后,会对这台 server 负责的 regions 重新 balance,让其他存活的 RegionServer 接管.

hbase.zookeeper.quorum:默认值是  localhost,列出 zookeepr ensemble 中的 servers

2  启动 / 关闭

在 master1 上执行

bin/start-hbase.sh

bin/stop-hbase.sh

3  测试

如果 web 管理页面可以打开, 说明 Hmaster 启动成功:http:master1:60010

在 master1 上执行

{HBASE_HOME}/bin/hbase shell

进入 shell 命令行,通过创建表等操作来检查不是不工作正常。

hbase(main):001:0  create  scores , grade ,  course

4  注意事项

HBase 集群需要依赖于一个 Zookeeper ensemble。HBase 集群中的所有节点以及要访问 HBase 的客户端都需要能够访问到该 Zookeeper  ensemble。HBase 自带了 Zookeeper,但为了方便其他应用程序使用 Zookeeper,最好使用单独安装的 Zookeeper ensemble。

此外,Zookeeper ensemble 一般配置为奇数个节点,并且 Hadoop 集群、Zookeeper ensemble、HBase 集群是三个互相独立的集群,并不需要部署在相同的物理节点上,他们之间是通过网络通信的。

需要注意的是,如果要禁止启动 hbase 自带的 zookeeper,那么,不仅仅需要刚才的 export HBASE_MANAGES_ZK=false 配置,还需要 hdfs-site.xml 中的 hbase.cluster.distributed 为 true,否则你在启动时会遇到 Could not start ZK at requested port of 2181  错误,这是因为 hbase 尝试启动自带的 zookeeper,而我们已经启动了自己安装的那个 zookeeper,默认都使用 2181 端口,所以出错。

还有,有时候会遇到 stop-hbase.sh 执行很长时间未结束,很可能的原因是你之前把 zookeeper 关闭了.

最后,Hbase 不需要 mapreduce,所以只要 start-dfs.sh 启动 hdfs,然后到 zookeeper 各节点上启动 zookeeper,最后再 hbase-start.sh 启动 hbase 即可.

二   安装运行遇到的错误汇总:

1. habse 启动失败,查看日志发现报错:

zookeeper 启动失败 BindException: Address already in use

原因:zk 在 hbase 启动之前就已经启动(因为我采用的是外部的 zk 集群)。解决方法是环境变量设置 export HBASE_MANAGES_ZK=false,同时确保 hbase-env.sh 里也是相同设置。

2. 再次启动发现 hmaster 还是没有起起来,查看日志发现报错:

hbase java.lang.runtimeexception hmaster aborted,查找 error 那一行是 failed on connection exception: java.net.ConnectException: master1 Connection refused

原因:master1 节点跟 hadoop 集群连接失败,怀疑是 hbase-site.xml 配置有问题。其与 hadoop 连接配置为:

name hbase.rootdir /name

value hdfs://master1:9000/hbase /value

这里配置的 9000,而集群 fs.defaultfs  本来端口是 8020:HBase-0.98.9 如何搭建配置

修改之后,重新启动 hvase,一切正常。。。

3. hbase 内置 hadoop jar 包跟已有的集群版本不一样,需要进行替换以确保稳定性和一致性。
rm -rf /usr/hbase-0.98.21-hadoop2/lib/hadoop*.jar

find /usr/hadoop/share/hadoop -name hadoop*jar | xargs -i cp {} /usr/hbase-0.98.21-hadoop2/lib

替换之后重启发现 hmaster 又启动不起来了,查看日志发现:

Caused by: java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentialsProvider

少了一个 jar 包。

解决方案:
需要将 hadoop-2.6.3/share/hadoop/tools/lib/aws-java-sdk-1.7.4.jar 拷贝到 hbase/lib 下

4. 经过上面几次折腾之后发现重启 hbase 之后,只有 hMaster 能启动,其他节点起不了。日志错误如下。手动启动 regionserver 后,发现 hmaster 又是变成阻塞状态,在 shell 控制台无法进行表操作。

2015-07-01 04:39:34,480 WARN [MASTER_META_SERVER_OPERATIONS-master:60000-0] master.AssignmentManager: Can t move 1588230740, there is no destination server available. 
2015-07-01 04:39:34,480 WARN [MASTER_META_SERVER_OPERATIONS-master:60000-0] master.AssignmentManager: Unable to determine a plan to assign {ENCODED =  1588230740, NAME =   hbase:meta,,1 , STARTKEY =   , ENDKEY =  } 
2015-07-01 04:39:35,480 WARN [MASTER_META_SERVER_OPERATIONS-master:60000-0] master.AssignmentManager: Can t move 1588230740, there is no destination server available. 
2015-07-01 04:39:35,481 WARN [MASTER_META_SERVER_OPERATIONS-master:60000-0] master.AssignmentManager: Unable to determine a plan to assign {ENCODED =  1588230740, NAME =   hbase:meta,,1 , STARTKEY =   , ENDKEY =  } 
2015-07-01 04:39:36,379 ERROR [RpcServer.handler=6,port=60000] master.HMaster: Region server server2.corp.gs.com,60020,1435743503791 reported a fatal error: 
ABORTING region server server1.corp.gs.com,60020,1435743483790: org.apache.hadoop.hbase.YouAreDeadException: Server REPORT rejected; currently processing server1.corp.gs.com,60020,1435743483790 as dead server 
 at org.apache.hadoop.hbase.master.ServerManager.checkIsDead(ServerManager.java:339) 
 at org.apache.hadoop.hbase.master.ServerManager.regionServerReport(ServerManager.java:254) 
 at org.apache.hadoop.hbase.master.HMaster.regionServerReport(HMaster.java:1343) 
 at org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos$RegionServerStatusService$2.callBlockingMethod(RegionServerStatusProtos.java:5087) 
 at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2175) 
 at org.apache.hadoop.hbase.ipc.RpcServer$Handler.run(RpcServer.java:1879) 
Cause: 
org.apache.hadoop.hbase.YouAreDeadException: org.apache.hadoop.hbase.YouAreDeadException: Server REPORT rejected; currently processing server1.corp.gs.com,60020,1435743483790 as dead server

原因:极有可能是 zk 机器的 hbase 数据错误。

解决方案:

1. 停掉所有 hbase 的进程先
2. 删掉 zk 中的 hbase 数据

hbase zkcli 或者 bin/zkCli.sh 进入 zk 命令行
ls / # 可以看到 hbase 数据存在
rmr /hbase # 删除 hbase 数据 

3. 运行 hdfs fsck /hbase 确保数据没有冲突
4. 重新启动 start-hbase.sh  
5. 如果还是只有主节点运行,则手动启动 regionserver

./hbase-daemon.sh start regionserver

6. 运行 hbase hbck   监测数据是否一致。如果有问题再运行  hbase hbck -fix (or 
-repair) 

* 运行 hbase hbck – repair 有时候会报错 connection refuse,这是因为 regionserver 又挂掉了,要确保 regionserver 是运行状态

还有问题参考下这篇文章吧 http://apache-hbase.679495.n3.nabble.com/Corrupted-META-td4072787.html。

5. 重启 hbase 之后 Hmaster 启动不了,报错 org.apache.hadoop.hbase.util.FileSystemVersionException: File system needs to be upgraded. You have version null and I want version 8。

解决方法:

log 中可以发现可能是 hbase.version 文件消失了,如果只是测试 hbase,可以直接把 hdfs 中的 /hbase 删掉。,然后重启就好了,但是以前的数据就丢失了。

bin/hadoop fs -ls /hbase

发现 /hbase/hbase.version 确实已经消失了,去 /lost+found 目录找确实能找到。

如果需要保留以前数据,可以按下面步骤:

bin/hadoop fs -mv /hbase /hbase.bk

重启 HBase,这时就生成了 /hbase/hbase.version 文件,然后:

bin/hadoop fs -cp /hbase/hbase.version /hbase.bk/
bin/hadoop fs -rmr /hbase 
bin/hadoop fs -mv /hbase.bk /hbase

这样再次重启 HBase,发现 Hbase 开始 splitting hlogs,数据得以恢复。

6. hbase 升级到 1.1.6 之后,发现 web 端口 60010 打不开了。

原来是因为 1.0 版本之后的 hbase 的 master web 默认是不运行的,所以需要自己配置默认端口。配置如下

在 hbase-site.xml 中加入一下内容即可

property
name hbase.master.info.port /name
value 60010 /value
/property

同理可以配置 regionserver web 端口

以上是“HBase-0.98.9 如何搭建配置”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!