在安装之前先介绍下Hbase,Hadoop生态系统中HBase所处位置,实现的功能,解决的问题。
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。
上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。
此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。
HBase具有以下特性:
虚拟机数量:3台
操作系统:Ubuntu 14.04
实验环境及版本:
Hadoop:Hadoop 2.2.0
Java:java version “1.7.0_51”
HBase:hbase-0.96.0.tar.gz
Zookeeper:zookeeper-3.4.5.tar.gz
Hbase安装包:https://download.csdn.net/download/leoe_/10292264
1、准备工作
(1)SSH无密验证双向互通:
要达到双向无密码互通我们只需要将每台机器的公钥均写入到同一个授权文件,然后将授权文件复制到每台机器上即可(具体公钥写入授权文件的方法参考Hadoop完全分布式的安装试验)。这样就可以达到双向无密码互通。这样Hadoop的脚本才可以远程操控其他的Hadoop和HBase进程。
(2)Hadoop完全分布式的安装:
必须可以正常启动 HDFS 系统,确保HDFS能够上传和读写文件。
(3) Zookeeper分布式的安装:
分布式HBase安装依赖于正在运行的ZooKeeper集群。Apache HBase默认情况下为您管理ZooKeeper“集群”。它将启动和停止ZooKeeper集合作为HBase启动/停止过程的一部分。你还可以独立于HBase管理ZooKeeper集群,只需要在Hbase的配置文件hbase-env.sh中做一些设置即可。
2、ntp时间同步服务器搭建与使用
查找jdk版本Ntp时间同步服务器安装配置:
集群的时钟要保证基本的一致。稍有不一致是可以容忍的,但是很大的不一致会 造成奇怪的行为。运行 NTP 或者其他什么东西来同步你的时间。下面对Ntp时间同步服务器NTP安装配置步骤如下:
2.1 服务端(master)
安装ntp服务,代码如下:
# apt-get install ntp
安装后默认启动服务,如果没有启动,启动之。
# /etc/init.d/ntp start
# vim /etc/ntp.conf
修改为如下:
重启ntp服务
# /etc/init.d/ntp restart
2.2 客户端(slaver1、slaver2)
1)使用ntpdate命令,如果不存在这个命令,则先安装apt-get install ntp
2)同步时间
# /usr/sbin/ntpdate 192.168.60.190 //即使用ip为192.168.60.190的ntp服务器同步时间
3)设置定时同步
vim /etc/crontab
系统便会在每天早上1点30分自动将系统时间同步到ntp服务器的时间,当然这里crontab的时间是指客户端的时间,同步后等同于ntp服务器的时间。
2.3 ulimit 和 nproc设置(集群均配置)
HBase是数据库,会在同一时间使用很多的文件句柄。大多数Ubuntu系统使用的默认值1024是不能满足的,所以你需要修改你的最大文件句柄限制。可以设置到10k. 你还需要修改 hbase 用户的 nproc,如果过低会造成 OutOfMemoryError异常。
需要澄清的,这两个设置是针对操作系统的,不是Hbase本身的。有一个常见的错误是Hbase运行的用户,和设置最大值的用户不是一个用户。在Hbase启动的时候,第一行日志会现在ulimit信息,所以你最好检查一下。
(1)limits.conf文件
# vim /etc/security/limits.conf
添加如下内容:
(2)common-session文件
# vim /etc/pam.d/common-session
加上这一行:
session required pam_limits.so
如下:
否则在/etc/security/limits.conf上的配置不会生效.
还有注销再登录,这些配置才能生效。
(3)文件中修改内容解释:
在/etc/security/limits.conf
root - nofile 65536 root最大能打开的文件数不超过65536
root hard nproc 16384 root用户最大能开启的进程数不超过16384
在/etc/pam.d/common-session
pam_limits.so模块可以使用在对一般应用程序使用的资源限制方面。如果需要在SSH服务器上对来自不同用户的ssh访问进行限制,就可以调用该模块来实现相关功能。当需要限制用户admin登录到SSH服务器时的最大连接数(防止同一个用户开启过多的登录进程),就可以在/etc/pam.d/sshd文件中增加一行对pam_limits.so模块的调用。
解压缩:
# tar -zxvf hbase-0.96.0.tar.gz
更改名字为hbase:mv hbase-0.96.0 hbase
3.1 配置conf/hbase-env.sh
export JAVA_HOME==/usr/lib/jvm/jdk1.7.0_51
export HBASE_CLASSPATH=~/u/etc/hadoop
export HBASE_PID_DIR=/soft/hbase/pids
修改:
export HBASE_MANAGES_ZK=false
解释:一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群,即Hbase默认自带一个zookeep集群。这个集群会随着Hbase的启动而启动。而在实际的商业项目中通常自己管理一个zookeeper集群更便于优化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.在本实验中,我们采用独立运行zookeeper集群的方式,故将其属性值改为false。
3.2 配置conf/hbase-site.xml
配置效果图如下:
解释:要想运行完全分布式模式,加一个属性 hbase.cluster.distributed 设置为 true 然后把 hbase.rootdir 设置为HDFS的NameNode的位置
hbase.rootdir:这个目录是region server的共享目录,用来持久化Hbase。URL需要是’完全正确’的,还要包含文件系统的scheme
hbase.cluster.distributed :Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面。在hbase-site.xml配置zookeeper:当Hbase管理zookeeper的时候,你可以通过修改zoo.cfg来配置zookeeper,对于zookeepr的配置,你至少要在 hbase-site.xml中列出zookeepr的ensemble servers,具体的字段是 hbase.zookeeper.quorum.在这里列出Zookeeper集群的地址列表,用逗号分割。
hbase.zookeeper.property.clientPort:ZooKeeper的zoo.conf中的配置,客户端连接的端口。
hbase.zookeeper.property.dataDir:ZooKeeper的zoo.conf中的配置。对于独立的Zookeeper,要指明Zookeeper的host和端口。需要在 hbase-site.xml中设置。
3.3 配置conf/regionservers
写入:slaver1、slaver2
在这里列出了你希望运行的全部 HRegionServer,一行写一个host (就像Hadoop里面的 slaver 一样). 列在这里的server会随着集群的启动而启动,集群的停止而停止。
3.4 hadoop配置文件拷入
# cp ~/u/etc/hadoop/hdfs-site.xml /soft/hbase/conf
# cp ~/u/etc/hadoop/core-site.xml /soft/hbase/conf
3.5 分发hbase
# scp -r /soft/hbase slaver1:/soft/hbase
# scp -r /soft/hbase slaver2:/soft/hbase
3.6 运行和测试
在master上执行:
(1)# start-dfs.sh
(2)# start-yarn.sh
(3)# zkServer.sh start
(各个节点均执行)
(4)# start-hbase.sh
(直接运行这个命令需要将HBASE的bin目录也加入到/etc/environment中)
使用jps查看进程:
master进程列表
从节点1进程列表
从节点2进程列表
通过浏览器查看60010,60030端口查看
http://192.168.60.190:60010/
http://192.168.60.199:60030/rs-status
4.7 多节点启动HMaster
root@master:/soft/hbase/bin# hbase-daemon.sh start master
在其他子节点同时启动HMaster,可以做等待备份作用;
Hbase脚本
启动:hbase shell
(1) status命令
hbase(main):008:0> status
1 servers, 0 dead, 3.0000 average load
(2) version命令
hbase(main):007:0> version
0.94.12, r1524863, Fri Sep 20 00:25:45 UTC 2013
(3) create 命令
创建一个名为 test 的表,这个表只有一个列为 cf。其中表名、列都要用单引号括起来,并以逗号隔开。
hbase(main):001:0> create 'test', 'cf'
0 row(s) in 10.3830 seconds
(4) list 命令
查看当前 HBase 中具有哪些表。
hbase(main):009:0> list
TABLE
test
1 row(s) in 0.3590 seconds
问题解决:
1、在安装完HBase后,启动hbase时会报slf4j-log4j的错误,这是因为hadoop的slf4j-log4j与HBase中的slf4j-log4j启冲突。
2、在web上查看HBase时,之前用的时:
http://master:60010/
http://slaver1:60030/
但是存在问题,不能打开页面进行查看HBase里边的信息。是因为在HBase1.X之后的版本中端口号改成了16010和16030。