Hbase 单机环境搭建

35 篇文章 4 订阅

大数据处理场景
比如我要想对十几亿数据进行排序,肯定不能放在关系型数据库排序。首当其冲就要想到一个能高效存储与高效读取的数据库,这里我想到了分布式数据库Hbase。今天我们就只讲下Hbase安装,后面会讲到数据读取出来了如何高效进行排序。

HBase优点
(1)、表大:一个表可以有数亿行,上百万列。

(2)、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态增加,同一个表中的不同行的可以有截然不同的列。

(3)、面向列:HBase是面向列的的存储和权限控制,列族独立索引。

(4)、稀疏:空(null)列并不占用空间,表可以设计的非常稀疏。

(5)、数据类型单一:HBase中的数据都是字符串,没有类型。

(6)、数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳。

  1. HBase缺点
    HBase是一个非关系型数据库但是它不支持SQL语句
    单一RowKey固有的局限性决定了它不可能有效地支持多条件查询
    数据类型单一,HBase中数据类型都是字符串
    不适合于大范围扫描查询
    Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利。

Hbase安装
先安装java环境

[bl-admin@develop-001 ~]$ java -version
java version “1.8.0_11”
Java™ SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot™ Server VM (build 25.11-b03, mixed mode)
在单机模式中,HBase并不使用 HDFS,仅使用本地文件系统 —— ZooKeeper程序与HBase程序运行在同一个JVM进程中。

下载Hbase

[bl-admin@develop-001 app]$ wget http://archive.apache.org/dist/hbase/1.2.1/hbase-1.2.1-bin.tar.gz
[bl-admin@develop-001 app]$ tar -zxvf hbase-1.2.1-bin.tar.gz
记住JAVA_HOME路径

[bl-admin@develop-001 app]$ echo $JAVA_HOME
/home/bl-admin/app/jdk1.8.0_11
编辑文件vim conf/hbase-env.sh,去掉#注释,JAVA_HOME改成jdk对应的路径:

export JAVA_HOME=/home/bl-admin/app/jdk1.8.0_11
export HBASE_MANAGES_ZK=true
Hbase依赖于zookeeper,所有的节点和客户端都必须能够访问zookeeper。

HBase的安装包里面有自带的ZooKeeper,HBASE_MANAGES_ZK环境变量用来设置是使用HBase默认自带的 Zookeeper还是使用独立的ZooKeeper。

HBASE_MANAGES_ZK为 false 时使用独立的.
HBASE_MANAGES_ZK为 true 时表示使用默认自带的,让Hbase启动的时候同时也启动自带的ZooKeeper。
创建hbase数据存储文件路径

mkdir -R /home/bl-admin/app/hbase-1.2.1/data
修改hbase-site.xml 配置

hbase.rootdir file:///home/bl-admin/app/hbase-1.2.1/data 默认情况下Hbase是写到/tmp的,在重启的时候/tmp会被清空,数据就会丢失。

启动HBase

[bl-admin@develop-001 hbase-1.2.1]$ sh bin/start-hbase.sh
[bl-admin@develop-001 hbase-1.2.1]$ jps
28033 HMaster
可以看到HMaster进程已经启动了。

HBase Shell交互

[bl-admin@develop-001 hbase-1.2.1]$ sh bin/hbase shell
2021-02-25 11:09:04,594 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
HBase Shell; enter ‘help’ for list of supported commands.
Type “exit” to leave the HBase Shell
Version 1.2.1, r8d8a7107dc4ccbf36a92f64675dc60392f85c015, Wed Mar 30 11:19:21 CDT 2016

hbase(main):001:0>
Hbase存储理论
Hbase的列式存储

也就是列族存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。为了加深对Hbase列族的理解,下面是一个简单的关系型数据库的表和Hbase数据库的表:

在这里插入图片描述

Column Family的概念

Column Family又叫列族,列族下面可以包含任意多的列,Hbase表的创建的时候就必须指定列族。Hbase的列族不是越多越好,官方推荐的是列族最好小于或者等于3。我们使用的场景一般是1个列族。

Rowkey的概念

Rowkey的概念和mysql中的主键是完全一样的,Hbase使用Rowkey来唯一的区分某一行的数据。由于Hbase只支持3中查询方式:

通过 get 方式,指定 RowKey 获取唯一一条记录。
通过 scan 方式,设置 startRow 和 stopRow 参数进行范围匹配。
全表扫描,即直接扫描整张表中所有行记录。
Region的概念

Region的概念和关系型数据库的分区或者分片差不多。Hbase会将一个大表的数据基于Rowkey的不同范围分配到不通的Region中,每个Region负责一定范围的数据访问和存储。这样即使是一张巨大的表,由于被切割到不通的region,访问起来的时延也很低。

TimeStamp的概念

TimeStamp对Hbase来说至关重要,因为它是实现Hbase多版本的关键。在Hbase中使用不同的timestame来标识相同rowkey行对应的不通版本的数据。

在写入数据的时候,如果用户没有指定对应的timestamp,Hbase会自动添加一个timestamp,timestamp和服务器时间保持一致。

在Hbase中,相同rowkey的数据按照timestamp倒序排列。默认查询的是最新的版本,用户可同指定timestamp的值来读取旧版本的数据。

实操
回到我们的HBase Shell交互,我们来创建一张表

hbase(main):002:0> create ‘hbase_person’, {NAME=>‘cf1’}
0 row(s) in 1.4640 seconds

=> Hbase::Table - hbase_person
这里我们创建了一个列族的表hbase_person 。

向表中添加数据,在想HBase的表中添加数据的时候,只能一列一列的添加,不能同时添加多列。

hbase(main):015:0* put ‘hbase_person’, ‘1346731042838609920-B48EEA48A42BDC39AE4A2B03BEA09AB96CB77981F72E7003FD5FDB76BADF8AAD’,‘cf1:n1’,‘1’
0 row(s) in 0.0170 seconds
Row Key设计

// 商家id-群id
1346731042838609920-B48EEA48A42BDC39AE4A2B03BEA09AB96CB77981F72E7003FD5FDB76BADF8AAD
这是我们业务要查询的维度。Row Key 设计尽量唯一,hbase靠这个来将数据设置到不通过的Region(分片),要尽量保证数据均衡的落到不同的Region上。

查询这条数据

hbase(main):016:0> get ‘hbase_person’,‘1346731042838609920-B48EEA48A42BDC39AE4A2B03BEA09AB96CB77981F72E7003FD5FDB76BADF8AAD’
COLUMN CELL
cf1:n1 timestamp=1614233584377, value=1
1 row(s) in 0.0360 seconds
到此我们Hbase的单机环境已经搭建好了,下面我们继续研究大数据处理

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值