Skip to content
Notes
GitHub

第五次

1. HBase 基础知识

Hbase 是一种 NoSQL 数据库,不像传统的 RDBMS 那样支持 SQL 作为查询语言。Hbase 是一种分布式存储的数据库,技术上来讲,它更像是分布式存储而不是分布式数据库,它缺少很多 RDBMS 系统的特性,比如列类型,辅助索引,触发器和高级查询语言等待。

在关系型数据库的多表查询中,原理是进行笛卡儿积后,再进行过滤,而这对于数据量巨大的情况下,效率是相当低下的。

2. HBase 和 zookeeper 单机安装

2.1. 下载

https://zookeeper.apache.orgApache ZooKeeper 下载 bin.tar.gz 文件,并上传到虚拟机。

2.2. 解压

Terminal window
[lc@master soft]$ tar xvf apache-zookeeper-3.7.0-bin.tar.gz -C ~/
[lc@master soft]$ tar xvf hbase-1.2.0-cdh5.7.0.tar.gz -C ~/
Terminal window
[lc@master soft]$ tar xvf apache-zookeeper-3.7.0-bin.tar.gz -C ~/
[lc@master soft]$ tar xvf hbase-1.2.0-cdh5.7.0.tar.gz -C ~/

public/shixun/Pasted_image_20211204093623.png

public/shixun/Pasted_image_20211204093957.png

修改目录名

Terminal window
[lc@master soft]$ mv apache-zookeeper-3.7.0 zookeeper
[lc@master soft]$ mv hbase-1.2.0-cdh5.7.0 hbase
Terminal window
[lc@master soft]$ mv apache-zookeeper-3.7.0 zookeeper
[lc@master soft]$ mv hbase-1.2.0-cdh5.7.0 hbase

2.3. 添加环境变量

Terminal window
[lc@master ~]$ vi .bash_profile
Terminal window
[lc@master ~]$ vi .bash_profile

public/shixun/Pasted_image_20211204113621.png

2.4. 配置 zookeeper

2.4.1. 修改配置文件 ZK_HOME/conf/zoo.cfg

先复制一份 zoo_example.cfg,然后修改复制的 zoo.cfg,将数据路径 dataDir 修改至自己的路径

Terminal window
dataDir=/home/lc/zookeeper/data
Terminal window
dataDir=/home/lc/zookeeper/data

public/shixun/Pasted_image_20211204113853.png

2.4.2. 创建 data 文件夹

Terminal window
[lc@master zookeeper]$ mkdir data
Terminal window
[lc@master zookeeper]$ mkdir data

2.4.3. 尝试开启 zookeeper 服务

Terminal window
[lc@master zookeeper]$ zkServer.sh start
Terminal window
[lc@master zookeeper]$ zkServer.sh start

public/shixun/Pasted_image_20211204114048.png

2.4.4. 查看 zookeeper 状态

此处显示开启了单机模式 (standalone)

Terminal window
[lc@master zookeeper]$ zkServer.sh status
Terminal window
[lc@master zookeeper]$ zkServer.sh status

public/shixun/Pasted_image_20211204114145.png

2.4.5. 此时 data 目录下生成了以下内容

public/shixun/Pasted_image_20211204114231.png

2.4.6. 使用 jps 命令,列出以下的进程

public/shixun/Pasted_image_20211204114258.png

2.4.7. 停止服务

Terminal window
[lc@master ~]$ zkServer.sh stop
Terminal window
[lc@master ~]$ zkServer.sh stop

2.5. 配置 hbase

2.5.1. 修改环境配置文件 HBASE_HOME/conf/hbase-env.sh

public/shixun/Pasted_image_20211204115145.png

Terminal window
export JAVA_HOME=/usr/java/jdk1.8 # java 环境
Terminal window
export JAVA_HOME=/usr/java/jdk1.8 # java 环境

public/shixun/Pasted_image_20211204115457.png

由于在这里我们用的是 JDK8,因此将下面两行注释。

public/shixun/Pasted_image_20211204115431.png

2.5.2. 修改 HBASE_HOME/conf/hbase-site.xml

public/shixun/Pasted_image_20211204115605.png

将以下配置写入 <configuration> 标签

public/shixun/Pasted_image_20211204120213.png

<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///home/lc/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/lc/zookeeper</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///home/lc/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/lc/zookeeper</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>

2.6. 启动 hbase 服务

2.6.1. 在 HBASE_HOME/bin 下启动

Terminal window
[lc@master bin]$ pwd
/home/lc/hbase/bin
[lc@master bin]$ ./start-hbase.sh
Terminal window
[lc@master bin]$ pwd
/home/lc/hbase/bin
[lc@master bin]$ ./start-hbase.sh

public/shixun/Pasted_image_20211204120010.png

2.6.2. 使用 jps 命令,查看 hbase 进程 HMaster 是否运行

public/shixun/Pasted_image_20211204120319.png

2.6.3. 开放端口

Terminal window
[lc@master bin]$ sudo firewall-cmd --zone=public --add-port=60010/tcp --permanent
success
[lc@master bin]$ sudo firewall-cmd --reload
success
Terminal window
[lc@master bin]$ sudo firewall-cmd --zone=public --add-port=60010/tcp --permanent
success
[lc@master bin]$ sudo firewall-cmd --reload
success

2.6.4. 访问测试 http://172.22.0.3:60010/

public/shixun/Pasted_image_20211204120546.png

2.6.5. 停止服务

Terminal window
[lc@master bin]$ ./stop-hbase.sh # 此处可以先不暂停
Terminal window
[lc@master bin]$ ./stop-hbase.sh # 此处可以先不暂停

3. HBase shell 命令的使用

3.1. 开启 shell

$HBASE_HOME/bin 下执行命令

Terminal window
[lc@master bin]$ ./hbase shell
Terminal window
[lc@master bin]$ ./hbase shell

public/shixun/Pasted_image_20211204131202.png

3.2. 通用命令

命令作用
help查看命令的帮助,如:help “create”
status查看应用状态
table_help查看表信息
version查看版本
whoami查看当前用户
exit退出 Shell 命令

3.3. HBase 数据结构

HBase 不支持关系模型,它可以根据用户的需求提供更灵活和可扩展的表设计。

  • 表(table)
  • 行(row)
  • 列族(Column Family)
  • 列标识(Column Qualifier)
  • 单元格(cell)
  • 时间戳(Timestamp)

3.4. DDL 命令

命令作用
create 'tab1','f1','f2'创建表,必须有表名和至少一个列族名
list列出所有表的信息
describe(desc) 'tab1'列出表的详细信息
alter 'tab1', NAME => 'f1'修改表
get '表名', '行键','列名'查看表
scan '表名'查看全表
drop/dropall删除/批量删除(正则语法)表
disable/disable_all/enable/enable_all禁用/启用表
is_disabled/is_enabled判断表是否禁用/启用
exists判断表是否存在

4. 分布式模式

public/shixun/Pasted_image_20211211113331.png

4.1. 在从机上同样安装 zookeeper

4.1.1. 使用 scp 拷贝

该命令会利用 ssh 进行拷贝,因此可以将文件传输到从属机上。-r 表示递归。

Terminal window
[lc@master ~]$ scp -r zookeeper/ slave1:/home/lc
[lc@master ~]$ scp -r zookeeper/ slave2:/home/lc
Terminal window
[lc@master ~]$ scp -r zookeeper/ slave1:/home/lc
[lc@master ~]$ scp -r zookeeper/ slave2:/home/lc

4.1.2. 修改 zoo.cgf

由于需要配置集群,所以向配置文件中写入各个服务器

Terminal window
[lc@master ~]$ vi zookeeper/conf/zoo.cfg
Terminal window
[lc@master ~]$ vi zookeeper/conf/zoo.cfg

public/shixun/Pasted_image_20211204134512.png

Terminal window
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
Terminal window
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

4.1.3. 将这个配置拷贝至从属机

Terminal window
[lc@master ~]$ scp zookeeper/conf/zoo.cfg slave1:/home/lc/zookeeper/conf
[lc@master ~]$ scp zookeeper/conf/zoo.cfg slave2:/home/lc/zookeeper/conf
Terminal window
[lc@master ~]$ scp zookeeper/conf/zoo.cfg slave1:/home/lc/zookeeper/conf
[lc@master ~]$ scp zookeeper/conf/zoo.cfg slave2:/home/lc/zookeeper/conf

4.1.4. 删除数据文件 填写服务器 ID

Terminal window
[lc@master zookeeper]$ pwd
/home/lc/zookeeper
[lc@master zookeeper]$ rm -r data/ # 删除数据文件
[lc@master zookeeper]$ mkdir data # 重新创建数据目录
[lc@master zookeeper]$ cd data/
[lc@master data]$ echo "1">myid # 向 myid 文件写入一个 1
# 对于 slave1 和 slave2 需要分别填写 2 和 3
Terminal window
[lc@master zookeeper]$ pwd
/home/lc/zookeeper
[lc@master zookeeper]$ rm -r data/ # 删除数据文件
[lc@master zookeeper]$ mkdir data # 重新创建数据目录
[lc@master zookeeper]$ cd data/
[lc@master data]$ echo "1">myid # 向 myid 文件写入一个 1
# 对于 slave1 和 slave2 需要分别填写 2 和 3

public/shixun/Pasted_image_20211204134846.png

对于从属机,执行类似的操作,其中 myid 中填入的为上面 server. 后面的数字

4.1.5. 将 .bash_profile 配置拷贝至 slave1 和 slave2

Terminal window
[lc@master ~]$ scp .bash_profile slave1:/home/lc
[lc@master ~]$ scp .bash_profile slave2:/home/lc
Terminal window
[lc@master ~]$ scp .bash_profile slave1:/home/lc
[lc@master ~]$ scp .bash_profile slave2:/home/lc
Terminal window
[lc@slave1 ~]$ source .bash_profile
[lc@slave2 ~]$ source .bash_profile
Terminal window
[lc@slave1 ~]$ source .bash_profile
[lc@slave2 ~]$ source .bash_profile

关闭防火墙,以便启动 Zookeeper 集群(对每台虚拟机都执行操作)

Terminal window
sudo systemctl stop firewalld
Terminal window
sudo systemctl stop firewalld

4.1.6. 逐一启动 zkServer 服务 zkServer.sh start

启动完成后,通过 zkServer.sh status 可以查看状态。这 3 台服务器上,有一台为 leader,而其他为 follower。

public/shixun/Pasted_image_20211204142019.png

public/shixun/Pasted_image_20211204142048.png

public/shixun/Pasted_image_20211204142122.png

Error: contacting service. It is probably not running

可能涉及到服务器选举的问题,因此可以先启动 leader,再启动 follower。

另一种可能的解决方案,删除 $HBASE_HOME/data/ 下的 version-2 目录,再重新启动 zkServer.sh

实在不行,那就重新启动虚拟机

4.2. 在 HDFS 上建立用于存储 Hbase 数据的文件夹

Terminal window
[lc@master ~] hadoop fs -mkdir /hbase
Terminal window
[lc@master ~] hadoop fs -mkdir /hbase

4.3. 配置和克隆 hbase

4.3.1. 修改环境变量文件 HBASE_HOME/conf/hbase-env.sh

public/shixun/Pasted_image_20211204142700.png

该设置让 Hbase 使用一个现有的被 Hbase 托管的 Zookeeper 集群,当 Hbase 启动时,无需手动启动 Zookeeper;如果设置为 false,则启动 Hbase 前需手动开启 Zookeeper,当重启 Hbase 时,则无需重启 Zookeeper.

4.3.2. 修改配置文件 HBASE_HOME/conf/hbase-site.xml

public/shixun/Pasted_image_20211204143231.png

<configuration>
<!-- hbase.rootdir 改为 hdfs 路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:8020/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/lc/zookeeper</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<!-- 增加分布式配置 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 设置 Zookeeper 端口 -->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<!-- 设置 Zookeeper 服务集 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<!-- 设置 Zookeeper 数据存放路径 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/lc/soft/zookeeper</value>
</property>
</configuration>
<configuration>
<!-- hbase.rootdir 改为 hdfs 路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:8020/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/lc/zookeeper</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<!-- 增加分布式配置 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 设置 Zookeeper 端口 -->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<!-- 设置 Zookeeper 服务集 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<!-- 设置 Zookeeper 数据存放路径 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/lc/soft/zookeeper</value>
</property>
</configuration>

public/shixun/Pasted_image_20211204143344.png

4.2.4. 配置 regionservers

hbase/conf/ 下创建 regionservers 文件,其中写入 hbase 部署的主机名。

public/shixun/Pasted_image_20211204143550.png

4.2.5. 确认 Hadoop 的依赖 jar 文件与 Hbase 的版本相同

4.2.6. 拷贝 hbase 至从机

Terminal window
[lc@master ~] scp -r hbase/ slave1:/home/lc
[lc@master ~] scp -r hbase/ slave2:/home/lc
Terminal window
[lc@master ~] scp -r hbase/ slave1:/home/lc
[lc@master ~] scp -r hbase/ slave2:/home/lc

4.4. 启动 Hbase

4.4.1. 命令启动 Hbase

在启动 start-dfs.sh 之后,在 /home/lc/hbase/bin 下启动 hbase。其中,我们可以不用再手动逐个启动 zkServer 了,因为在之前的配置中,已经会在启动 hbase 之前先自动启动 zkServer。

Terminal window
[lc@master bin] ./start-hbase.sh
Terminal window
[lc@master bin] ./start-hbase.sh

启动后 master 上运行了 HMaster

public/shixun/Pasted_image_20211210180832.png

从机的情况

public/shixun/Pasted_image_20211210181636.png

public/shixun/Pasted_image_20211210181530.png

4.4.2. 访问端口

进入 https://172.22.0.3:60010/ 中,查看启动情况。

public/shixun/Pasted_image_20211210181223.png

4.4.3. 停止服务

master 停止 hbase

Terminal window
[lc@master bin] ./stop-hbase.sh
Terminal window
[lc@master bin] ./stop-hbase.sh

停止 hdfs

Terminal window
[lc@master ~] stop-dfs.sh
Terminal window
[lc@master ~] stop-dfs.sh