您的位置:首页 > 其它

HBase集群+Zookeeper集群安装

2015-04-13 19:51 176 查看
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 sync
org.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” (月/日/年 时:分:秒)

将集群时间设为一致即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: