Centos Linux 单机安装 HBase 、使用 HBase

Centos Linux 单机安装 HBase 、使用 HBase

视频教程链接:https://www.bilibili.com/video/BV1Z84y1z787/

1. HBase 简介

hbase_logo.png

  • HBase是一个开源的、分布式的、版本化的、非关系数据库,适合对大数据进行随机、实时的读/写访问。

  • HBase 是 Apache Hadoop 项目的子项目,适合存储非结构化数据,基于列而不是基于行。

  • HBase的名字的来源是Hadoop database,即 Hadoop 数据库。

2. 准备工作

2.1. 拥有一台 Centos Linux 机器

参考文章:

《VMware 安装 Centos 7 Linux 虚拟机》(含b站视频教程链接):
https://www.hanshuixin.com/app/blog/detail/839c494401839c52b7642c9380920001

2.2. Centos Linux 安装好 JDK、配置好环境变量

参考文章:

《Centos Linux 安装 JDK 8、配置环境变量》(含b站视频教程链接):

https://www.hanshuixin.com/app/blog/detail/839c494401839e49fa8a2c9380920002

2.3. 在 CentOS Linux 上安装好 Hadoop

参考文章:

《Centos Linux 安装单机 Hadoop(HDFS)》(含b站视频教程链接):

https://www.hanshuixin.com/app/blog/detail/839c49440183a41b4a732c9380920003

2.4. 下载 HBase

  • 查看 JDK 版本 与 HBase 版本的兼容性对照表:

    官网文档地址:

    https://hbase.apache.org/book.html#basic.prerequisites

    HBase VersionJDK 6JDK 7JDK 8JDK 11
    HBase 2.3+❌ 不兼容❌ 不兼容✔️ 兼容⚠️ 未经测试*
    HBase 2.0-2.2❌ 不兼容❌ 不兼容✔️ 兼容❌ 不兼容
    HBase 1.2+❌ 不兼容✔️ 兼容✔️ 兼容❌ 不兼容
    HBase 1.0-1.1❌ 不兼容✔️ 兼容⚠️ 未经测试❌ 不兼容
    HBase 0.98✔️ 兼容✔️ 兼容⚠️ 未经测试❌ 不兼容
    HBase 0.94✔️ 兼容✔️ 兼容❌ 不兼容❌ 不兼容

    查看安装机器的 JDK 版本

    java -version
    # 结果为 1.8.0_341
    

    根据结果可知,JDK 8 可以安装 HBase 1.2+ 、HBase 2.0-2.2 、HBase 2.3+ 。

  • 查看Hadoop 版本 与 HBase 版本的兼容性对照表

    官网文档地址:

    https://hbase.apache.org/book.html#basic.prerequisites

    HBase-2.3.xHBase-2.4.x
    Hadoop-2.10.x✔️ 兼容✔️ 兼容
    Hadoop-3.1.0❌ 不兼容❌ 不兼容
    Hadoop-3.1.1+✔️ 兼容✔️ 兼容
    Hadoop-3.2.x✔️ 兼容✔️ 兼容
    Hadoop-3.3.x✔️ 兼容✔️ 兼容
    HBase-2.0.xHBase-2.1.xHBase-2.2.x
    Hadoop-2.6.1+✔️ 兼容❌ 不兼容❌ 不兼容
    Hadoop-2.7.[0-6]❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-2.7.7+✔️ 兼容✔️ 兼容❌ 不兼容
    Hadoop-2.8.[0-2]❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-2.8.[3-4]✔️ 兼容✔️ 兼容❌ 不兼容
    Hadoop-2.8.5+✔️ 兼容✔️ 兼容✔️ 兼容
    Hadoop-2.9.[0-1]⚠️ 未经测试❌ 不兼容❌ 不兼容
    Hadoop-2.9.2+⚠️ 未经测试⚠️ 未经测试✔️ 兼容
    Hadoop-3.0.[0-2]❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-3.0.3+❌ 不兼容✔️ 兼容❌ 不兼容
    Hadoop-3.1.0❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-3.1.1+❌ 不兼容✔️ 兼容✔️ 兼容
    HBase-1.5.xHBase-1.6.xHBase-1.7.x
    Hadoop-2.7.7+✔️ 兼容❌ 不兼容❌ 不兼容
    Hadoop-2.8.[0-4]❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-2.8.5+✔️ 兼容✔️ 兼容✔️ 兼容
    Hadoop-2.9.[0-1]❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-2.9.2+✔️ 兼容✔️ 兼容✔️ 兼容
    Hadoop-2.10.x⚠️ 未经测试✔️ 兼容✔️ 兼容
    HBase-1.0.x (Hadoop 1.x is NOT supported)HBase-1.1.xHBase-1.2.xHBase-1.3.xHBase-1.4.x
    Hadoop-2.4.x✔️ 兼容✔️ 兼容✔️ 兼容✔️ 兼容❌ 不兼容
    Hadoop-2.5.x✔️ 兼容✔️ 兼容✔️ 兼容✔️ 兼容❌ 不兼容
    Hadoop-2.6.0❌ 不兼容❌ 不兼容❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-2.6.1+⚠️ 未经测试⚠️ 未经测试✔️ 兼容✔️ 兼容❌ 不兼容
    Hadoop-2.7.0❌ 不兼容❌ 不兼容❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-2.7.1+⚠️ 未经测试⚠️ 未经测试✔️ 兼容✔️ 兼容✔️ 兼容
    HBase-0.92.xHBase-0.94.xHBase-0.96.xHBase-0.98.x (Support for Hadoop 1.1+ is deprecated.)
    Hadoop-0.20.205✔️ 兼容❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-0.22.x✔️ 兼容❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-1.0.x❌ 不兼容❌ 不兼容❌ 不兼容❌ 不兼容
    Hadoop-1.1.x⚠️ 未经测试✔️ 兼容✔️ 兼容⚠️ 未经测试
    Hadoop-0.23.x❌ 不兼容✔️ 兼容⚠️ 未经测试❌ 不兼容
    Hadoop-2.0.x-alpha❌ 不兼容⚠️ 未经测试❌ 不兼容❌ 不兼容
    Hadoop-2.1.0-beta❌ 不兼容⚠️ 未经测试✔️ 兼容❌ 不兼容
    Hadoop-2.2.0❌ 不兼容⚠️ 未经测试✔️ 兼容✔️ 兼容
    Hadoop-2.3.x❌ 不兼容⚠️ 未经测试✔️ 兼容✔️ 兼容
    Hadoop-2.4.x❌ 不兼容⚠️ 未经测试✔️ 兼容✔️ 兼容
    Hadoop-2.5.x❌ 不兼容⚠️ 未经测试✔️ 兼容✔️ 兼容

    查看安装机器的 Hadoop 版本

    hadoop version
    # 结果为 Hadoop 3.3.4
    

    根据结果可知,Hadoop 3.3.4 可以安装 HBase-2.3.x 、HBase-2.4.x。

  • 官网提供的版本

    HBase 官网下载地址:

    https://hbase.apache.org/downloads.html

HBase下载版本列表.png

3. 安装、配置 HBase

3.1. 上传 HBase 安装包、解压、放到安装位置

将安装包 hbase-2.4.14-bin.tar.gz 上传到 /root/ 目录。

# 进入到root目录
cd /root
# 解压  
tar -zxvf hbase-2.4.14-bin.tar.gz
# 创建安装目录
mkdir /usr/local/hbase/
# 将解压后的hadoop挪到创建的安装目录
mv /root/hbase-2.4.14/ /usr/local/hbase/
# 进入到安装目录
cd /usr/local/hbase/hbase-2.4.14/
# 查看
ll

3.2. 修改 HBase 配置文件

3.2.1. 修改hbase-env.sh
# 查看本机 JAVA_HOME 的值
echo $JAVA_HOME
# 结果为 /usr/local/java/jdk1.8.0_341 ,将该值配到下面脚本
vi /usr/local/hbase/hbase-2.4.14/conf/hbase-env.sh

添加以下内容:

export JAVA_HOME=/usr/local/java/jdk1.8.0_341
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"

注:HBase 自带 zookeeper ,上述配置文件中的 HBASE_MANAGES_ZK=true 默认为 true,代表使用自带的 zookeeper。此处使用默认配置,即使用 HBase 自带的 zookeeper。

3.2.2. 修改hbase-site.xml
vi /usr/local/hbase/hbase-2.4.14/conf/hbase-site.xml

添加以下内容:

  <property>
    <!-- 伪分布式 -->
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>

  <property>
    <!-- region server 的共享 HDFS 目录,用来持久化 Hbase -->
    <name>hbase.rootdir</name>
    <value>hdfs://127.0.0.1:9000/hbase</value>
  </property>

  <property>
    <!-- hbase 的 zookeeper 集群的地址列表,用逗号分隔 -->
    <name>hbase.zookeeper.quorum</name>
    <value>127.0.0.1</value>
  </property>

  <property>
    <!-- zookeeper 快照存放地址 -->
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/usr/local/hbase/hbase-2.4.14/data/zookeeper</value>
  </property>
3.2.3. 修改regionservers
vi /usr/local/hbase/hbase-2.4.14/conf/regionservers

内容设置为:

127.0.0.1

3.3. 设置环境变量

vi /etc/profile

在文件末尾添加以下内容:

export HBASE_HOME=/usr/local/hbase/hbase-2.4.14
export PATH=$HBASE_HOME/bin:$PATH

使环境变量生效:

# 运行配置文件
source /etc/profile
# 检查 PATH 中是否包含 $HBASE_HOME/bin 对应的绝对路径
echo $PATH

3.4. 启动 Hadoop

HBase 是依赖 Hadoop 的,所以,先启动 Hadoop。

# 查看Hadoop是否启动
jps -l
# 启动Hadoop
start-all.sh

3.5. 启动 HBase

启动脚本位于/usr/local/hbase/hbase-2.4.14/bin/start-hbase.sh,由于配置了环境变量,可以直接执行start-hbase.sh脚本进行启动。

启动命令:

start-hbase.sh

4. 测试

4.1. HBase 使用

4.1.1. 登录到 HBase 命令行
hbase shell
4.1.2. 查看、创建 HBase 命名空间
# 列出所有命名空间
list_namespace
# 创建一个命名空间
create_namespace 'hbase_ns_test_1'
4.1.3. 查看 HBase 表
# 列出所有表
list
# 列出指定命名空间下的所有表
list_namespace_tables 'hbase_ns_test_1'
4.1.4. 设计 HBase 表
  • 需求

    有两个程序,第一个程序会每隔一小时,将全国每个县区的天气情况记录下来,第二个程序供后人查询某个时间某个地点的天气情况。

    要求设计一张HBase表,支持记录查询 指定时间、指定地点天气历史记录,时间粒度精确到小时、地点粒度精确到县区

  • 中文表名

    天气历史记录表

  • 英文表名

    weather_record

  • HBase 表全名

    命名空间:表名

    hbase_ns_test_1:weather_record

  • 列簇(Column Family)设计

    天气信息:weather_info ,存放 天气、温度、湿度、风力;

    时空信息:space_time_info,存放 时间、省、市、县区;

  • 行键(Row Key) 设计

    1. 满足查询条件

      支持查询 指定时间、指定地点 的天气历史记录。那么 rowkey 必须包含 时间、省、市、县区 这4个信息。

    2. 唯一性

      时间、省、市、县区 这4个信息拼起来可以唯一确定一条天气历史记录数据。

    3. 散列性(防止数据倾斜)

      Hbase 在读写数据时需要通过 RowKey 找到对应的 Region。在 HBase 中,一个 Region 就相当于一个数据分片,每个 Region 都有 StartRowKey 和 StopRowKey(用来表示 Region 存储的 RowKey 的范围),HBase表里面的数据是按照 RowKey 来分散存储到不同的 Region 里面的。

      散列性要求将数据记录均衡的分散到不同的 Region 中,避免热点现象、导致数据倾斜(当大量请求访问 HBase 集群的一个或少数几个节点,造成少数 RegionServer 的读写请求过多,负载过大,而其他 RegionServer 负载却很小)。

      此处使用一个简单方法实现散列:反转时间 作为rowkey的开头。

      时间是以年开头的,年份变化很慢;倒序之后为小时开头,小时变化较快。如将2022101201倒序为1021012202。这样,rowkey 的开头就是 在 0~9 之间变化的,否则 rowkey 的开头是 2022 的 第一个数字 2。如下表所示:

      小时00010223
      时间(正序)2022101200202210120120221012022022101223
      时间(倒序)0021012202102101220220210122023221012202
    4. 最终 rowkey

      rowkey组成:时间(倒序)~省~市~县区

      案例:1021012202~GuangDong~GuangZhou~LiWan

  • 表结构

    表名天气历史记录表(weather_record)
    列簇天气信息(weather_info)时空信息(space_time_info)行键(rowkey)
    字段名天气(weather)温度(temperature)湿度(humidity)风力(wind_power)时间(time)省级(province)地市(city)县区(county)
    sunny280.3322022-10-12_01GuangDongGuangZhouLiWan1021012202~GuangDong~GuangZhou~LiWan
    sunny270.3522022-10-12_01GuangDongGuangZhouTianhe1021012202~GuangDong~GuangZhou~Tianhe
    sunny290.3222022-10-12_02GuangDongGuangZhouLiWan2021012202~GuangDong~GuangZhou~LiWan
    rain190.6732022-10-12_01ZheJiangHangZhouXiHu1021012202~ZheJiang~HangZhou~XiHu
4.1.5. 创建 HBase 表
# 查看要创建的表是否存在
exists 'hbase_ns_test_1:weather_record'
# 建表命令:create '表名','列簇名1','列簇名2',...
create 'hbase_ns_test_1:weather_record','weather_info','space_time_info'
4.1.6. 新增数据到 HBase 表中
# put '表名','行键','列簇名:列名','值'[,'时间戳']

# 第1行
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~LiWan','weather_info:weather','sunny'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~LiWan','weather_info:temperature','28'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~LiWan','weather_info:humidity','0.33'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~LiWan','weather_info:wind_power','2'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~LiWan','space_time_info:time','2022-10-12_01'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~LiWan','space_time_info:province','GuangDong'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~LiWan','space_time_info:city','GuangZhou'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~LiWan','space_time_info:county','LiWan'

# 第2行
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~Tianhe','weather_info:weather','sunny'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~Tianhe','weather_info:temperature','27'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~Tianhe','weather_info:humidity','0.35'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~Tianhe','weather_info:wind_power','2'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~Tianhe','space_time_info:time','2022-10-12_01'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~Tianhe','space_time_info:province','GuangDong'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~Tianhe','space_time_info:city','GuangZhou'
put 'hbase_ns_test_1:weather_record','1021012202~GuangDong~GuangZhou~Tianhe','space_time_info:county','Tianhe'

# 第3行
put 'hbase_ns_test_1:weather_record','2021012202~GuangDong~GuangZhou~LiWan','weather_info:weather','sunny'
put 'hbase_ns_test_1:weather_record','2021012202~GuangDong~GuangZhou~LiWan','weather_info:temperature','29'
put 'hbase_ns_test_1:weather_record','2021012202~GuangDong~GuangZhou~LiWan','weather_info:humidity','0.32'
put 'hbase_ns_test_1:weather_record','2021012202~GuangDong~GuangZhou~LiWan','weather_info:wind_power','2'
put 'hbase_ns_test_1:weather_record','2021012202~GuangDong~GuangZhou~LiWan','space_time_info:time','2022-10-12_02'
put 'hbase_ns_test_1:weather_record','2021012202~GuangDong~GuangZhou~LiWan','space_time_info:province','GuangDong'
put 'hbase_ns_test_1:weather_record','2021012202~GuangDong~GuangZhou~LiWan','space_time_info:city','GuangZhou'
put 'hbase_ns_test_1:weather_record','2021012202~GuangDong~GuangZhou~LiWan','space_time_info:county','LiWan'

# 第4行
put 'hbase_ns_test_1:weather_record','1021012202~ZheJiang~HangZhou~XiHu','weather_info:weather','rain'
put 'hbase_ns_test_1:weather_record','1021012202~ZheJiang~HangZhou~XiHu','weather_info:temperature','19'
put 'hbase_ns_test_1:weather_record','1021012202~ZheJiang~HangZhou~XiHu','weather_info:humidity','0.67'
put 'hbase_ns_test_1:weather_record','1021012202~ZheJiang~HangZhou~XiHu','weather_info:wind_power','3'
put 'hbase_ns_test_1:weather_record','1021012202~ZheJiang~HangZhou~XiHu','space_time_info:time','2022-10-12_01'
put 'hbase_ns_test_1:weather_record','1021012202~ZheJiang~HangZhou~XiHu','space_time_info:province','ZheJiang'
put 'hbase_ns_test_1:weather_record','1021012202~ZheJiang~HangZhou~XiHu','space_time_info:city','HangZhou'
put 'hbase_ns_test_1:weather_record','1021012202~ZheJiang~HangZhou~XiHu','space_time_info:county','XiHu'
4.1.7. 查看 HBase 表数据
  • 查看表行数

    # count '表名'
    count 'hbase_ns_test_1:weather_record'
    
  • 查看表中全部数据

    # scan '表名'
    scan 'hbase_ns_test_1:weather_record'
    
  • 查看指定 rowkey 的一行数据

    这里查看 “2022年10月12日01时” > ”浙江省“ > ”杭州市“ > ”西湖区“ 的天气,那么rowkey 就是1021012202~ZheJiang~~HangZhou~XiHu

    # get '表名','rowkey'
    get 'hbase_ns_test_1:weather_record','1021012202~ZheJiang~HangZhou~XiHu'
    
  • 查看指定 rowkey 区间的数据

    这里查看 “2022年10月12日01时” > “广东省” > “广州市” 所有县区的天气,那么rowkey 的范围就是 1021012202~GuangDong~GuangZhou~A ~ 1021012202~GuangDong~GuangZhou~Z

    # scan '表名',{STARTROW=>'rowkey范围开始行前缀',STOPROW=>'rowkey范围结束行前缀',LIMIT=>结果集大小}
    scan 'hbase_ns_test_1:weather_record',{STARTROW=>'1021012202~GuangDong~GuangZhou~A',STOPROW=>'1021012202~GuangDong~GuangZhou~Z',LIMIT=>10}
    

4.2. HBase Web 页面

# 防火墙放行 16010 tcp 端口
firewall-cmd --zone=public --add-port=16010/tcp --permanent
# 防火墙重新加载
firewall-cmd --reload

浏览器访问部署机器IP:16010

http://192.168.10.31:16010

HBase_Web.png

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CentOS 7上安装HBase,可以按照以下步骤进行操作: 1. 首先,确保已经安装了Java Development Kit (JDK)。可以通过运行以下命令来检查是否已安装JDK: ``` java -version ``` 如果没有安装JDK,请使用以下命令安装: ``` yum install java-devel ``` 2. 下载HBase压缩包。你可以通过访问HBase官方网站来获取最新版本的下载链接。 3. 解压下载的压缩包。你可以使用以下命令解压: ``` tar -zxvf hbase-x.x.x.tar.gz ``` 4. 将解压后的HBase移动到合适的位置。你可以使用以下命令将解压后的文件夹移动到`/usr/hbase`文件夹: ``` mv hbase-x.x.x /usr/hbase ``` 5. 配置HBase。进入HBase配置目录,可以使用以下命令: ``` cd /usr/hbase/conf ``` 6. 编辑HBase环境配置文件`hbase-env.sh`,添加Java环境变量。可以使用以下命令打开该文件: ``` vim hbase-env.sh ``` 在文件末尾添加以下行,将`JAVA_HOME`替换为你的JDK安装路径: ``` export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk ``` 7. 配置HBase主节点。打开`hbase-site.xml`文件,可以使用以下命令: ``` vim hbase-site.xml ``` 在文件中添加以下内容以配置HBase主节点: ``` <configuration> <property> <name>hbase.master</name> <value>localhost:60000</value> </property> </configuration> ``` 8. 启动HBase使用以下命令启动HBase: ``` /usr/hbase/bin/start-hbase.sh ``` 9. 验证HBase是否成功安装。你可以使用以下命令启动HBase shell: ``` /usr/hbase/bin/hbase shell ``` 如果成功启动了HBase shell,则表示HBase已成功安装
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒水馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值