大数据处理技术导论(3) | Datawhale组队学习46期

项目地址 https://github.com/datawhalechina/juicy-bigdata,感谢项目团队的付出。
本次主要学习 hbase 相关内容。

1.产生背景

hadoop 只能按照顺序进行读取,效率较低。HBase 专门用来解决 HDFS 数据的随机访问问题。

2.概述

HBase 是构建在 hadoop 系统上的**高可靠、高性能、面向列、可伸缩的分布式数据库。主要存储半结构化、非结构化数据。特点是稀疏存储(没有值的字段不占用存储空间)。

3.访问接口

HBase 提供了丰富的访问接口。

  • 最常规、最高效的是 Native Java API ,是面向 java 程序的。
  • HBase Shell 是面向程序员或者数据开发工程师的命令行工具,主要用来进行 HBase 管理及数据的查询。
  • Thrift Gateway Thrift 序列化技术为其他异构系统访问 HBase 表数据提供支撑。
  • REST Gateway REST HTTP API 彻底解除了语言的限制。
  • pig 支持使用 pig latin 流式编程语言进行 HBase 表数据的处理,适合做统计分析,当然,对使用者的要求也很高。
  • hive 是对数据开发工程师甚至业务人员最友好的接口,可以通过 sql 来访问 HBase 数据,缺点是响应时间较长。

4. HBase 数据模型

  • rowkey:HBase 表的主键,也是 HBase 表的索引。
  • column family:某些列的分组。HBase 表中的所有列可以分为多个列族(逻辑概念、逻辑分组)
  • coumn:某个列族内 ,column 用来标识某一列。
  • value:rowkey、column family、column 共同锁定一个 cell 单元格,这个单元格的值就是此列的 value。

5. HBase 预分区

HBase 表创建时,默认分配某个 region server 的一个 region ,数据量小的时候没有问题,数据量达到一个量级之后(10GB)才会进行拆分,新增一个 region,这种情况下,分配的这个 region server 压力较大,而集群中的其他 region server 则处于空闲状态,未能发挥集群的优势。因此,需要人为进行预分区。

预分区可以有如下几个有点:

  • 提供数据操作效率(读和写);
  • 使得集群处于负载均衡的状态,防止数据倾斜;
  • 便于容灾调度 region;
  • 优化 map 数量

6. HBase 预分区设计和制定

hbase 预分区一般采用 2 位数字前缀,即:10,20,30,40,50,60,70,80,90,(第一个分区没用 Start Key,最后一个分区没用 End Key,所以是 10 个分区)。

设置命令如下:

create 'test:student', 'data',{SPLITS => ['10|','20|','30|','40|','50|','60|','70|','80|','90|']}

也可以使用 16 进制序列设置预分区。

设置命令如下:

create 'test:student', 'data', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

此时,其预分区是 11111111 ~ ffffffff,(第一个分区没用 Start Key,最后一个分区没用 End Key,所以是 16 个分区)。

需要特别注意的是预分区的设计和 HBase rowkey 的设计紧密相关,因为良好的 rowkey 设计能够确保数据能够均匀的命中不同的 region ,从而避免 ​​数据写入热点​​ 的产生,实现写请求的负载均衡。

7. HBase 表数据排序与 rowkey 设计

HBase 表是按照 rowkey 的字典顺序进行升序排列的。想要快速获取最新产生的数据,必须要好好设计一下 rowkey,正常情况下,一个变量会随着时间的延续而增大。有一个方法是使用一个未来日期的时间戳 - 当前时间戳 timestamp 作为 rowkey 的后缀,比如 2099年1月1日0点的时间戳 - timestamp 作为 rowkey 的后缀,rowkey 的前缀则尽量与业务相关且不能造成数据热点,假设业务主键是手机号码,手机号反转就能很好的规避数据热点问题,因为手机尾号可以均匀的落到预分区的不同 region。最终的 rowkey 设计为:手机号码反转_(4071744000000 - timestamp) ,既考虑了业务,又规避了数据热点问题,又能快速的获取到最新的数据(每个用户的第一条数据就是该用户最新的数据)。

8. 我开发的小工具

HBase 环境部署过程此处不再赘述,HBase Shell 不同于 SQL 命令,写起来有些晦涩难懂,我最近用 ChatGPT 开发了一款 Java GUI 工具,推荐你试试。
下载地址:

链接:https://pan.baidu.com/s/1B66aH4WL5PnIxy76qYSMkw?pwd=u820
提取码:u820

或者访问 https://github.com/mba1398/hbase-shell-gui-tool 进行下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值