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

news/2024/4/27 5:25:15/文章来源:https://blog.csdn.net/mba1398/article/details/128990119

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

文章目录

  • 1.产生背景
  • 2.概述
  • 3.访问接口
  • 4. HBase 数据模型
  • 5. HBase 预分区
  • 6. HBase 预分区设计和制定
  • 7. HBase 表数据排序与 rowkey 设计
  • 8. 我开发的小工具

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 进行下载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72551.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring代理模式——静态代理和动态代理

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

笔记本电脑电池和充电器CE认证IEC62133测试

EC 符合性声明 - 您可以从品牌所有者或欧盟境内的商品官方进口商处获取此文件。证明您的商品经过检测符合下表所列标准的文件。您也可以从品牌所有者或欧盟境内的官方进口商处获取此文件。原品牌的笔记本电脑或手机(如三星、苹果、戴尔、惠普等)提供的原…

【验证码的识别】—— 点触式验证码的识别

一、前言 大家好,不知不觉的我来csdn已经又一周年了,在这一年里,我收获了很多东西,我是2022年2月22日入驻CSDN的,一开始只是为了方便浏览文章的,后来,我也有事没事发发文章,创作了1…

leetcode 1011. Capacity To Ship Packages Within D Days(D天内运送包裹的容量)

数组的每个元素代表每个货物的重量,注意这个货物是有先后顺序的,先来的要先运输,所以不能改变这些元素的顺序。 要days天内把这些货物全部运输出去,问所需船的最小载重量。 思路: 数组内数字顺序不能变,就…

Python 自动化测试必会技能板块—unittest框架

说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest。的确,作为 Python 的标准库,它很优秀,并被广泛应用于各个项目。但其实在 Python 众多项目中,主流的单元测试框架远不止这一个。…

【C ++】C++入门知识(二)

C入门(二) 作者:小卢 专栏:《C》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 1.引用 1.1.引用的概念及应用 引用(&) 引用不是新定义一个变量&#xff0…

C语言格式化输出总结:%d,%c,%s,%f, %lf,%m.nd,%m.nf,%m.ns 以及sprintf函数

凡事发生必将有益于我,高手,从来都不仅仅是具备某种思维的人,而是那些具备良好学习习惯的人,成为高手,无他,手熟尔!加油在最近的学习之中,对于格式化输出这个知识点,这里…

Spring自动装配的底层逻辑

Spring是如何自动装配Bean的?看源码一些自己的理解,如有错漏,请指正 使用Spring之前我们要先去web.xml中设置一下Spring的配置文件,在Spring的配置文件中,是通过component-scan扫描器去扫描base-package底下所有的类装…

google hacker语句

哎,我就是沾边,就是不打实战( ̄o ̄) . z Z 文章目录前言一、什么是谷歌Docker?二、受欢迎的谷歌docker语句谷歌docker的例子日志文件易受攻击的 Web 服务器打开 FTP 服务器SSH私钥电子邮件列表实时摄像机MP3、电影和 PDF…

Rocky 9.1操作系统实现zabbix6.0的安装部署实战

文章目录前言一. 实验环境二. 安装zabbix过程2.1. 安装zabbix源2.2 安装zabbix相关的软件2.3 安装数据库并启动2.4 开始初始化数据库:2.5 创建数据库实例及对应的用户2.6 导入官网提供的数据2.7 配置zabbix 服务的配置文件2.8. 启动服务2.9 从网页进行安装2.10 登陆…

从0开始学python -37

Python3 错误和异常 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。 Python 有两种错误很容易辨认:语法错误和异常。 Python assert(断…

单元测试面试秘籍分享

1. 什么是单元测试 “在计算机编程中,单元测试又称为模块测试,是针对程序模块来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最…

代码随想录NO49 | 动态规划 _LeetCode1143.最长公共子序列 1035.不相交的线 53. 最大子序和

动态规划 _LeetCode1143.最长公共子序列 1035.不相交的线 53. 最大子序和今天继续子序列问题! 1143.最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符…

从功能测试(点点点)到进阶自动化测试,实现薪资翻倍我只用了3个月时间

前言 从事测试工作已3年有余了,今天想聊一下自己刚入门时和现在的今昔对比,虽然现在也没什么成就,只能说笑谈一下自己的测试生涯,各位看官就当是茶余饭后的吐槽吧,另外也想写一写自己的职场感想,希望对刚开…

如何使用 ESP-PROG 板的 Program 接口为 ESP32-S3-WROOM-1 系列的模组烧录固件?

ESP-PROG 是一款乐鑫推出的开发调试工具,具有自动下载固件、串口通信、JTAG 在线调试等功能。具体使用说明参见:ESP-Prog 下载与调试板介绍 。 ESP-Prog 采用 FTDI 公司的 FT2232HL 为 USB Bridge Controller 芯片,可通过配置将 USB 2.0 接口…

分布式链路追踪-skywalking

一、分布式调用链随着业务的高速发展,服务之间的调用关系愈加复杂线上每一个请求会经过多个业务系统,并产生对各种缓存或者DB 的访问,业务流会经过很多个微服务的处理和传递。问题:• —次请求的流量从哪个服务而来?最…

在CentOS-7.9配置vsftpd服务

文章目录一 vsftpd简介二 环境准备三 服务部署3.1 安装软件3.2 编写配置文件3.3 用户授权3.4 启动服务3.5 文件传输测试3.5.1 Windows到Linux3.5.2 filezilla3.5.3 从Linux到Linux一 vsftpd简介 FTP是 File Transfer Protocol 文件传输协议的简称。 VSFTP是 Very Security FTP…

ESP32-C3 BLE5.0 扩展蓝牙名称长度的流程

蓝牙设备名称长度受限于蓝牙广播数据包的长度,如果广播数据包的长度不能包含完整的设备名称,则只显示短名称,其余不能容纳的部分将被截断。ESP32-C3 支持 BLE5.0,最大广播包长支持 1650 字节,可通过 esp_ble_gap_confi…

PTA L1-054 福到了(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: “福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每…

【python】argparse 模块的使用、Pycharm中使用argparse

目录1、简介2、使用步骤1)导入argparse模块,并创建解释器2)添加所需参数3)解析参数3、使用 pycharm 传递参数给 argparse1、简介 argparse 模块是 Python 标准库中提供的一个命令行解析模块,它可以让使用者以类似 Uni…