首先说明,要使用hbase是需要先安装hadoop和zookeeper的(也可以使用自带的但是不建议),参考[zookeeper集群安装]
[hadoop集群安装]
我用的是三台机器,mini1,mini2,mini3
Hbase的安装流程
1、将hbase上传到hadoop集群,我这里上传的是hbase-0.99.2-bin.tar.gz。然后解压并且重命名为hbase,为了方便管理我讲hbase移动到了apps目录下。(上传、解压、重命名)
[root@mini1 ~]# tar –zxvf hbase-0.99.2-bin.tar.gz [root@mini1 ~]# mv hbase-0.99.2 hbase [root@mini1 ~]# mv hbase apps [root@mini1 ~]# cd apps/ [root@mini1 apps]# ll 总用量 20 drwxr-xr-x. 8 root root 4096 10月 19 15:15 apache-flume-1.6.0-bin drwxrwxr-x. 10 hadoop hadoop 4096 9月 30 22:04 hadoop-2.6.4 drwxr-xr-x. 7 root root 4096 10月 30 00:20 hbase drwxr-xr-x. 8 root root 4096 10月 17 12:38 hive drwxr-xr-x. 10 root root 4096 10月 29 23:21 zookeeper-3.4.6
2、修改环境变量
在编辑模式下,最后面添加
[root@mini1 apps]# vi /etc/profile ... export HBASE_HOME=/root/apps/hbase export PATH=$PATH:$HBASE_HOME/bin [root@mini1 apps]#source /etc/profile
在机器mini2,mini3上也执行2操作修改环境变量
3、修改配置文件
修改的是 hbase-env.sh,hbase-site.xml, regionservers
我们现在文本编辑器里面修改再上传覆盖就好了
hbase-env.sh添加内容如下
第一行指定jdk位置
第二行指定额外的classpath元素
第三行是关于jvm的可以不需要
第四行,true表示使用hbase自带的zookeeper,false表示使用自己的zookeeper(推荐,至少趁此学一下zookeeper,相信学了hbase后面的storm跟spark也会去学,后面很多都要使用zookeeper,一劳永逸的事)。
export JAVA_HOME=/heima32/jdk1.7.0_55/ export JAVA_CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export HBASE_OPTS="-XX:+UseConcMarkSweepGC" export HBASE_MANAGES_ZK=false
hbase-site.xml内容如下
<configuration> <property> <name>hbase.master</name> <value>mini1:60000</value> <description>指定hbase的主节点与端口号</description> </property> <property> <name>hbase.master.maxclockskew</name> <value>180000</value> <description>时间同步允许的时间差</description> </property> <property> <name>hbase.rootdir</name> <value>hdfs://mini1:9000/hbase</value> <description>hbase共享目录,持久化hbase数据,这个需要看你hadoop的核心文件里面配置的是不是mini1:9000不是的话得改成自己的hadoop里面写的</description> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> <description>是否是分布式的,当然</description> </property> <property> <name>hbase.zookeeper.quorum</name> <value>mini1,mini2,mini3</value> <description>指定zookeeper,我的zookeeper集群就是在这三台机器的</description> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/root/hbase/tmp/zookeeper</value> <description>zookeeper配置信息快照的位置,目录会自己创建的</description> </property> </configuration>
regionservers里面添加从节点机器名
mini2 mini3
然后将三个文件上传到hbase的conf目录下
4、将按照配置好的hbase上传到其他机器
这里是mini1配置好了,发送到mini2和mini3机器
[root@mini1 ~]# scp -r /root/apps/hbase mini2:/root/apps [root@mini1 ~]# scp -r /root/apps/hbase mini3:/root/apps
5、启动hbase
进入到mini1的hbase的bin目录下启动
启动完了使用jsp命令查看是否启动起来了
[root@mini1 bin]# ./start-hbase.sh starting master, logging to /root/apps/hbase/logs/hbase-root-master-mini1.out mini2: starting regionserver, logging to /root/apps/hbase/bin/../logs/hbase-root-regionserver-mini2.out mini3: starting regionserver, logging to /root/apps/hbase/bin/../logs/hbase-root-regionserver-mini3.out [root@mini1 bin]# jps 1593 ResourceManager 7133 HMaster 4550 QuorumPeerMain 2831 NameNode 7310 Jps
注:启动起来的前提需要启动hadoop和zookeeper,最后启动的话,那么mini1机器上会多出HMaster进程,mini2和mini3上多出了HRegionServer。
常见问题解决
这些问题都是我遇到的
下面的是自己的hosts文件,三台机器一样
[root@mini1 bin]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 localhost.jinbm 192.168.25.127 mini1 192.168.25.129 mini2 192.168.25.130 mini3
1、如果启动不起来,查看日志出现下面的异常
Cause: org.apache.hadoop.hbase.ClockOutOfSyncException: org.apache.hadoop.hbase.ClockOutOfSyncException: Server mini2,16020,1508608510960 has been rejected; Reported time is too far out of sync with master. Time difference of 428987358ms > max allowed of 180000ms
出现这个问题是当时我mini2这台机器和mini1的时间差太多了记得是4天,明显大于配置文件中写的时间同步允许的时间差也就是180000ms。
同步时间即可
ntpdate没有的话安装就好了
每台机器都像下面这样执行
[root@mini1 bin]# ntpdate -bash: ntpdate: command not found [root@mini1 bin]# yum install ntp ... [root@mini1 bin]# ntpdate 30 Oct 06:21:25 ntpdate[10542]: no servers can be used, exiting [root@mini1 bin]# ntpdate -u ntp.api.bz 29 Oct 22:22:37 ntpdate[10543]: step time server 115.28.122.198 offset -28798.299112 sec [root@mini1 bin]# date 2017年 10月 29日 星期日 22:22:44 CST
在使用ntpdate同步时间时出现以下错误:
ntpdate[46700]: no server suitable for synchronization found
没有找到好的解决方案,只能换另外一个工具来完成时间同步。
这里使用的Centos6.5,yum源使用的是阿里云的镜像。
yum install -y rdate
安装完毕后,使用下述命令即可。
rdate -s time-b.nist.gov
然后启动出现的问题如下
[root@mini1 bin]# ./start-hbase.sh starting master, logging to /root/apps/hbase/logs/hbase-root-master-mini1.out root@mini3's password: root@mini2's password: mini3: starting regionserver, logging to /root/apps/hbase/bin/../logs/hbase-root-regionserver-mini3.out
这个时候我们只能输一个密码,所以有一个肯定是启动不了的。
解决办法:设置mini1在mini2和mini3上免密登录。
免密登录,先生存秘钥,在mini2和mini3上授权认证通过。 [root@mini1 ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 52:1e:06:fa:7e:01:3d:a6:1d:bd:cb:19:08:86:cc:ca root@mini1 The key's randomart image is: +--[ RSA 2048]----+ | . | | o o o . | | = + O . | | . . o X = . | | E + S o | | . . o + | | . . + | | . | | | +-----------------+ [root@mini1 ~]# cd .ssh/ [root@mini1 .ssh]# ll 总用量 12 -rw-------. 1 root root 1675 10月 30 00:31 id_rsa -rw-r--r--. 1 root root 392 10月 30 00:31 id_rsa.pub -rw-r--r--. 1 root root 2359 10月 13 04:33 known_hosts [root@mini1 .ssh]# ssh-copy-id mini2 root@mini2's password: Now try logging into the machine, with "ssh 'mini2'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. [root@mini1 .ssh]# ssh-copy-id mini3 root@mini3's password: Now try logging into the machine, with "ssh 'mini3'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. 测试免密登录 [root@mini1 .ssh]# ssh mini2 Last login: Mon Oct 30 00:25:33 2017 from mini1 [root@mini2 ~]#
再次启动OK
[root@mini1 bin]# ./start-hbase.sh starting master, logging to /root/apps/hbase/logs/hbase-root-master-mini1.out mini2: starting regionserver, logging to /root/apps/hbase/bin/../logs/hbase-root-regionserver-mini2.out mini3: starting regionserver, logging to /root/apps/hbase/bin/../logs/hbase-root-regionserver-mini3.out
测试HRegionServer上下线
单独启动HRegionServer节点:
启动集群中所有的regionserver
./hbase-daemons.sh start regionserver
启动某个regionserver
./hbase-daemon.sh start regionserver