第1关:HBase Shell 操作:分区压缩

这篇具有很好参考价值的文章主要介绍了第1关:HBase Shell 操作:分区压缩。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

任务描述

本关任务:在 HBase Shell 中使用分区压缩命令并将查看到的命令结果复制到指定的文件中。

相关知识

为了完成本关任务,你需要掌握:

1.数据分区压缩的概念;

2.数据分区压缩的原因;

3.数据分区压缩的过程;

4.数据分区压缩的触发时机;

5.数据分区压缩的详解。

数据分区压缩的概念

数据分区压缩的概念如下所述:

Hbase 中 MemStore 中不断进行 flush 刷写操作,就会产生多个 storeFile 的文件,当 storeFile 文件达到一定阈值后,Hbase 就会将 Region 中的 Store 中的一些 HFile 进行合并。

数据分区压缩的原因

数据分区压缩的原因如下所述:

HBase 不停的刷写,导致存储目录中有过多的数据文件,文件太多会导致维护困难、降低数据查询性能和效率。对一堆的文件进行 I/O 操作,耗时太多。所以 HBase 定期会对这些琐碎的文件进行整理,即合并 Compaction。

数据分区压缩的过程

数据分区压缩的过程分为以下几步:

排序文件、合并文件、代替原文件服务。HBase 首先从待合并的文件中读出 HFile 中的 key-value,再按照由小到大的顺序写入一个新文件(storeFile)中。这个新文件将代替所有之前的文件,对外提供服务。

数据分区压缩的触发时机

数据分区压缩的触发时机有如下几点:

  1. MEMStore Flush

内存中的数据 Flush 刷写到硬盘上以后,会对当前 Store 中的文件进行判断,当数量达到阈值,则会触发 Compaction。 Compaction 是以 Store 为单位进行合并的。当 Flush 刷写完成后,整个 Region 的所有 Store 都会执行 Flush。

  1. 后台线程周期性的检查

Compaction Checker线程定期检查是否触发Compaction Checker会优先检查文件数量是否大于阈值,再判断是否满足Major Compaction的条件的时间范围内,如果满足,则触发一次大合并Major Compaction

  1. 手动触发
  • 由于很多业务担心 MajorCompaction 影响读写性能,所以选择在低峰期手动触发合并。

  • 当用户修改表结构后,希望立刻生效,则手动触发合并。

  • 运维人员发现硬盘空间不够,则会手动触发合并,因为删除了过期数据,腾出空间。

数据分区压缩的详解

数据分区压缩的分为以下两类:

Minor Compaction(小合并):小合并是指将相邻的 StoreFile 合并为更大的 StoreFile(默认 HFile 达到 3 个及以上)。

Major Compaction(大合并):大合并是将多个 StoreFile 合并为一个 StoreFile(默认超过 7 天触发)。

这两种 Compaction 方式的区别是:

  1. Minor 操作只用来做部分文件的合并操作以及包括minVersion=0并且设置 TTL 的过期版本清理,不做任何删除数据、多版本数据的清理工作。

  2. Major 操作是对 Region 下的 HStore 下的所有 StoreFile 执行合并操作,最终的结果是整理合并出一个文件。

两种 Compaction 的使用语法为:

在 HBase Shell 上操作:

 
  1. major_compact/Minor_compact 'table_name'

在 Java API 上配置:

 
  1. import org.apache.hadoop.conf.Configuration;
  2. import org.apache.hadoop.hbase.HBaseConfiguration;
  3. import org.apache.hadoop.hbase.TableName;
  4. import org.apache.hadoop.hbase.client.Admin;
  5. import org.apache.hadoop.hbase.client.Connection;
  6. import org.apache.hadoop.hbase.client.ConnectionFactory;
  7. import java.io.IOException;
  8. /**
  9. * majorCompact
  10. */
  11. public class MajorCompact {
  12. public static void main(String[] args) throws IOException {
  13. String[] tableList = {"tablename1","tablename2"};
  14. Configuration conf = HBaseConfiguration.create();
  15. conf.set("hbase.zookeeper.quorum", "hadoop101,hadoop102,hadoop103");
  16. Connection connection = ConnectionFactory.createConnection(conf);
  17. Admin admin = connection.getAdmin();
  18. for (String table : tableList) {
  19. TableName table_name = TableName.valueOf(table);
  20. if (admin.tableExists(table_name)) {
  21. admin.majorCompact(table_name);
  22. }
  23. }
  24. admin.close();
  25. connection.close();
  26. }
  27. }

编程要求

请根据左侧知识点的描述,在右侧图形化界面中的终端中使用 HBase Shell (在使用 HBase Shell 之前别忘了开启 Hadoop 集群和 Zookeeper 集群)的分区压缩命令并将结果按要求复制到/opt/answer(answer 文件需要自己创建)文件下。

具体自动拆分配置要求如下所述:

要求创建的表名为: stu;

要求创建的列族为: info;

要求使用的分区压缩命令为:major_compact

HBase Shell 中操作示例步骤如下:

 
  1. 创建表:
  2. create 'test','f1'
  3. 每 put 一条数据 flush 刷写一次:
  4. put 'test','12154646','f1:sex','w'
  5. flush 'test'
  6. 最后执行命令:
  7. major_compact 'test'

使用合并时考虑数据一致性,不会马上删掉数据,可以在使用压缩命令之前在 Linux 命令行使用hdfs dfs -ls来查看以下的目录:

 
  1. hdfs dfs -ls /hbase/data/default/表名/xxxxxxxxxx(一长串数字)/列族名

可以查看到如下图所示:

hbaseshell操作分区压缩,hbase,数据库,大数据

使用 major_compact 命令一段时间后可以看到如下图所示:

hbaseshell操作分区压缩,hbase,数据库,大数据

对于最后结果复制具体操作为在 Linux 命令行中输入以下命令:

 
  1. 进入 HBase 安装目录:
  2. cd /app/hbase
  3. 查看 Hdfs 上合并之后的具体内容可以使用 HFile 命令,并将结果输入到/opt/answer:
  4. bin/hbase org.apache.hadoop.hbase.io.hfile.HFile -p -f /hbase/data/default/stu/xxxxxxxxxx(一长串数字)/info/xxxxxxxxxx(一长串数字) > /opt/answer

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,达到编程要求即会通过。


开始你的任务吧,祝你成功!文章来源地址https://www.toymoban.com/news/detail-849791.html

命令行:
root@educoder:~# start-all.sh

root@educoder:~# zkServer.sh start

root@educoder:~# cd /opt
root@educoder:/opt# touch answer
root@educoder:/opt# cd
root@educoder:~# start-hbase.sh

root@educoder:~# hbase shell

hbase(main):001:0> create 'stu','info'
0 row(s) in 2.5330 seconds

=> Hbase::Table - stu

///因为测试要求是Scanned kv count -> 4 显示4个键值对 所以创建4个

hbase(main):002:0> put 'stu','1','info:a','a'
0 row(s) in 0.0750 seconds

hbase(main):003:0> put 'stu','2','info:b','b'
0 row(s) in 0.0080 seconds

hbase(main):004:0> put 'stu','3','info:c','c'
0 row(s) in 0.0080 seconds

hbase(main):005:0> put 'stu','4','info:d','d'
0 row(s) in 0.0080 seconds

hbase(main):006:0> flush 'stu'
0 row(s) in 0.2920 seconds

hbase(main):007:0> major_compact 'stu'
0 row(s) in 0.0330 seconds

root@educoder:~# hdfs dfs -ls /hbase/data/default/stu


Found 3 items
drwxr-xr-x   - root supergroup          0 2024-03-26 13:48 /hbase/data/default/stu/.tabledesc
drwxr-xr-x   - root supergroup          0 2024-03-26 13:48 /hbase/data/default/stu/.tmp
drwxr-xr-x   - root supergroup          0 2024-03-26 13:51 /hbase/data/default/stu/8bd07c6adfb5b889ef0db31758b8a86c

stu后面这里显示的是我自己的 不要复制我的

///寻找另一个长数字

root@educoder:~# hdfs dfs -ls /hbase/data/default/stu/8bd07c6adfb5b889ef0db31758b8a86c/info


Found 1 items
-rw-r--r--   1 root supergroup       5043 2024-03-26 13:51 /hbase/data/default/stu/8bd07c6adfb5b889ef0db31758b8a86c/info/adbadaf001c749a494f9c5a6df369740
///两个长段数字都找到了

root@educoder:~# cd /app/hbase
root@educoder:/app/hbase# bin/hbase org.apache.hadoop.hbase.io.hfile.HFile -p -f /hbase/data/default/stu/8bd07c6adfb5b889ef0db31758b8a86c/info/adbadaf001c749a494f9c5a6df369740 > /opt/answer

到了这里,关于第1关:HBase Shell 操作:分区压缩的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hbase Shell操作

    HBase中用 create 命令创建表,具体如下: 此时,创建了一个“student”表,属性有:name,sex,age,address。可通过 describe 命令查看“student”表的基本信息: 2.1 添加数据 HBase中用 put 命令添加数据. 注意:一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据。

    2024年02月15日
    浏览(40)
  • HBase Shell 操作

    1.1、进入HBase客户端命令行 前提是先启动hadoop集群和zookeeper集群。 1.2、查看帮助命令 help 查看指定命令的语法规则 查看 list_namespace 的用法(‘记得加单引号’) 我们首先查看现在有哪些命名空间 ,使用指令:list_namespace 注意:我的hadoop版本3.3.0,HBase2.4.17,两者兼容性有问

    2024年02月13日
    浏览(34)
  • HBase基础及shell操作

    HBase是采用java语言编写的一款 apache 开源的基于HDFS的NoSQL型数据库,不支持 SQL,不支持事务,不支持Join操作,没有表关系 1.不支持事务 2.主要存储结构化数据以及半结构化的数据 3.​HBase中数据存储都是以 字节 的形式来存储的 4.HBase是易于扩展的 1- 大: 在一个表中可以存储上

    2023年04月08日
    浏览(37)
  • HBase(11):shell管理操作

    1 status 例如:显示服务器状态   2 whoami 显示HBase当前用户,例如:   3 list 显示当前所有的表 4 count 统计指定表的记录数,例如:     5 describe 展示表结构信息   6 exists 检查表是否存在,适用于表量特别多的情况

    2024年02月12日
    浏览(40)
  • HBase Shell基本操作

    先在Linux Shell命令行终端执行 start-dfs.sh 脚本启动HDFS,再执行 start-hbase.sh 脚本启动HBase。如果Linux系统已配置HBase环境变量,可直接在任意目录下执行 hbase shell 脚本命令,就可进入HBase Shell的命令行终端环境, exit 可以退出HBase Shell(我安装的是伪分布式的HBase)。 (1) help帮

    2024年04月13日
    浏览(37)
  • HBase高手之路4-Shell操作

    命令 功能 create 创建表 put 插入或者更新数据 get 获取限定行或者列的数据 scan 全表扫描或扫描表并返回表的数据 describe 查看表的结构 count 统计行数 delete 删除指定的行或列的数据 deleteall 删除整个行或者列的数据 truncate 删除表的数据,结构还在 drop 删除整个表(包括数据)

    2023年04月17日
    浏览(40)
  • 大数据----33.hbase中的shell文件操作

    HBase的命令行工具,最简单的接口,适合HBase管理使用,可以使用shell命令来查询HBase中数据的详细情况。 注意:如果进入hbase后长时间不操作; 发生hbase自动关闭没有了进程; 原因是内存不够;可以关闭机器;增加内存;虚拟机就扩大内存。 1、进入 hbase 客户端、帮助命令

    2024年01月24日
    浏览(39)
  • Hbase安装和shell客户端操作

    HBase 是一个 面向列式存储的分布式数据库 ,其设计思想来源于 Google 的 BigTable 论文。 HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeeper 实现。 HBase 良好的分布式架构设计为海量数据的快速存储、随机访问提供了可能,基于数据副本机制和分区机制可以轻松实现在线扩容

    2024年02月08日
    浏览(44)
  • 在HBase中执行查询操作通常使用HBase Shell或编程语言API(如Java或Python)来执行

    在HBase中执行查询操作通常使用HBase Shell或编程语言API(如Java或Python)来执行。以下是使用HBase Shell进行查询的一些示例: 单行查询:获取指定行键的数据。 扫描表:按行范围获取表中的多个行的数据。 过滤器查询:使用过滤器指定查询条件来获取数据。 列族查询:获取指

    2024年01月21日
    浏览(43)
  • Hbase数据库完全分布式搭建以及java中操作Hbase

    基础的环境准备不在赘述,包括jdk安装,防火墙关闭,网络配置,环境变量的配置,各个节点之间进行免密等操作等。使用的版本2.0.5. 参考官方文档 分布式的部署,都是在单节点服务的基础配置好配置,直接分发到其他节点即可。 jdk路径的配置,以及不适用内部自带的zk. 配

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包