1.解压软件
tar zxvf hbase-1.1.5-bin.tar.gz
---chown -R hadoop:hadoop hbase-1.1.5
2.配置Hbase
① 修改hbase-env.sh
vi conf/hbase-env.sh,出掉JAVA_HOME的注释,并修改为本地的
export JAVA_HOME=/usr/java/jdk1.7.0_79
export HBASE_LOG_DIR=/opt/hadoop/hbase-1.1.5/logs
export HBASE_MANAGES_ZK=false
export HBASE_PID_DIR=/opt/hadoop/hadoop-2.7.2/pids
export HBASE_CLASSPATH=/opt/hadoop/hbase-1.1.5/conf
修改HBASE_MANAGES_ZK为false,默认为true,表示HBase托管zookeeper实例,如果是HBase独占的zookeeper,可以设定为true。
这里需要注意的是,在搭建HBase集群的时候需要保证Hadoop平台运行正常,各个节点的时间差不能相差太大,最后时间能够同步。否则会导致 HBase的启动失败。另外,如果在启动HBase集群时,提示不能解析HDFS路径,这里将Hadoop的core-site.xml和hdfs- site.xml文件复制到HBase的conf文件目录下即可。
② cp /opt/hadoop/hadoop-2.7.2/etc/hadoop/hdfs-site.xml .
cp /opt/hadoop/hadoop-2.7.2/etc/hadoop/core-site.xml .
③ 创建临时目录
[hadoop@masternode1 conf]$ mkdir /opt/hadoop/hbase-1.1.5/tmp
[hadoop@masternode1 conf]$ mkdir /opt/hadoop/hbase-1.1.5/logs
[hadoop@masternode1 conf]$ chmod 756 /opt/hadoop/hbase-1.1.5/logs
[hadoop@masternode1 conf]$ chmod 756 /opt/hadoop/hbase-1.1.5/tmp/
④ 配置hbase-site.xml文件
vi hbase-site.xml
RegionServers.Same property is used by the Master for count of master
handlers.
hbase.rootdir:Region Servers共享的HBase持久化数据的存储地址。需要使用包含文件系统scheme的完全限定地址。
hbase.cluster.distributed:指定Hbase集群是否以分布式方式运行。
hbase.master.port:Master绑定的端口,包括backup-master.
hbase.zookeeper.property.dataDir:这个是ZooKeeper配置文件zoo.cfg中的dataDir。zookeeper存储数据库快照的位置。
hbase.zookeeper.quorum:ZooKeeper的所有成员服务器列表,服务器名之间用逗号分隔。
hbase.zookeeper.property.clientPort:这个是ZooKeeper配置文件zoo.cfg中的clientPort。ZooKeeper提供给客户端连接的端口,默认是2181。
⑤ 配置[hadoop@masternode1 conf]# vi log4j.properties
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
⑥ 修改regionservers,将RegionServers写入。
vim conf/regionservers
slavenode1
slavenode2
slavenode3
slavenode4
⑦ 添加环境变量方便调用HBase
vim /etc/profile
export HBASE_HOME=/opt/hadoop/hbase-1.1.5
export PATH=$PATH:$HBASE_HOME/bin
⑧ 创建两个目录.zookeeper单独配置就不用这步骤
[hadoop@masternode1 hbase-1.1.5]# mkdir logs
[hadoop@masternode1 hbase-1.1.5]# mkdir data
[hadoop@masternode1 data]# echo ‘1’> myid
[hadoop@masternode1 data]# echo ‘2’> myid
[hadoop@slavenode2 data]# echo ‘3’> myid
[hadoop@slavenode3 data]# echo ‘4’> myid
⑨ 将修改好的安装目录分发到所有节点,一并修改环境变量。
[hadoop@masternode1 hadoop]$ for i in {31,32,33,34,35,36,37,38,39};do scp -r hbase-1.1.5 [email protected]$i:/opt/hadoop/ ; done
[hadoop@masternode1 hadoop]$ for i in {31,32,33,34,35,36,37,38,39};do scp ~/.bash_profile hadoop@192.168.237.2$i:~/.bash_profile ; done
把/etc/profile ~/.bash_profile 分发各级节点
防止内存溢出(主从节点都要配置)
[hadoop@masternode1 ~]# vi /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc 1024
root soft nproc unlimited
hadoop soft nproc 10240 (更改后的值)
⑩ 启动HBase
这步要现看下hbase下的包是否全才执行,若全就不用执行此部find /opt/hadoop/hadoop-2.7.2/share/hadoop -name "hadoop*.jar" | xargs -i cp {} /opt/hadoop/hbase-1.1.5/lib/
[hadoop@masternode1 bin]$# pwd
/opt/hadoop/hbase-1.1.5/bin
[hadoop@masternode1 bin]$ sh start-hbase.sh
在masternode2上调用hbase-daemon.sh start master
即可。
11 通过jps查看进程。
Masternode1上有HMaster,Masternode2上有HMaster和HRegionServer,slavenode1和slavenode3上是HRegionServer。
http://192.168.237.230:16010/master-status
http://192.168.237.231:16010/master-status
12 验证完毕
[hadoop@masternode1 bin]# ./hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hadoop/hbase-1.1.5/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hadoop/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2016-09-08 03:45:45,878 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 上面第三步配置是为了解决该报错的
HBase Shell; enter 'help
Type "exit
Version 1.1.5, r239b80456118175b340b2e562a5568b5c744252e, Sun May 8 20:29:26 PDT 2016
hbase(main):001:0> create 'test', 'cf'
ERROR: Can't get master address from ZooKeeper; znode data == null
现在是hbase和zookeeper链接不上,请核查原有
原因是四台机器的zookeeper必须要全部启动完毕之后才可以启动hbase。
[hadoop@slavenode1 bin]# hbase shell
HBase Shell; enter 'help
Type "exit
Version 1.1.5, r239b80456118175b340b2e562a5568b5c744252e, Sun May 8 20:29:26 PDT 2016
hbase(main):001:0> create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}
0 row(s) in 2.5320 seconds
=> Hbase::Table - t1
解决slf4问题
[hadoop@masternode1 bin]# hbase classpath | tr ":" "\n" | grep -i slf4
/opt/hadoop/hbase-1.1.5/lib/slf4j-api-1.7.7.jar
/opt/hadoop/hbase-1.1.5/lib/slf4j-log4j12-1.7.5.jar
[hadoop@masternode1 bin]# rm /opt/hadoop/hbase-1.1.5/lib/slf4j-api-1.7.7.jar
rm /opt/hadoop/hbase-1.1.5/lib/slf4j-log4j12-1.7.5.jar
到相应的目录删掉找出来的文件
总结:
1. hbase.master.port需要指定,不然启动backup-master时会报Already in use的错误。
2. HMaster(包括backup-master)需要能够passwordless ssh到其它服务器
3. ZooKeeper应该用奇数个节点。