目录
- 第一部分 HBase 安装
- 一 Linux 上安装 HBase
- 1 下载安装文件
- 2 配置环境变量
- 3 添加用户权限并检查
- 4 单机模式配置
- 5 伪分布式模式配置
- 第二部分 初步了解 HBase
- 一 创建表
- 二 添加数据
- 三 查看数据
- 四 删除数据
- 五 删除表
- 六 查询历史数据
第一部分 HBase 安装
一 Linux 上安装 HBase
HBase 有 3 种运行模式,即单机模式、伪分布式模式和分布式模式:
- 单机模式:采用本地文件系统存储数据。
- 伪分布式模式:采用伪分布式模式的 HDFS 存储数据。
- 分布式模式:采用分布式模式的 HDFS 存储数据。
在进行 HBase 安装配置之前,需要确认已经安装了 3 个组件:JDK、SSH 和 Hadoop:
- Linux 上安装 JDK 请参照:Linux系统安装Java环境。
- Linux 上安装 SSH 请参照:安装SSH。
- HBase 单机模式不需要安装 Hadoop,伪分布式模式和分布式模式需要安装 Hadoop,Linux 上安装 Hadoop 请参照:Linux系统安装Hadoop。
1 下载安装文件
HBase 是 Hadoop 生态系统中的一个组件,但是,Hadoop 安装以后本身并不包含 HBase,因此需要单独安装 HBase。
我们在这里选择下载 2.2.4 版本的 HBase 作为示例,也可酌情选择下载其他版本:
- 进入 HBase 官网安装文件下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/,点击 2.2.4/:
- 点击下载 hbase-2.2.4-bin.tar.gz:
- 打开 Linux 终端,进入刚才下载文件所在的目录,通过下列命令将下载文件解压并保存到 /usr/local/ 目录下:
sudo tar -zxf hbase-2.2.4-bin.tar.gz -C /usr/local/
- 进入 /usr/local/ 目录,通过下列命令修改文件夹名为 hbase,以方便使用:
sudo mv ./hbase-2.2.4/ ./hbase/
2 配置环境变量
将 HBase 安装目录下的 bin 目录即 /usr/local/hbase/bin/,添加到系统的 PATH 环境变量中,这样每次启动 HBase 时就不需要到 /usr/local/hbase/bin/ 目录下执行启动命令,方便 HBase 的使用。
- 使用 vim 编辑器打开 ~/.bashrc 文件,命令如下:
vim ~/.bashrc
- 打开 .bashrc 文件以后,将以下语句加到文件第一行,如果已经有其他的 PATH 环境变量配置信息,只需要用英文冒号 “:” 隔开,将 /usr/local/hbase/bin 追加到其后即可:
export PATH=$PATH:/usr/local/hbase/bin
- 保存并退出 .bashrc 文件后,执行如下命令使设置生效:
source ~/.bashrc
3 添加用户权限并检查
- 为当前登录 Linux 系统的用户添加访问 HBase 目录的权限,将 HBase 安装目录下的所有文件的所有者改为当前登录用户,命令如下:
sudo chown -R 自己的用户名 /usr/local/hbase/
- 查看 HBase 版本信息,查看 HBase 是否安装成功:
hbase version
- 出现以下信息,说明安装成功:
4 单机模式配置
- 配置 hbase-env.sh 文件,打开 hbase-env.sh 文件以后,需要在 hbase-env.sh 文件中配置 JAVA 环境变量,通过以下命令可以知道自己的 JAVA 环境变量:
echo $JAVA_HOME
- 此外,还需要添加 Zookeeper 配置信息,配置 HBASE_MANAGES_ZK 为 true,表示由 HBase 自己管理 Zookeeper,不需要单独的 Zookeeper,因此,需要在 hbase-env.sh 文件中加入以下信息:
export JAVA_HOME=<自己的 JAVA 环境变量>
export HBASE_MANAGES_ZK=true
- 配置 hbase-site.xml 文件,在 hbase-site.xml 文件中,需要设置属性 hbase.rootdir,用于指定 HBase 数据的存储位置,如果没有设置,则 hbase.rootdir 默认数据存储在临时文件夹,这意味着每次重启系统都会丢失数据,这里把 hbase.rootdir 设置为 HBase 安装目录下的 hbase-tmp 文件夹,即 /usr/local/hbase/hbase-tmp,修改后的 hbase-site.xml 文件中的配置信息如下:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///usr/local/hbase/hbase-tmp</value>
</property>
</configuration>
- 启动并运行 HBase,可通过以下命令启动 HBase:
start-hbase.sh
- 输入
hbase shell
命令进入 HBase Shell 命令行模式,在该命令行模式,我们可以通过输入 Shell 命令来操作 HBase 数据库,输入quit
或exit
即可退出该模式: - 停止 HBase 运行:
stop-hbase.sh
5 伪分布式模式配置
- 配置 hbase-env.sh 文件,除了如单机模式那样配置 JAVA_HOME 和 HBASE_MANAGES_ZK 外,在伪分布式模式下,我们还需要设置 HBASE_CLASSPATH 参数为本机 Hadoop 安装目录下的 conf 目录,因此,在 hbase-env.sh 文件中,应该添加如下信息:
export JAVA_HOME=<自己的 JAVA 环境变量>
export HBASE_CLASSPATH=<自己的 Hadoop 安装目录>/conf/
export HBASE_MANAGES_ZK=true
- 配置 hbase-site.xml 文件,不同于单机模式那样设置 hbase.rootdir 属性为 HBase 安装目录下的 hbase-tmp 文件夹,在伪分布式模式下,需要使用伪分布式模式的 HDFS 存储数据,因此需要把 hbase.rootdir 属性设置为 HBase 在 HDFS 上的存储路径,一般地,HDFS 的访问路径为 hdfs://localhost:9000/,所以该属性应该设置为 hdfs://localhost:9000/hbase,此外,在伪分布式模式下,我们还需要设置 hbase.cluster.distributed 为 true,修改后的 hbase-site.xml 文件中的配置信息如下:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
- 登录 SSH:
ssh localhost
- 启动 Hadoop,让 HDFS 进入运行状态,从而可以为 HBase 存储数据:
start-dfs.sh
输入命令 jps
,如果能够看到 NameNode、DataNode 和 SecondaryNameNode 这三个进程,则表示已成功启动 Hadoop。
- 启动并运行 HBase:
start-hbase.sh
输入命令 jps
,如果能够看到 HRegionServer、HQuorumPeer 和 HMaster 这三个进程,则表示已成功启动 HBase。
启动成功后,可以输入 hbase shell
命令进入 HBase Shell 命令行模式,在该命令行模式,我们可以通过输入 Shell 命令来操作 HBase 数据库。
- 先后关闭 HBase 和 Hadoop 服务:
stop-hbase.sh
stop-dfs.sh
第二部分 初步了解 HBase
在使用具体的 Shell 命令操作 HBase 数据之前,需要首先启动 Hadoop, 然后再启动 HBase 和 HBase Shell,进入 Shell 命令提示符状态,具体命令如下:
start-dfs.sh
start-hbase.sh
hbase shell
一 创建表
在关系型数据库(如 MySQL)中,需要首先创建数据库,然后再创建表,但是在 HBase 数据库中,不需要创建数据库,只要直接创建表就可以了,在 HBase 中创建表的 Shell 命令为 create '表名','字段名1','字段名2','字段名3'
,例如,我们可以通过如下命令建立一张学生表:
create 'student','Sname','Ssex','Sage','Sdept','course'
创建完表后,可通过 describe '表名'
命令查看表的基本信息,我们可以执行 describe 'student'
命令查看学生表的信息:
还可以使用 list
命令查看当前 HBase 数据库中已经创建了哪些表:
二 添加数据
HBase 使用命令 put '表名','行键','字段名1','值1'
添加数据,一次只能为一个表的一行数据的一个列(也就是一个单元格,单元格是 HBase 中的概念)添加一个数据,所以直接用 Shell 命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。
需注意的是,对于 HBase 而言,在创建 HBase 表时,不需要自行创建行键,系统会默认一个属性作为行键,通常是把 put 命令操作中跟在表名后的第一个数据作为行键。
我们对刚才的学生表插入一条学生记录:
上面的 put 命令会为学生表中学号为 ‘12345’ 的学生添加信息,系统默认把跟在表名 student 后面的第一个数据 ‘12345’ 作为行键。
三 查看数据
HBase 中有两个用于查看数据的命令:
- 命令
get '表名','行键'
:用于查看表的某一个单元格数据,例如可以使用如下命令返回学生表中学号为 12345 的学生的数据: - 命令
scan '表名'
:用于查看某个表的全部数据,例如查询学生表的全部数据:
四 删除数据
HBase 中有两个用于删除数据的命令:
- 命令
delete '表名','行健','字段名1'
:用于删除一个单元格数据,是 put 的反向操作,例如删除学生表中 12345 这一行中的 Ssex 列的所有数据: - 命令
deleteall '表名','行健'
:用于删除一行数据,例如删除学生表中 12345 这一行的全部数据:
五 删除表
删除表需要分两步操作:
- 使用命令
disable '表名'
让要删除的表不可用; - 使用命令
drop '表名'
删除表.
例如删除刚才的学生表:
六 查询历史数据
在添加数据时,HBase 会自动为添加的数据添加一个时间戳,在修改数据时,HBase 会为修改后的数据生成一个新的版本(时间戳),从而完成 “改” 操作,但是旧的版本依旧会保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。
为了查询历史数据,这里创建一个教师表,在创建表的时候,指定保存的版本数为 5:
然后插入数据,并更新数据,使其产生历史版本数据,需要注意的是,这里插入数据和更新数据都是使用 put 命令:
查询时默认情况下会显示当前最新版本的数据,如果要查询历史数据,需要指定查询的历史版本数,由于上面设置了保存版本数为 5,所以,在查询时指定的历史版本数的有效取值为 1 到 5,但超过了不会报错,只会显示最大数目个版本: