HBase与Hadoop / HDFS之间的区别


130

这是一个幼稚的问题,但是我是NoSQL范式的新手,对此了解不多。因此,如果有人可以帮助我清楚地了解HBase和Hadoop之间的区别,或者提供一些可以帮助我了解区别的指针。

到目前为止,我进行了一些研究和认证。据我了解,Hadoop提供了与HDFS中的原始数据块(文件)一起使用的框架,而HBase是Hadoop之上的数据库引擎,它基本上与结构化数据而非原始数据块一起工作。就像SQL一样,Hbase在HDFS上提供逻辑层。这是正确的吗?

请随时纠正我。

谢谢。


7
也许问题标题应该是“ HBase和HDFS之间的区别”?
马特·鲍尔

Answers:


248

Hadoop基本上是3件事,一个是FS(Hadoop分布式文件系统),一个计算框架(MapReduce)和一个管理网桥(另一个资源协商者)。HDFS允许您以分布式(提供更快的读/写访问)和冗余(提供更好的可用性)的方式存储大量数据。而且MapReduce允许您以分布式和并行的方式处理这些庞大的数据。但是MapReduce不仅限于HDFS。作为FS,HDFS缺乏随机读取/写入功能。这对于顺序数据访问很有用。这就是HBase发挥作用的地方。这是一个NoSQL数据库,它在Hadoop集群上运行,并为您提供对数据的随机实时读写访问。

您可以在Hadoop和HBase中存储结构化和非结构化数据。两者都为您提供了多种访问数据的机制,例如Shell和其他API。而且,HBase以列方式将数据存储为键/值对,而HDFS将数据存储为平面文件。这两个系统的一些显着特征是:

Hadoop的

  1. 针对大型文件的流访问进行了优化。
  2. 遵循一次写入多次读取的思想。
  3. 不支持随机读/写。

HBase的

  1. 以列形式存储键/值对(列作为列族组合在一起)。
  2. 提供对大型数据集中的少量数据的低延迟访问。
  3. 提供灵活的数据模型。

Hadoop最适合用于离线批处理,而HBase在您有实时需求时使用。

类似的比较将在MySQL和Ext4之间进行。


将hbase用作大量数据(小文件)的datalake怎么办?他可以管理与hdfs一样多的数据吗?
Mehdi TAZI '16

绝对是@MehdiTAZI。HBase在HDFS之上运行,因此不必担心可伸缩性。您只需要确保使用HBase即可使用它,以获取最佳性能
Tariq

运营问题呢?
Mehdi TAZI 2016年

我不会说HBase是运维团队的噩梦,但是它确实有几个方面仍有待改进,社区正在为解决此问题而努力。但这对任何软件都是如此。没有可证明问题的工具/技术恕我直言。如果它符合您的要求,那么您绝对应该尝试一下。这是处理您的随机实时读写需求的绝佳工具。
塔里克

22

Apache Hadoop项目包括四个关键模块

  1. Hadoop Common:支持其他Hadoop模块的通用实用程序。
  2. Hadoop分布式文件系统(HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
  3. Hadoop YARN:用于作业调度和集群资源管理的框架。
  4. Hadoop MapReduce:基于YARN的系统,用于并行处理大数据集。

HBase是可扩展的分布式数据库,支持大型表的结构化数据存储。正如Bigtable利用Google文件系统提供的分布式数据存储一样,Apache HBase在Hadoop和HDFS之上提供了类似Bigtable的功能。

何时使用HBase:

  1. 如果您的应用程序具有可变架构,其中每一行都略有不同
  2. 如果发现您的数据存储在集合中,则将所有这些都键入相同的值
  3. 如果您需要对大数据的随机,实时读写访问。
  4. 如果在存储或检索时需要基于密钥的数据访问。
  5. 如果您使用现有的Hadoop集群拥有大量数据

但是HBase有一些限制

  1. 它不能用于经典的交易应用程序甚至关系分析。
  2. 在进行大批量MapReduce时,它也不能完全替代HDFS。
  3. 它不使用SQL,没有优化器,不支持交叉记录事务或联接。
  4. 不能与复杂的访问模式(例如联接)一起使用

摘要:

当您按键加载数据,按键(或范围)搜索数据,按键提供数据,按键查询数据或按行存储与模式不完全匹配的数据时,请考虑使用HBase。

cloudera博客中了解HBase的注意事项


将hbase用作大量数据(小文件)的datalake怎么办?他可以管理与hdfs一样多的数据吗?
Mehdi TAZI '16

1
如果您要生成大量小文件,则根据访问方式,可能更适合使用其他类型的存储。HBase将数据存储在MapFiles(索引SequenceFiles)中,如果需要进行MapReduce样式流式传输,这是一个不错的选择偶尔随机查找进行分析
Ravindra babu 2016年

4

Hadoop使用分布式文件系统即HDFS来存储大数据。但是,HDFS和HDFS存在一定的局限性为了克服这些局限性,诸如HBase,Cassandra和Mongodb的NoSQL数据库应运而生。

Hadoop只能执行批处理,并且只能按顺序访问数据。这意味着即使是最简单的工作也必须搜索整个数据集。处理后的庞大数据集会产生另一个庞大的数据集,该数据集也应按顺序进行处理。此时,需要一种新的解决方案来在单个时间单位内访问任何数据点(随机访问)。

像所有其他文件系统一样,HDFS为我们提供存储,但是以容错的方式提供高吞吐量和较低的数据丢失风险(由于复制)。但是,作为文件系统,HDFS缺乏随机的读写访问权限。这就是HBase发挥作用的地方。它是一个分布式的,可扩展的大数据存储,以Google的BigTable为模型。Cassandra有点类似于hbase。


4

一幅图片中的HBase和HDFS

一幅图片中的HBase和HDFS

注意:

检查具有HBase和Hadoop HDFS的群集中的HDFS恶魔(以绿色突出显示),如DataNode(并置区域服务器)和NameNode

HDFS是一个分布式文件系统,非常适合存储大文件。不能在文件中提供快速的个人记录查找。

HBase的另一方面,建立在HDFS之上,并为大型表提供快速记录查找(和更新)。有时这可能是概念上的混乱点。HBase在内部将数据放入HDFS上存在的索引“ StoreFiles”中,以进行高速查找。

看起来如何?

好吧,在基础架构级别,集群中的每台从属服务器都有以下恶魔

  • 区域服务器-HBase
  • 数据节点-HDFS

从机

查找的速度如何?

HBase使用以下数据模型在作为基础存储的HDFS(有时还包括其他分布式文件系统)上实现快速查找

    • 一个HBase表由多行组成。
    • HBase中的一行由行键和一列或多列与它们相关联的值组成。行在存储时按行键按字母顺序排序。因此,行键的设计非常重要。目标是以相关行彼此靠近的方式存储数据。常见的行密钥模式是网站域。如果行键是域,则可能应该将它们反向存储(org.apache.www,org.apache.mail,org.apache.jira)。这样,所有Apache域在表中彼此靠近,而不是根据子域的第一个字母散布开来。
    • HBase中的列由列族和列限定符组成,它们由:(冒号)字符分隔。
  • 列族

    • 出于性能考虑,列族实际上将一组列及其值并置在一起。每个列族都有一组存储属性,例如是否应将其值缓存在内存中,如何压缩其数据或对其行键进行编码等。表中的每一行都具有相同的列族,尽管给定的行可能不会在给定的列族中存储任何内容。
  • 列限定词

    • 将列限定符添加到列族,以提供给定数据段的索引。给定列族内容,列限定符可能是content:html,另一个可能是content:pdf。尽管列族在创建表时是固定的,但列限定符是可变的,并且行之间的差异可能很大。
  • 细胞

    • 单元格是行,列族和列限定符的组合,并包含一个值和一个时间戳,代表该值的版本。
  • 时间戳记

    • 时间戳记与每个值一起写入,并且是值的给定版本的标识符。默认情况下,时间戳表示写入数据时在RegionServer上的时间,但是在将数据放入单元格时,可以指定其他时间戳值。

客户端读取请求流:

客户端读取请求流程

上图中的元表是什么?

元表

在获得所有信息之后,HBase的读取流程是用于查找触碰这些实体的

  1. 首先,扫描程序在“ 块”缓存(即读取缓存)中查找“行”单元。最近读取的键值存储在此处,并且在需要内存时驱逐“最近最少使用”。
  2. 接下来,扫描仪会在MemStore中查找包含内存的写入缓存,其中包含最新的写入。
  3. 如果扫描程序未在MemStore和块缓存中找到所有行单元,则HBase将使用块缓存索引和Bloom筛选器将HFiles加载到可能包含目标行单元的内存中。

来源和更多信息:

  1. HBase数据模型
  2. HBase架构师

1

参考:http : //www.quora.com/What-is-the-difference-between-HBASE-and-HDFS-in-Hadoop

Hadoop是几个子系统的统称:1)HDFS。一种分布式文件系统,可在一组计算机之间分布数据,并负责冗余等2)Map Reduce。HDFS之上的作业管理系统-用于管理处理存储在HDFS上的数据的map-reduce(和其他类型)作业。

基本上,这意味着它是一个离线系统-您将数据存储在HDFS上,并且可以通过运行作业进行处理。

另一方面,HBase位于基于列的数据库中。它使用HDFS作为存储-负责备份\ redundency \ etc,但是它是“在线存储”-意味着您可以查询特定的行\行等,并获得立即值。


0

HDFS是基于Java的分布式文件系统,可让您跨Hadoop群集中的多个节点存储大数据。而HBase是NoSQL数据库(类似于NTFS和MySQL)。

由于HDFS和HBase都在分布式环境中存储各种数据,例如结构化,半结构化和非结构化的数据。

HDFS和HBase之间的区别

  • HBase提供对大型数据集中的少量数据的低延迟访问,而HDFS提供高延迟操作。
  • HBase支持随机读取和写入,而HDFS支持WORM(一次写入多次或多次写入)。
  • HDFS基本上或主要通过MapReduce作业访问,而HBase通过外壳命令,Java API,REST,Avro或Thrift API访问。

HDFS将大型数据集存储在分布式环境中,并利用对该数据的批处理。

HBase以面向列的方式存储数据,其中每一列都存储在一起,因此,利用实时处理可以更快地读取数据。

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.