第五次
1. HBase 基础知识
Hbase 是一种 NoSQL 数据库,不像传统的 RDBMS 那样支持 SQL 作为查询语言。Hbase 是一种分布式存储的数据库,技术上来讲,它更像是分布式存储而不是分布式数据库,它缺少很多 RDBMS 系统的特性,比如列类型,辅助索引,触发器和高级查询语言等待。
在关系型数据库的多表查询中,原理是进行笛卡儿积后,再进行过滤,而这对于数据量巨大的情况下,效率是相当低下的。
2. HBase 和 zookeeper 单机安装
2.1. 下载
在 https://zookeeper.apache.org 的 Apache ZooKeeper 下载 bin.tar.gz
文件,并上传到虚拟机。
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 hbase
2.3. 添加环境变量
[lc@master ~]$ vi .bash_profile
2.4. 配置 zookeeper
2.4.1. 修改配置文件 ZK_HOME/conf/zoo.cfg
先复制一份 zoo_example.cfg
,然后修改复制的 zoo.cfg
,将数据路径 dataDir
修改至自己的路径
dataDir=/home/lc/zookeeper/data
2.4.2. 创建 data
文件夹
[lc@master zookeeper]$ mkdir data
2.4.3. 尝试开启 zookeeper 服务
[lc@master zookeeper]$ zkServer.sh start
2.4.4. 查看 zookeeper 状态
此处显示开启了单机模式 (standalone)
[lc@master zookeeper]$ zkServer.sh status
2.4.5. 此时 data
目录下生成了以下内容
2.4.6. 使用 jps
命令,列出以下的进程
2.4.7. 停止服务
[lc@master ~]$ zkServer.sh stop
2.5. 配置 hbase
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
将以下配置写入 <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
下启动
[lc@master bin]$ pwd/home/lc/hbase/bin[lc@master bin]$ ./start-hbase.sh
2.6.2. 使用 jps
命令,查看 hbase 进程 HMaster 是否运行
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.4. 访问测试 http://172.22.0.3:60010/
2.6.5. 停止服务
[lc@master bin]$ ./stop-hbase.sh # 此处可以先不暂停
3. HBase shell 命令的使用
3.1. 开启 shell
在 $HBASE_HOME/bin
下执行命令
[lc@master bin]$ ./hbase shell
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. 分布式模式
4.1. 在从机上同样安装 zookeeper
4.1.1. 使用 scp
拷贝
该命令会利用 ssh 进行拷贝,因此可以将文件传输到从属机上。-r
表示递归。
[lc@master ~]$ scp -r zookeeper/ slave1:/home/lc[lc@master ~]$ scp -r zookeeper/ slave2:/home/lc
4.1.2. 修改 zoo.cgf
由于需要配置集群,所以向配置文件中写入各个服务器
[lc@master ~]$ vi zookeeper/conf/zoo.cfg
server.1=master:2888:3888server.2=slave1:2888:3888server.3=slave2:2888:3888
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/conf
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
[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 firewalld
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 数据的文件夹
[lc@master ~] hadoop fs -mkdir /hbase
4.3. 配置和克隆 hbase
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
<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
在 hbase/conf/
下创建 regionservers
文件,其中写入 hbase 部署的主机名。
4.2.5. 确认 Hadoop 的依赖 jar 文件与 Hbase 的版本相同
4.2.6. 拷贝 hbase 至从机
[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。
[lc@master bin] ./start-hbase.sh
启动后 master 上运行了 HMaster
从机的情况
4.4.2. 访问端口
进入 https://172.22.0.3:60010/ 中,查看启动情况。
4.4.3. 停止服务
master 停止 hbase
[lc@master bin] ./stop-hbase.sh
停止 hdfs
[lc@master ~] stop-dfs.sh