HBase集群+Zookeeper集群安装

来源:互联网 发布:mysql insert into 慢 编辑:程序博客网 时间:2024/05/11 13:06

Zookeeper版本:3.4.6
HBase版本:0.94.20
一、zookeeper安装
在安装好hadoop的前提下,首先安装zookeeper,注意下载的zookeeper版本需要与hadoop版本相对应(同样的,只需要在namenode端进行配置,配置好后发给datanode端即可):
1)下载zookeeper-3.4.6,解压到/home/hadoop/下。
2)在zookeeper-3.4.6/conf目录下,拷贝zoo_sample.cfg为zoo.cfg,并修改zoo.cfg文件,如下:

# The number of milliseconds of each tick tickTime=2000# The number of ticks that the initial# synchronization phase can take initLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgement syncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes. dataDir=/usr/local/zookeeper-3.4.6/data# the port at which the clients will connect clientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the# administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1 server.1=slave1:2888:3888 server.2=slave2:2888:3888 server.3=slave3:2888:3888

4)用scp命令将namenode节点的的/home/hadoop/zookeeper-3.4.6拷贝到其余所有主机的/home/hadoop/目录下。
5)参照zoo.cfg中的配置,在各主机配置的dataDir下myid文件中写入各自的编号。如:slave1端将myid文件写入1, slave2,端将myid文件写入2, slave3端将myid文件写入3。
(集群模式下需要配置 myid,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server)
6)到此,zookeeper基本配置完成,最后,在所有节点上的zookeeper-3.3.3/bin下执行./zkServer.sh start,分别启动。
分别启动的过程中,会报异常,全部启动之后,自然就不会出异常了。
二、hbase安装
1)下载hbase-0.94.20版本,解压到namenode节点的/home/hadoop/目录下,同样需要注意对应的版本问题。
2)系统所有配置项的默认设置在hbase-default.xml中查看,我们只需要修改hbase-site.xml:

<configuration><property>    <name>hbase.zookeeper.quorum</name>    <value>master</value> </property> <property>    <name>hbase.zookeeper.property.dataDir</name>    <value>/usr/local/zookeeper-3.4.6/data</value> </property> <property>    <name>hbase.zookeeper.property.clientPort</name>    <value>2181</value> </property> <property>    <name>hbase.rootdir</name>    <value>hdfs://master:9000/hbase</value> </property> <property>    <name>hbase.cluster.distributed</name>    <value>true</value> </property> <property>    <name>hbase.master</name>    <value>master:60000</value> </property>   <property>        <name>mapred.job.tracker</name>        <value>master:9001</value> </property>  <property>        <name>dfs.permissions</name>        <value>false</value> </property>  </configuration>

hbase.rootdir:hdfs://master:9000这部分必须和hadoop/conf/core-site.xml中的fs.default.name保持一致;
hbase.zookeeper.property.clientPort,是由于我在zoo.cfg中修改了默认的clientPort,所以在这里要设置为2181
3)修改hbase-env.sh

export HBASE_LOG_export JAVA_HOME=/usr/lib/jvm/jdk1.8.0 export HBASE_HEAPSIZE=4096 export HBASE_LOG_DIR=/usr/local/hbase-0.94.20/logs export HBASE_MANAGES_ZK=true

4)把hadoop/config/hdfs-site.xml文件拷贝至hbase的conf文件夹下。
5)zookeeper/conf/zoo.cfg拷贝至hbase的conf文件夹下。
6)在hbase/conf/regionservers中添加hadoop/config/conf/slaves中所有的datanode节点。
7)删除/hbase-0.94.20/lib/hadoop-core-0.20.jar,拷贝/hadoop-1.2.1/hadoop-1.2.1-core.jar到/hbase-0.94.20/lib/下来。
8)最后,把配置好的hbase-0.94.20用scp命令发送到各个datanode节点的/home/hadoop目录下来。
到此,hbase配置完成:
启动Hadoop、ZooKeeper和HBase之间应该按照顺序启动和关闭:启动Hadoop—>启动ZooKeeper集群—>启动HBase—>停止HBase—>停止ZooKeeper集群—>停止Hadoop。
由于以上配置已将zookeeper关联到hbase中,故hbase启动时会先自动启动zookeeper
在namenode节点执行bin/start-hbase.sh和bin/stop-hbase.sh 脚本启动和停止HBase服务。
此时,可通过访问master:60070查看hbase集群运行情况
测试:执行bin/hbase shell
可进入hbase shell,测试:
list 列出所有表
create 建表,如 create ‘test’,’data’
put 插入数据
三、注意事项
主节点启动hbase后,子节点使用jps查看,发现并没有HRegionServer启动项,到slave查看日志发现:

2014-10-10 14:31:38,903 FATAL org.apache.hadoop.hbase.regionserver.HRegionServer: Master rejected startup because clock is out of syncorg.apache.hadoop.hbase.ClockOutOfSyncException: org.apache.hadoop.hbase.ClockOutOfSyncException: Server slave1,60020,1412922698135 has been rejected; Reported time is too far out of sync with master.  Time difference of 49943ms > max allowed of 30000ms        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)        at java.lang.reflect.Constructor.newInstance(Constructor.java:408)        at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:95)        at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:79)        at org.apache.hadoop.hbase.regionserver.HRegionServer.reportForDuty(HRegionServer.java:2114)        at org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:753)        at java.lang.Thread.run(Thread.java:745)Caused by: org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hbase.ClockOutOfSyncException: Server slave1,60020,1412922698135 has been rejected; Reported time is too far out of sync with master.  Time difference of 49943ms > max allowed of 30000ms        at org.apache.hadoop.hbase.master.ServerManager.checkClockSkew(ServerManager.java:235)        at org.apache.hadoop.hbase.master.ServerManager.regionServerStartup(ServerManager.java:169)        at org.apache.hadoop.hbase.master.HMaster.regionServerStartup(HMaster.java:1084)        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:483)        at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java:323)        at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1434)        at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:1012)        at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:87)        at com.sun.proxy.$Proxy6.regionServerStartup(Unknown Source)        at org.apache.hadoop.hbase.regionserver.HRegionServer.reportForDuty(HRegionServer.java:2112)

由上可知,是由于集群时间不一致导致的,使用
date –set “11/19/11 10:00:00” (月/日/年 时:分:秒)
将集群时间设为一致即可

0 0