其它不变,export HBASE_MANAGES_ZK=false,这表示不使用hbase自带的zookeeper,而使用外部的zookeeper(我使用的是跟hadoop集群配置的zookeeper)html
<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>
master1 master2 slave1
hbase.zookeeper.property.clientPort:指定zk的链接端口java
zookeeper.session.timeout:RegionServer与Zookeeper间的链接超时时间。当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions从新balance,让其余存活的RegionServer接管.web
hbase.zookeeper.quorum:默认值是 localhost,列出zookeepr ensemble中的serversshell
在master1上执行apache
bin/start-hbase.sh网络
bin/stop-hbase.shsession
若是web管理页面能够打开,说明Hmaster启动成功:http:master1:60010ide
在master1上执行oop
{HBASE_HOME}/bin/hbase shell测试
进入shell命令行,经过建立表等操做来检查不是不工做正常。
hbase(main):001:0> create 'scores','grade', 'course'
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:
修改以后,从新启动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下
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。
解决方法:
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,数据得以恢复。
原来是由于1.0版本以后的hbase的master web 默认是不运行的,因此须要本身配置默认端口。配置以下
在hbase-site.xml中加入一下内容便可
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
同理能够配置regionserver web端口