问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何加快hbase读取数据的效率

发布网友 发布时间:2022-04-21 02:09

我来回答

2个回答

懂视网 时间:2022-05-04 00:47

HBase简介2 HBase是什么? HBase 是Apache Hadoop中的一个子项目,HBase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用hadoop的DFS工具就可以看到这些这些数据存储文件夹的结构,还可以通过Map/Reduce框架(算法)对HBase进行操作,如下图所示: HBase 在

HBase简介2

HBase是什么?
HBase是Apache Hadoop中的一个子项目,HBase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用hadoop的DFS工具就可以看到这些这些数据存储文件夹的结构,还可以通过Map/Reduce框架(算法)对HBase进行操作,如下图所示:



HBase在产品中还包含了Jetty,在HBase启动时采用嵌入式的方式来启动Jetty,因此可以通过web界面对HBase进行管理和查看当前运行的一些状态,非常轻巧。

为什么采用HBase?
HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.所谓非结构化数据存储就是说HBase是基于列的而不是基于行的模式,这样方便读写你的大数据内容。

HBase是介于Map Entry(key & value)和DB Row之间的一种数据存储方式。这点有点类似于现在流行的Memcache,但不仅仅是简单的一个key对应一个 value,你很可能需要存储多个属性的数据结构,但没有传统数据库表中那么多的关联关系,这就是所谓的松散数据。

简单来说,你在HBase中的表创建的可以看做是一张很大的表,而这个表的属性可以根据需求去动态增加,在HBase中没有表与表之间关联查询。你只需要告诉你的数据存储到HBase的那个column families 就可以了,不需要指定它的具体类型:char,varchar,int,tinyint,text等等。但是你需要注意HBase中不包含事务此类的功能。

Apache HBase和Google Bigtable有非常相似的地方,一个数据行拥有一个可选择的键和任意数量的列。表是疏松的存储的,因此用户可以给行定义各种不同的列,对于这样的功能在大项目中非常实用,可以简化设计和升级的成本。

列式数据库

列式数据库是以列相关存储架构进行数据存储的数据库,主要适合与批量数据处理和即席查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合与小批量的数据处理,常用于联机事务型数据处理。

描述

数据库以行、列的二维表的形式存储数据,但是却以一维字符串的方式存储,例如以下的一个表:

EmpId

Lastname

Firstname

Salary

1

Smith

Joe

40000

2

Jones

Mary

50000

3

Johnson

Cathy

44000

这个简单的表包括员工代码(EmpId),姓名字段(Lastname and Firstname)及工资(Salary).

这个表存储在电脑的内存(RAM)和存储(硬盘)中。虽然内存和硬盘在机制上不同,电脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字节”中,由操作系统写到内存或硬盘中。

行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。

 1,Smith,Joe,40000;
 2,Jones,Mary,50000;
 3,Johnson,Cathy,44000;

列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。

 1,2,3;
 Smith,Jones,Johnson;
 Joe,Mary,Cathy;
 40000,50000,44000;

这只是一个简化的说法。此外,partitioning, 索引,缓存机制,视图, 联机分析多维数据集,以及诸如 预写式日志 和 multiversion concurrency control 此类的事务系统都在现实的应用环境中发挥作用。一般来说,侧重于联机事务处理 (OLTP)的系统更适用行数据库,而侧重于联机分析处理 的系统就必须在行数据库和列数据库中找到适当得平衡。

特点

因为硬盘寻址时间相较于计算机上其他部件的运行速度来说慢的不是一般,所以常用相同工作负载下的硬盘访问性能来比较行数据库和列数据库。通常,顺序读取数据要比随机访问更快[1]。而且,硬盘寻址时间的提升比起CPU速度的进步要慢得多 (参看 摩尔定律),在使用硬盘作为存储媒介的系统上这种情况很可能还会持续一段时间。下面简单罗列了一些选择行数据库还是列数据库的权衡依据。当然,如果能够把数据全放在内存中,那么使用内存数据库性能会更好。

1. 在只需要根据某几列来聚合数据的时候按列的数据组织方式更有效。因为这样只需要读取一部分数据,要比读取全部数据更快.

2. 当只需要修改某一列值的时候按列的数据组织方式更有效。因为可以直接找到某列数据并修改,而与行中的其他列无关。

3. 当需要某行的多列数据的时候按行的数据组织方式更有效。当行中数据不是太多的情况下一次硬盘寻址就可以获得该行的所有数据。

4. 在新增行数据的时候,如果各列都有值,那么按行的数据组织方式会更有效,因为只需要一次硬盘寻址就可以写入整行的全部数据.

在实际应用中,面向行的数据存储架构更适用于OLTP-频繁交互事务的场景。面向列的数据存储架构更适用于OLAP-(如数据仓库)这样在海量数据((可能达到 terabyte规模:1TB=1000G))中进行有限复杂查询的场景。

列存储的好处:

1. 由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的;

2. 按列存储每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;

3. 一个字段的数据聚集存储,更容易为这种聚集存储设计更好的压缩/解压算法。

下图讲述了传统的行存储和列存储的区别:

热心网友 时间:2022-05-03 21:55

一.工具开发背景:
业务上目前主要计算逻辑的数据源是hbase,但是我们没有工具对hbase的数据进行单条更改造数据来验证逻辑,之前的做法是把hbase的数据都导出来,改完再重新载入回去,或使用hbase shell接口进行更改(有一个*就是hbase shell get 出来的数据汉字是看不出来的),效率低,也不便于自动化的回归。测试非常的被动。
于是在师姐的建议下期望有操作hbase数据的工具来提高我们的效率,及大数据的验证。

二.工具简介:
工具使用java编写的jar包,在ihbase.sh进行简单数据处理对jar包进行调用。主要功能为数据的增删改查,支持gbk,utf8编码。通过配置一个xml格式的配置文件 (也可以不配置)。
三.使用方法:
1.properties.sh:在里面配置hbase,hadoop等环境变量,里面目前默认是我们测试集群的配置作为参考。注意一些基础的jar包一定要有。
2.config:xml格式的配置hbase导出数据的信息。在海量导出数据或根据rowkey到处数据的时候使用。
3.ihbase.sh工具的使用接口。
四.简要使用介绍:
操作均在bin目录下。

一.查询数据功能
1. ./ihbase –t table_name -rowkey rowkey -enc encoding -s
-enc encoding这个的目的是指定以什么编码读出hbase数据,目前支持utf8,gbk。如果不加该参数则默认以utf读出。
查看表名为table_name,rowkey为rowkey的数据。
2. ./ihbase –t 表名 –k CF:COLUMN=value –k CF:COLUMN=value –w column -s
./ihbase.sh –t "test" –k "a:name=jkfs" –k "a:id=111" -w "nid" -s
查询满足a:name=jkfs且a:id=111的记录,若加上-w参数,则只显示 -w 传进去的列。若不加-w 显示所有列。
(这个命令一般很少用,因为使用这个=的filer需要扫hbase全表,因为这种方式很少使用,所以暂时没考虑如何优化)

二.删除数据功能

1. ./ihbase –t table_name –rowkey rowkey –delete
根据rowkey进行删除。
2. ./ihbase –t table_name –k CF:COLUMN=value –k CF:COLUMN=value –delete
./ihbase –t test –k "a:id=jaks" -k "name=a:jkasj" -delete
删除满足a:id=jaks且a:name=jkasf的数据(目前支持and进行删除,不支持or,原理同该方式的查询)

三.添加数据功能
./ihbase –t table_name –rowkey rowkey –v CF:COLUMN=value –v CF:COLUMN=value -a
./ihbase.sh –t "a:test" -rowkey "111" –v "a:name=jkfs" –v "id=111" -a

添加rowkey为111的数据,后面key,value可以任意指定。如果rowkey已经存在,则报错不进行添加。
添加数据要求必须指定rowkey

四.修改数据功能
1. ./ihbase –t table_name –rowkey rowkey –v key=value -v key=value -u
./ihbase.sh -t "test" -rowkey "1111" –v "name=jkasjd" -u
根据rowkey进行修改一条记录的列数据
2. ./ihbase –t table_name –k key=value –k CF:COLUMN=value -v CF:COLUMN=value -u
./ihbase.sh –t test –k "a:name=jksdj" –k "mge=kjdk" –v "a:name=huanyu" -u
根据非rowkey进行修改,-k 提供修改的条件,-u 提供要修改的列的数数据。(原理同查询,scan全表)

五.导出hbase指定列的数据(所有数据)
./ihbase -f config 此处有一个*:就是导出表的配置文件必须放在bin的目录下。如果不喜欢这样也可以修改ihbase脚本进行调整。
config为配置导出表信息的xml配置
<?xml version="1.0"?>
<configuration>
<table>
<in_enc>gbk</in_enc>
<out_enc>utf8</out_enc>
<tablename>test</tablename>
<field_separator>\001</field_separator>
<record_separator>\002</record_separator>
<column>
bmw_shops:title
</column>
<outpath>/test/huanyu/hbase</outpath>
</table>
</configuration>
in_enc:hbase中的编码,以解析hbase中数据使用的编码。
out_enc:输出到hdfs路径上的编码。
tablename:操作的表名。
field_separator:如果导出多个字段则作为多个字段间的分隔符。
record_separator:导出数据的行分隔符。(除了\n的字符,因为默认会分行)。
column:导出的字段。如果不存在该字段则导出''。
outpath:导出数据的路径。(其实应在代码中把这个路径先删除的,但是怕用户忘记修改路径误删除,所以没有这么做)
有多少个region 启动多少个map。

六.导出hbase指定行的指定列的数据
./ihbase -f config -rf rfile
config里面配置导出的列,字符编码表名等信息。
rfile 配置导出哪些rowkey的数据。(一个rowkey一行)

类似上面。

七.帮助信息
./ihbase –h
显示帮助信息
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 黑龙江债权转让合同纠纷该怎样取证 安徽债权转让合同纠纷应该怎么样取证 什么情况下适合使用Hbase hbase 中的timestamps是什么意思 1.Hbase的数据模型是什么,通过哪些元素定义? hbase 如何存储数据 Hadoop Hbase适合存储哪类数据?(转) 解读Hadoop Hbase适合存储哪类数据 hbase是如何做到并发写的和随机写的 监控系统为什么采用时间序列数据库 hbase数据库存储的特点有哪些 hbase如何创建序列 hbase内部工具类批量导出报错 lsm树哪本书 HBase数据到底是怎么存储的 Hbase和传统数据库的区别 两个互信集群怎么实时同步两者的hbase数据库中的数据 HBase支持的数据格式有哪些? 综合使用时序数据与截面数据能解决多重共线性吗? 为什么说HBase是列式数据库? hbase怎么做到顺序写入 朋友圈为啥不能点赞和评论 朋友圈无法点赞评论,检查过设置没问题 ,是什么原因?_问一问 《青年文摘》1988年第5期《生死攸关的烛光》 吸血僵尸 Nosferatu 也叫 《吸血鬼诺斯费拉杜》 上海交大的本科生宿舍里网速有多快? 吸血鬼诺斯费拉杜的导演简介 《蓝色多瑙河》的简介 pdf文件如何删除其中一页 pdf能删除其中一页吗 pdf文件能删除其中一页吗 电脑pdf怎么删除其中 文石note3中的pdf,可以删除其中的某一页吗? pdf文件删除中间其中一页 如何将pdf文件删除一页 pdf怎么删除其中一页adobe reader 如何删除PDF文件中的其中一个页面? 邯郸市邦彦中学在哪里 陆毅邦彦是哪部电视剧 邦彦的彦怎么读 浪子宰相李邦彦生平简介 李邦彦是怎么死的