hbase和hadoop/hdfs之间的区别

z2acfund  于 2021-06-04  发布在  Hadoop
关注(0)|答案(6)|浏览(1377)

这是一个幼稚的问题,但我对nosql范式还不熟悉,对它了解不多。所以,如果有人能帮我清楚地理解hbase和hadoop之间的区别,或者给我一些建议,帮助我理解它们的区别。
到目前为止,我做了一些研究,根据我的理解hadoop提供了一个框架来处理hdfs中的原始数据块(文件),hbase是hadoop之上的数据库引擎,它基本上是处理结构化数据而不是原始数据块。hbase和sql一样,在hdfs上提供了一个逻辑层。对吗?
请随时纠正我。
谢谢。

i7uaboj4

i7uaboj41#

hadoop使用分布式文件系统hdfs来存储大数据,但hdfs有一定的局限性,为了克服这些局限性,出现了hbase、cassandra和mongodb等nosql数据库。
hadoop只能执行批处理,并且只能以顺序方式访问数据。这意味着一个人必须搜索整个数据集,即使是最简单的作业,一个巨大的数据集在处理后会产生另一个巨大的数据集,这个数据集也应该按顺序处理。在这一点上,需要一种新的解决方案来在单个时间单位内访问任何数据点(随机访问)。
像所有其他文件系统一样,hdfs为我们提供了存储,但是以容错的方式提供了高吞吐量和较低的数据丢失风险(因为复制)。但是,作为一个文件系统,hdfs缺乏随机读写访问。这就是hbase的用武之地。它是一个分布式、可扩展的大数据存储,模仿谷歌的bigtable。cassandra与hbase有些相似。

2fjabf4q

2fjabf4q2#

apachehadoop项目包括四个关键模块
hadoop公共:支持其他hadoop模块的公共实用程序。
hadoop分布式文件系统(hdfs)™): 提供对应用程序数据的高吞吐量访问的分布式文件系统。
hadoopYarn:作业调度和集群资源管理的框架。
hadoopmapreduce:一个基于Yarn的大数据集并行处理系统。
hbase是一个可扩展的分布式数据库,支持大型表的结构化数据存储。就像 Bigtable 利用google文件系统提供的分布式数据存储,apachehbase在hadoop和hdfs之上提供了类似bigtable的功能。
何时使用hbase:
如果您的应用程序有一个变量模式,其中每一行略有不同
如果您发现您的数据存储在集合中,则所有这些数据都被键入相同的值
如果您需要对大数据进行随机、实时的读/写访问。
如果在存储或检索数据时需要基于密钥的访问。
如果现有hadoop集群有大量数据
但是hbase有一些局限性
它不能用于经典的事务应用程序,甚至不能用于关系分析。
在进行大批量mapreduce时,它也不能完全替代hdfs。
它不讲sql,有一个优化器,支持交叉记录事务或连接。
它不能用于复杂的访问模式(如连接)
总结:
在按键加载数据、按键(或范围)搜索数据、按键提供数据、按键查询数据或按不符合模式的行存储数据时,请考虑使用hbase。
看看cloudera博客中hbase的做与不做。

xlpyo6sf

xlpyo6sf3#

参考文献:http://www.quora.com/what-is-the-difference-between-hbase-and-hdfs-in-hadoop
hadoop是几个子系统的总称:1)hdfs。一种分布式文件系统,它把数据分布在一组机器上,以处理冗余等问题。hdfs之上的作业管理系统—用于管理处理存储在hdfs上的数据的map reduce(和其他类型)作业。
基本上,这意味着它是一个离线系统—您可以在hdfs上存储数据,并可以通过运行作业来处理数据。
另一方面,在基于列的数据库中使用hbase。它使用hdfs作为存储—它负责备份\redundency\etc,但它是一个“在线商店”--这意味着您可以查询特定的行\rows\etc并获得一个立即值。

ff29svar

ff29svar4#

hbase和hdfs都在一张图片中


注:
检查集群中的hdfs恶魔(以绿色突出显示),比如datanode(并置区域服务器)和namenode,它们同时具有hbase和hadoop hdfs
hdfs是一种分布式文件系统,非常适合存储大型文件。它不能在文件中提供快速的单个记录查找。
另一方面,hbase构建在hdfs之上,为大型表提供快速的记录查找(和更新)。这有时会造成概念上的混乱。hbase在内部将数据放入hdfs上存在的索引“storefiles”中,以便进行高速查找。

这看起来怎么样?

在基础设施层面,集群中的每台salve机器都有以下恶魔
区域服务器-hbase
数据节点-hdfs

如何快速查找?

hbase使用以下数据模型实现了对hdfs(有时也包括其他分布式文件系统)作为底层存储的快速查找
table
hbase表由多行组成。

hbase中的一行由一个行键和一个或多个列及其相关值组成。行在存储时按行键按字母顺序排序。因此,行键的设计非常重要。目标是以这样一种方式存储数据,即相关行彼此靠近。常见的行键模式是网站域。如果您的行键是域,您可能应该反向存储它们(org.apache.www,org.apache.mail,org.apache.jira)。这样,所有apache域在表中都彼此接近,而不是根据子域的第一个字母展开。

hbase中的列由列族和列限定符组成,它们由:(冒号)字符分隔。
柱族
列族通常出于性能原因,物理上对一组列及其值进行同位。每个列族都有一组存储属性,例如是否应将其值缓存在内存中,如何压缩其数据或对其行键进行编码,等等。表中的每一行都有相同的列族,尽管给定的行可能不存储给定列族中的任何内容。
列限定词
列限定符被添加到列族中,以提供给定数据段的索引。给定一个列族内容,列限定符可能是content:html and 另一个可能是content:pdf. 虽然列族在表创建时是固定的,但列限定符是可变的,并且行之间可能有很大的差异。
细胞
单元格是行、列族和列限定符的组合,包含一个值和一个表示值版本的时间戳。
时间戳
时间戳写在每个值旁边,是给定值版本的标识符。默认情况下,时间戳表示写入数据时regionserver上的时间,但将数据放入单元格时可以指定不同的时间戳值。
客户端读取请求流:

上图中的元表是什么?

在所有信息之后,hbase read flow用于查找这些实体
首先,扫描仪在块缓存(读缓存)中查找行单元格。最近读取的键值缓存在这里,最近最少使用的键值在需要内存时被逐出。
接下来,扫描器查看memstore,内存中的写缓存包含最近的写操作。
如果扫描程序没有在memstore和块缓存中找到所有行单元格,那么hbase将使用块缓存索引和bloom筛选器将hfiles加载到内存中,其中可能包含目标行单元格。
来源和更多信息:
hbase数据模型
hbase架构

2w3rbyxf

2w3rbyxf5#

hdfs是一个基于java的分布式文件系统,它允许您在hadoop集群中跨多个节点存储大量数据。而hbase是一个nosql数据库(类似于ntfs和mysql)。
由于hdfs和hbase都存储分布式环境中的各种数据,如结构化、半结构化和非结构化数据。
hdfs与hbase的区别
hbase提供对大数据集中少量数据的低延迟访问,而hdfs提供高延迟操作。
hbase支持随机读写,而hdfs支持

zzlelutf

zzlelutf6#

hadoop基本上是三件事,一个fs(hadoop分布式文件系统)、一个计算框架(mapreduce)和一个管理桥(另一个资源协商者)。hdfs允许您以分布式(提供更快的读/写访问)和冗余(提供更好的可用性)的方式存储大量数据。mapreduce允许您以分布式和并行的方式处理这些巨大的数据。但是mapreduce并不局限于hdfs。hdfs作为一个fs,缺乏随机读写功能。它适用于顺序数据访问。这就是hbase出现的地方。它是一个运行在hadoop集群上的nosql数据库,为您提供对数据的随机实时读/写访问。
您可以在hadoop和hbase中存储结构化和非结构化数据。它们都为您提供了多种访问数据的机制,如shell和其他api。而且,hbase以列方式将数据存储为键/值对,而hdfs将数据存储为平面文件。这两种系统的一些显著特点是:
hadoop软件
针对大文件的流式访问进行了优化。
遵循写过读过的许多思想。
不支持随机读/写。
数据库
以列方式存储键/值对(列作为列族聚集在一起)。
提供对大数据集中的少量数据的低延迟访问。
提供灵活的数据模型。
hadoop最适合离线批处理,而hbase是在您有实时需要时使用的。
类似的比较将在mysql和ext4之间进行。

相关问题