一. 背景
本文所搭建的 HBase 版本为 HBase 0.98.6-cdh5.3.2。HBase 有两种运行模式:单机模式 和 分布式模式。本文只重点讲解 “分布式模式“。
在搭建 HBase 0.98.6-cdh5.3.2 之前,笔者已经在集群搭建并启动好 Hadoop 和 ZooKeeper 集群。具体请参考:
- Hadoop-2.5.0-cdh5.3.2 HA 安装:http://blog.csdn.net/u011414200/article/details/50283401
- ZooKeeper-3.4.5 安装 :http://blog.csdn.net/u011414200/article/details/50248079
二. HBase 搭建前准备
在开始安装 HBase 之前需要做一些准备工作,这涉及到系统设置、分布式模式 Hadoop 的部署及 HBase 自身的配置,因此要确保在运行 Hbase 之前这些条件已经具备。以下将介绍 HBase 依赖的一些重要的中间件、系统服务或配置。
2.1 主机规划
IP | 主机名 | 用户名 | HBase 地位 | 启动后进程 |
---|---|---|---|---|
10.6.3.43 | master5 | hadoop5 | 主 Master | HMaster |
10.6.3.33 | master52 | hadoop5 | 备份 Master | HMaster |
10.6.3.48 | slave51 | hadoop5 | RegionServer | HRegionServer |
10.6.3.32 | slave52 | hadoop5 | RegionServer | HRegionServer |
10.6.3.38 | slave53 | hadoop5 | RegionServer | HRegionServer |
2.2 系统基本配置 (jdk + ssh + hosts)
1. 安装 jdk 1.8.0
安装 jdk 1.8.0 至 /usr/local/jdk1.8.0_60
,具体请参考 “安装 jdk1.8.0”
2. 配置免密 ssh 登陆
具体请参考:Centos6.5下SSH免密码登陆配置
3. 域名系统 DNS
Hbase 通过本地主机名 (Host Name)或 域名 (Domain Name)来获取 IP 地址,因此要确保正向和反向 DNS 解析是正常的。在进行 DNS 解析时会首先本地 /etc/hosts 文件,因此建议通过配置该文件指定主机名或域名到 IP 地址的映射关系而不使用域名解析服务,这样做将更易于维护,当出现主机无法识别的异常时也更加容易定位问题出现的位置,并且通过本地 /etc/hosts 文件解析 IP 地址速度也会更快一些。
编辑 /etc/hosts 文件内容均一致,都要将集群中的各 IP 和 主机名对应起来
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.6.3.43 master5
10.6.3.33 master52
10.6.3.48 slave51
10.6.3.32 slave52
10.6.3.36 slave53
当决定使用 DNS 服务的时候,还可以通过如下设置更加精确地控制 HBase 的行为。
如果有多个网卡,可以通过参数 hbase.regionserver.dns.interface 指定网卡,该配置参数的默认值是 default ,可以通过这个参数指定网络接口,不过要求集群所有节点配置是相同的且每台主机都使用相同的网卡配置,可以修改这个配置参数为 eth0 或 eth1 ,这要视具体的硬件配置而定。
另一个配置是指定 hbase.regionserver.dns,nameserver 可以选择一个不同的 DNS 的 nameserver。
4. 本地回环地址 Loopback IP
HBase 要求将本地回环接口配置成 127.0.0.1,可以在 /etc/hosts 文件配置,通常系统安装后都已经包含了该配置
127.0.0.1 localhost
2.3 网络时间协议 NTP
HBase 要求集群中节点间的系统时间要基本一致,可以容忍一些偏差,默认相差 30s 以内。可以通过设置参数 hbase.master.maxclockskew 属性值修改最大容忍偏差时间。偏差时间较多时集群会产生一些奇怪的行为。用户需要在集群中数据发生了一些莫名其妙的问题,例如读到的不是刚写进集群的数据而是旧数据,这时就要检查集群各节点间时间是否同步。
笔者采用的是在 10.6.3.43 上搭建 NTP 时间服务器,集群中其他节点都随时与 10.6.3.43 保持时间同步。关于 NTP 服务器的搭建,可以参考:NTP 时间服务器实战
如果不愿意搭建 NTP 服务器,可以用脚本实现在每台主机上同时键入时间
date -s "2014-1-4 12:16:00"
同时设置下 hbase.master.maxclockskew 参数,这个具体请看 附录
2.4 安装 ZooKeeper
ZooKeeper 是 HBase 集群的 “协调器” ,负责解决 HMaster 的单点问题,以及 root 的路由,所以一个独立的 ZooKeeper 服务时必需的。要确保事先先安装好一个 ZooKeeper 集群。具体请参考:ZooKeeper-3.4.5 安装
三. HBase 安装配置
以下操作均在主