HBase集群部署指南

一、前言

1、HBase简介

HBase是一个分布式的、面向列的开源数据库。 HBase在Hadoop之上提供了类似于Google Bigtable的能力。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。 https://baike.baidu.com/item/HBase

2、HBase应用场景

  • 大数据存储:应用日志、用户行为等
  • 数据批量运算、分析

二、准备工作

1、集群节点规划

机器名

IP

节点应用

hdfs01

192.168.88.91

Master

hdfs02

192.168.88.92

Master-Backup RegionServer

hdfs03

192.168.88.93

RegionServer

zknode1

192.168.88.11

ZooKeeper

zknode2

192.168.88.12

ZooKeeper

zknode3

192.168.88.13

ZooKeeper

2、软件环境说明

说明

Linux Server

CentOS 7

JDK

1.8.0

ZooKeeper

3.4.11

NTP

4.2.6

Hadoop

3.0.0

HBase

1.4.2

3、基础环境准备

  • CentOS7虚拟机安装

Hyper-V下安装CentOSx虚拟机:https://ken.io/note/hyper-v-course-setup-centos

参考以上文章部署6台CentOS虚拟机

  • JDK1.8部署

CentOS下JDK部署:https://ken.io/note/centos-java-setup

参考以上文章为每台虚拟机部署JDK8

4、ZooKeeper集群部署

  • 为什么要部署ZooKeeper

可以通过ZooKeeper完成Hadoop NameNode的监控,发生故障时做到自动切换,从而达到高可用

  • 部署指引&要求

基于CentOS7部署ZooKeeper集群:https://ken.io/note/zookeeper-cluster-deploy-guide

参考以上文章在以下节点部署ZooKeeper集群

机器名

IP

节点应用

zknode1

192.168.88.11

ZooKeeper

zknode2

192.168.88.12

ZooKeeper

zknode3

192.168.88.13

ZooKeeper

5、HBase节点系统设置调整

本小结配置只针对HBase节点

  • 机器名修改
#hdfs01
hostnamectl set-hostname hdfs01.hdfscluster

#hdfs02
hostnamectl set-hostname hdfs02.hdfscluster

#hdfs03
hostnamectl set-hostname hdfs03.hdfscluster

参考:https://ken.io/note/centos-hostname-setup

  • 配置hosts
#修改hosts文件
vi /etc/hosts

#增加以下配置
192.168.88.91 hdfs01 hdfs01.hdfscluster
192.168.88.92 hdfs02 hdfs02.hdfscluster
192.168.88.93 hdfs03 hdfs03.hdfscluster
  • 关闭防火墙
#关闭防火墙
systemctl stop firewalld

#禁用防火墙开机启动
systemctl disable firewalld
  • 修改ulimit

在Apache HBase官网的介绍中有提到,使用 HBase 推荐修改ulimit,以增加同时打开文件的数量,推荐 nofile 至少 10,000 但最好 10,240 (It is recommended to raise the ulimit to at least 10,000, but more likely 10,240, because the value is usually expressed in multiples of 1024.)

修改 /etc/security/limits.conf 文件,在最后加上nofile(文件数量)、nproc(进程数量)属性,如下:

#修改文件
vi /etc/security/limits.conf

#追加以下内容

* soft nofile 65536
* hard nofile 65536
* soft nproc  65536
* hard nproc  65536
  • 关闭SELinux

因为 Hadoop、HBase 的启动需要使用 SSH,如果 SELinux 处于开启状态,默认情况下无法完成SSH的免密登录。最简单的做法就是关闭SELinux

#1、关闭SELinux: 
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config 

#2、重启:
reboot

6、HBase节点时间同步

如果服务器节点之间时间不一致,可能会引发HBase的异常,所以我们需要通过NTP的手段保证HBase各节点的时间是同步的。

参考以下文章,对HBase节点进行NTP部署

NTP服务器部署以及时间同步:https://ken.io/note/ntp-server-deploy-time-sync

  1. hdfs01节点部署NTP服务与公共NTP服务器进行时间同步
  2. hdfs02、hdfs03节点部署NTP服务与本地NTP服务器(hdfs01)进行时间同步

7、HBase节点SSH免密登录准备

Hadoop、HBase 的启动需要使用 SSH免密登录

  • 在Master节点生成密钥

通过ssh-keygen -t rsa命令生成密钥,一直回车即可 (此操作在hdfs01节点进行)

#生成密钥
ssh-keygen -t rsa

#查看公钥内容
cat ~/.ssh/id_rsa.pub
  • Master到Slave的SSH无密码登录

在Slave节点创建~/.ssh/authorized_keys文件 并将Master节点~/.ssh/id_rsa.pub中的内容写入保存

在hdfs02、hdfs03节点进行如下操作cd

#创建ssh文件夹
mkdir ~/.ssh

#创建ssh授权密钥文件
vi ~/.ssh/authorized_keys

#写入Master节点~/.ssh/id_rsa.pub中的内容
  • SSH免密登录测试
[root@hdfs01 ~]# ssh 192.168.88.92
The authenticity of host '192.168.88.92 (192.168.88.92)' can't be established.
ECDSA key fingerprint is 59:12:85:3f:ed:67:2c:09:e4:61:25:1c:d8:d4:e5:fd.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.88.92' (ECDSA) to the list of known hosts.
Last login: Mon Mar 12 18:18:16 2018 from 192.168.88.1
[root@hdfs02 ~]#
#退出登录
logout

8、Hadoop集群部署

  • 为什么要部署Hadoop?

因为HBase是基于Hadoop的应用

  • 部署指引&要求

基于CentOS7部署Hadoop集群:https://ken.io/note/hadoop-cluster-deploy-guide

参考以上文章在以下节点部署Hadoop集群

机器名

IP

节点应用

hdfs01

192.168.88.91

NameNode等

hdfs02

192.168.88.92

DataNode等

hdfs03

192.168.88.93

DataNode等

三、HBase集群部署

1、下载软件包&部署准备

  • 下载最新版HBase

官方HBase镜像包下载地址:http://mirrors.hust.edu.cn/apache/hbase 本次我们选用的是HBase 1.4.2版本

#进入下载目录
cd /home/download

#下载Hadoop
wget http://mirrors.hust.edu.cn/apache/hbase/1.4.2/hbase-1.4.2-bin.tar.gz

#解压到指定目录
mkdir /usr/hdfs
tar -zvxf hbase-1.4.2-bin.tar.gz -C /usr/hdfs/

2、修改HBase配置

  • 配置Hadoop环境变量
#修改环境变量
vi /etc/profile

#增加以下内容
export HBASE_HOME=/usr/hdfs/hbase-1.4.2
export PATH=$PATH:$HBASE_HOME/bin


#使环境变量生效
source /etc/profile

HBase的配置文件位于/usr/hdfs/hbase-1.4.2/conf下。 既然我们已经配置了环境变量,后续均已$HBASE_HOME替代/usr/hdfs/hbase-1.4.2

  • 复制hdfs-site.xml配置文件

复制$HADOOP_HOME/etc/hadoop/hdfs-site.xml到$HBASE_HOME/conf目录下,这样以保证hdfs与hbase两边一致,这也是官网所推荐的方式。在官网中提到一个例子,例如hdfs中配置的副本数量为5,而默认为3,如果没有将最新的hdfs-site.xml复制到$HBASE_HOME/conf目录下,则hbase将会按3份备份,从而两边不一致,导致会出现异常。

cp $HADOOP_HOME/etc/hadoop/hdfs-site.xml $HBASE_HOME/conf/
  • 配置hbase-site.xml

修改配置文件:

vi $HBASE_HOME/conf/hbase-site.xml

更改为以下配置

<configuration>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>192.168.88.11,192.168.88.12,192.168.88.13</value>
    <description>The directory shared by RegionServers.
    </description>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/zookeeper/data</value>
    <description>
        注意这里的zookeeper数据目录与hadoop ha的共用,也即要与 zoo.cfg 中配置的一致
        Property from ZooKeeper config zoo.cfg.
        The directory where the snapshot is stored.
    </description>
  </property>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://hdfs01:9000/hbase</value>
    <description>
        The directory shared by RegionServers.
        官网多次强调这个目录不要预先创建,hbase会自行创建,否则会做迁移操作,引发错误
        至于端口,有些是8020,有些是9000,看 $HADOOP_HOME/etc/hadoop/hdfs-site.xml 里面的配置,本实验配置的是
        dfs.namenode.rpc-address.hdfscluster.nn1 , dfs.namenode.rpc-address.hdfscluster.nn2
    </description>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    <description>
        分布式集群配置,这里要设置为true,如果是单节点的,则设置为false
        The mode the cluster will be in. Possible values are
        false: standalone and pseudo-distributed setups with managed ZooKeeper
        true: fully-distributed with unmanaged ZooKeeper Quorum (see hbase-env.sh)
    </description>
  </property>
</configuration>
  • 配置regionserver文件

编辑 $HBASE_HOME/conf/regionservers 文件,输入要运行 regionserver 的主机名

#编辑文件
vi $HBASE_HOME/conf/regionservers

#写入以下内容
hdfs02
hdfs03
  • 配置 backup-masters 文件(master备用节点)

HBase 支持运行多个 master 节点,但只能有一个活动节点(active master),其余为备用节点(backup master),编辑 $HBASE_HOME/conf/backup-masters 文件进行配置备用管理节点的主机名

#编辑文件
vi $HBASE_HOME/conf/backup-masters

#写入以下内容
hdfs02
  • 配置 hbase-env.sh 文件

由于本次部署使用的是独立ZooKeeper,所以需要关闭内置的 另外,HBase主节点通过ssh免密登录到其他节点启动HBase的时候,/etc/profile是不生效的 所以要单独配置JAVA_HOME环境变量,不然启动HBase的时候,会提示:

Error: JAVA_HOME is not set

#编辑文件
vi $HBASE_HOME/conf/hbase-env.sh

#配置JDK环境变量(JAVA_HOME)
export JAVA_HOME=/usr/java/jdk1.8.0_161

#修改配置(文件尾部)
export HBASE_MANAGES_ZK=false

3、启动HBase

在此之前确保Zookeeper、Hadoop集群均已启动 以下启动方式任选一种

  • 便捷启动(推荐)
$HBASE_HOME/bin/start-hbase.sh
  • 分步启动
#启动hbase master(hdfs01)
hbase-daemon.sh start master 

#启动hbase regionserver(hdfs02、hdfs03)
hbase-daemon.sh start regionserver 

#启动hbase backup-master(hdfs02)
hbase-daemon.sh start master --backup

四、HBase集群测试

1、HBase Shell命令测试

  • 进入Shell命令行
[root@hdfs01 ~]# hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/hdfs/hbase-1.4.2/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hdfs/hadoop-3.0.0/share/hadoop/common/lib/slf4j-log4j12-1.7.25.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]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 1.4.2, rb4ec89059cc3a7416c2012bb1a9d31f1cd34b78c, Wed Feb 21 14:25:53 PST 2018

hbase(main):001:0>
  • 查看集群节点信息
hbase(main):001:0> status
1 active master, 1 backup masters, 2 servers, 0 dead, 1.0000 average load
  • 创建表

HBase创建表语法: create [tablename],[column01],[column02],[column] ……

hbase(main):002:0> create "test","col1","col2" 
0 row(s) in 2.5870 seconds
  • 查看表
hbase(main):003:0> list "test"
TABLE                                                                           
test                                                                                      
1 row(s) in 0.0060 seconds
  • 导入数据

HBase表导入数据语法:

put [tablename],[rowname],[column],[colnumValue]  
put [tablename],[rowname],[column:subColumn],[colnumValue]

导入数据示例:

#导入指定行列数据
put "test","row1","col1","row1_c1_value"

#导入指定行列以及子列数据
put "test","row2","col1:s1","row1_c2_s1_value"
put "test","row2","col1:s2","row1_c2_s2_value"
  • 全表扫描数据
hbase(main):006:0> scan "test"
ROW                                             COLUMN+CELL                                                                                                                               
 row1                                           column=col1:, timestamp=1520935981966, value=row1_c1_value                                                                                
 row2                                           column=col1:s1, timestamp=1520936007587, value=row1_c2_s1_value                                                                           
 row2                                           column=col1:s2, timestamp=1520936023896, value=row1_c2_s2_value                                                                           
2 row(s) in 0.1430 seconds
  • 条件查询
#查询row1数据
get "test","row1"
  • 禁用/启用表
#禁用表
disable "test"

#启用表
enable "test"
  • 删除表
#删除表
drop "test"

2、Web管理页面

HBase提供了Web管理界面,浏览器输入HMaster节点IP:16010即可: http://192.168.88.91:16010

  • 集群状态
  • 表详细信息

在Tables这一栏,点击[Details]超链接,即可查看所有表的详细信息 也可以通过URL直接访问:http://192.168.88.91:16010/tablesDetailed.jsp

  • 表属性、Schema

在Tables这一栏,点击表名的连接,即可查看该表的信息/属性 也可以通过URL直接访问:http://192.168.88.91:16010/table.jsp?name=test

其他功能,自行试用,这里 ken.io 就不一一列举了

五、备注

附录

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏埋名

CentOS7安装维护Gitlab

下面是官网复制过来的官方安装方法,最简单的安装,在我大天朝,只能望天兴叹,你可翻墙安装或者略过这里,看下面的。

5853
来自专栏北京马哥教育

CentOS系统启动流程你懂否

一、Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序。 ...

3794
来自专栏电光石火

eclipse配置tomcat运行时访问路径不要项目名称

1:双击打开tomcat 2:选择Modules,选择你要修改的项目 ? 3:点击Edit,把path修改成空或者你自己想要的路径即可! ?

3146
来自专栏张泽旭的专栏

【腾讯云的1001种玩法】hadoop 伪分布式搭建

Hadoop实现了一个分布式文件系统(简称HDFS)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high...

1.7K0
来自专栏世界第一语言是java

ELK+logback+kafka+nginx 搭建分布式日志分析平台

ELK(Elasticsearch , Logstash, Kibana)是一套开源的日志收集、存储和分析软件组合。而且不只是java能用,其他的开发语言也可以...

3922
来自专栏云计算教程系列

如何在Debian 8上使用Postgres,Nginx和Gunicorn设置Django

Django是一个功能强大的Web框架,可以帮助您完成Python应用程序或网站。Django包含一个简化的开发服务器,用于在本地测试您的代码,但是对于任何与生...

1224
来自专栏北京马哥教育

Hadoop2.2.0 的安装和基本配置

Hadoop2.0的架构和1.0完全不一样,在安装配置上和1.0也有很大的不同,譬如配置文件的目录不一样了,还有要对yarn进行配置,这个在1.0是没有的。很多...

2934
来自专栏黑泽君的专栏

Eclipse各版本代号一览表以及官网上有很多版本的eclipse,下载哪个版本比较合适呢?

Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。

7151
来自专栏云计算教程系列

如何在Debian 9上安装Apache Tomcat 9

Apache Tomcat是一个Web服务器和servlet容器,用于为Java应用程序提供服务。Tomcat是Apache Software Foundati...

5424
来自专栏闵开慧

tomcat里面的文件详细说明

如何安装tomcat服务器   安装Tomcat之前要先安装JDK,可从http://java.sun.com上下载最新版本的JDK。 Tomcat可从Apac...

42210

扫码关注云+社区

领取腾讯云代金券