第五次
1. HBase 基础知识
Section titled “1. HBase 基础知识”Hbase 是一种 NoSQL 数据库,不像传统的 RDBMS 那样支持 SQL 作为查询语言。Hbase 是一种分布式存储的数据库,技术上来讲,它更像是分布式存储而不是分布式数据库,它缺少很多 RDBMS 系统的特性,比如列类型,辅助索引,触发器和高级查询语言等待。
在关系型数据库的多表查询中,原理是进行笛卡儿积后,再进行过滤,而这对于数据量巨大的情况下,效率是相当低下的。
2. HBase 和 zookeeper 单机安装
Section titled “2. HBase 和 zookeeper 单机安装”2.1. 下载
Section titled “2.1. 下载”在 https://zookeeper.apache.org 的 Apache ZooKeeper 下载 bin.tar.gz 文件,并上传到虚拟机。
2.2. 解压
Section titled “2.2. 解压”[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 ~/![]()
![]()
修改目录名
[lc@master soft]$ mv apache-zookeeper-3.7.0 zookeeper[lc@master soft]$ mv hbase-1.2.0-cdh5.7.0 hbase2.3. 添加环境变量
Section titled “2.3. 添加环境变量”[lc@master ~]$ vi .bash_profile
2.4. 配置 zookeeper
Section titled “2.4. 配置 zookeeper”2.4.1. 修改配置文件 ZK_HOME/conf/zoo.cfg
Section titled “2.4.1. 修改配置文件 ZK_HOME/conf/zoo.cfg”先复制一份 zoo_example.cfg,然后修改复制的 zoo.cfg,将数据路径 dataDir 修改至自己的路径
dataDir=/home/lc/zookeeper/data
2.4.2. 创建 data 文件夹
Section titled “2.4.2. 创建 data 文件夹”[lc@master zookeeper]$ mkdir data2.4.3. 尝试开启 zookeeper 服务
Section titled “2.4.3. 尝试开启 zookeeper 服务”[lc@master zookeeper]$ zkServer.sh start
2.4.4. 查看 zookeeper 状态
Section titled “2.4.4. 查看 zookeeper 状态”此处显示开启了单机模式 (standalone)
[lc@master zookeeper]$ zkServer.sh status
2.4.5. 此时 data 目录下生成了以下内容
Section titled “2.4.5. 此时 data 目录下生成了以下内容”
2.4.6. 使用 jps 命令,列出以下的进程
Section titled “2.4.6. 使用 jps 命令,列出以下的进程”
2.4.7. 停止服务
Section titled “2.4.7. 停止服务”[lc@master ~]$ zkServer.sh stop2.5. 配置 hbase
Section titled “2.5. 配置 hbase”2.5.1. 修改环境配置文件 HBASE_HOME/conf/hbase-env.sh
Section titled “2.5.1. 修改环境配置文件 HBASE_HOME/conf/hbase-env.sh”![]()
export JAVA_HOME=/usr/java/jdk1.8 # java 环境![]()
由于在这里我们用的是 JDK8,因此将下面两行注释。

2.5.2. 修改 HBASE_HOME/conf/hbase-site.xml
Section titled “2.5.2. 修改 HBASE_HOME/conf/hbase-site.xml”![]()
将以下配置写入 <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 服务
Section titled “2.6. 启动 hbase 服务”2.6.1. 在 HBASE_HOME/bin 下启动
Section titled “2.6.1. 在 HBASE_HOME/bin 下启动”[lc@master bin]$ pwd/home/lc/hbase/bin[lc@master bin]$ ./start-hbase.sh![]()
2.6.2. 使用 jps 命令,查看 hbase 进程 HMaster 是否运行
Section titled “2.6.2. 使用 jps 命令,查看 hbase 进程 HMaster 是否运行”
2.6.3. 开放端口
Section titled “2.6.3. 开放端口”[lc@master bin]$ sudo firewall-cmd --zone=public --add-port=60010/tcp --permanentsuccess[lc@master bin]$ sudo firewall-cmd --reloadsuccess
2.6.5. 停止服务
Section titled “2.6.5. 停止服务”[lc@master bin]$ ./stop-hbase.sh # 此处可以先不暂停3. HBase shell 命令的使用
Section titled “3. HBase shell 命令的使用”3.1. 开启 shell
Section titled “3.1. 开启 shell”在 $HBASE_HOME/bin 下执行命令
[lc@master bin]$ ./hbase shell
3.2. 通用命令
Section titled “3.2. 通用命令”| 命令 | 作用 |
|---|---|
help | 查看命令的帮助,如:help “create” |
status | 查看应用状态 |
table_help | 查看表信息 |
version | 查看版本 |
whoami | 查看当前用户 |
exit | 退出 Shell 命令 |
3.3. HBase 数据结构
Section titled “3.3. HBase 数据结构”HBase 不支持关系模型,它可以根据用户的需求提供更灵活和可扩展的表设计。
- 表(table)
- 行(row)
- 列族(Column Family)
- 列标识(Column Qualifier)
- 单元格(cell)
- 时间戳(Timestamp)
3.4. DDL 命令
Section titled “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. 分布式模式
Section titled “4. 分布式模式”
4.1. 在从机上同样安装 zookeeper
Section titled “4.1. 在从机上同样安装 zookeeper”4.1.1. 使用 scp 拷贝
Section titled “4.1.1. 使用 scp 拷贝”该命令会利用 ssh 进行拷贝,因此可以将文件传输到从属机上。-r 表示递归。
[lc@master ~]$ scp -r zookeeper/ slave1:/home/lc[lc@master ~]$ scp -r zookeeper/ slave2:/home/lc4.1.2. 修改 zoo.cgf
Section titled “4.1.2. 修改 zoo.cgf”由于需要配置集群,所以向配置文件中写入各个服务器
[lc@master ~]$ vi zookeeper/conf/zoo.cfg
server.1=master:2888:3888server.2=slave1:2888:3888server.3=slave2:2888:38884.1.3. 将这个配置拷贝至从属机
Section titled “4.1.3. 将这个配置拷贝至从属机”[lc@master ~]$ scp zookeeper/conf/zoo.cfg slave1:/home/lc/zookeeper/conf[lc@master ~]$ scp zookeeper/conf/zoo.cfg slave2:/home/lc/zookeeper/conf4.1.4. 删除数据文件 填写服务器 ID
Section titled “4.1.4. 删除数据文件 填写服务器 ID”[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
对于从属机,执行类似的操作,其中 myid 中填入的为上面 server. 后面的数字
4.1.5. 将 .bash_profile 配置拷贝至 slave1 和 slave2
Section titled “4.1.5. 将 .bash_profile 配置拷贝至 slave1 和 slave2”[lc@master ~]$ scp .bash_profile slave1:/home/lc[lc@master ~]$ scp .bash_profile slave2:/home/lc[lc@slave1 ~]$ source .bash_profile[lc@slave2 ~]$ source .bash_profile关闭防火墙,以便启动 Zookeeper 集群(对每台虚拟机都执行操作)
sudo systemctl stop firewalld4.1.6. 逐一启动 zkServer 服务 zkServer.sh start
Section titled “4.1.6. 逐一启动 zkServer 服务 zkServer.sh start”启动完成后,通过 zkServer.sh status 可以查看状态。这 3 台服务器上,有一台为 leader,而其他为 follower。



Error: contacting service. It is probably not running
可能涉及到服务器选举的问题,因此可以先启动 leader,再启动 follower。
另一种可能的解决方案,删除 $HBASE_HOME/data/ 下的 version-2 目录,再重新启动 zkServer.sh
实在不行,那就重新启动虚拟机
4.2. 在 HDFS 上建立用于存储 Hbase 数据的文件夹
Section titled “4.2. 在 HDFS 上建立用于存储 Hbase 数据的文件夹”[lc@master ~] hadoop fs -mkdir /hbase4.3. 配置和克隆 hbase
Section titled “4.3. 配置和克隆 hbase”4.3.1. 修改环境变量文件 HBASE_HOME/conf/hbase-env.sh
Section titled “4.3.1. 修改环境变量文件 HBASE_HOME/conf/hbase-env.sh”![]()
该设置让 Hbase 使用一个现有的被 Hbase 托管的 Zookeeper 集群,当 Hbase 启动时,无需手动启动 Zookeeper;如果设置为 false,则启动 Hbase 前需手动开启 Zookeeper,当重启 Hbase 时,则无需重启 Zookeeper.
4.3.2. 修改配置文件 HBASE_HOME/conf/hbase-site.xml
Section titled “4.3.2. 修改配置文件 HBASE_HOME/conf/hbase-site.xml”
<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>
4.2.4. 配置 regionservers
Section titled “4.2.4. 配置 regionservers”在 hbase/conf/ 下创建 regionservers 文件,其中写入 hbase 部署的主机名。

4.2.5. 确认 Hadoop 的依赖 jar 文件与 Hbase 的版本相同
Section titled “4.2.5. 确认 Hadoop 的依赖 jar 文件与 Hbase 的版本相同”4.2.6. 拷贝 hbase 至从机
Section titled “4.2.6. 拷贝 hbase 至从机”[lc@master ~] scp -r hbase/ slave1:/home/lc[lc@master ~] scp -r hbase/ slave2:/home/lc4.4. 启动 Hbase
Section titled “4.4. 启动 Hbase”4.4.1. 命令启动 Hbase
Section titled “4.4.1. 命令启动 Hbase”在启动 start-dfs.sh 之后,在 /home/lc/hbase/bin 下启动 hbase。其中,我们可以不用再手动逐个启动 zkServer 了,因为在之前的配置中,已经会在启动 hbase 之前先自动启动 zkServer。
[lc@master bin] ./start-hbase.sh启动后 master 上运行了 HMaster

从机的情况


4.4.2. 访问端口
Section titled “4.4.2. 访问端口”进入 https://172.22.0.3:60010/ 中,查看启动情况。

4.4.3. 停止服务
Section titled “4.4.3. 停止服务”master 停止 hbase
[lc@master bin] ./stop-hbase.sh停止 hdfs
[lc@master ~] stop-dfs.sh