140

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

到目前为止,我做了一些研究和记录。据我了解,Hadoop 提供了处理 HDFS 中的原始数据块(文件)的框架,而 HBase 是 Hadoop 之上的数据库引擎,它基本上处理结构化数据而不是原始数据块。就像 SQL 一样,Hbase 在 HDFS 上提供了一个逻辑层。这是对的吗?

4

6 回答 6

257

Hadoop 基本上是 3 个东西,一个 FS(Hadoop 分布式文件系统)、一个计算框架(MapReduce)和一个管理桥(Yet Another Resource Negotiator)。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 之间也有类似的比较。

于 2013-06-05T01:17:14.663 回答
24

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 的注意事项。

于 2016-01-12T07:31:29.443 回答
6

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

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

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

于 2015-04-20T19:58:48.363 回答
5

一张图片中同时包含 HBase 和 HDFS

一张图片中同时包含 HBase 和 HDFS

笔记:

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

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

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

这看起来怎么样?

那么,在基础设施层面,集群中的每台salve机器都有以下恶魔

  • 区域服务器 - 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 和 Block Cache 中的所有行单元,则 HBase 将使用 Block Cache 索引和布隆过滤器将HFiles加载到内存中,其中可能包含目标行单元。

来源和更多信息:

  1. HBase 数据模型
  2. HBase 架构
于 2018-09-14T07:16:23.153 回答
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 作为存储——它负责备份\冗余\等,但它是一个“在线存储”——这意味着您可以查询它的特定行\行等并获得即时值。

于 2015-02-01T00:27:22.160 回答
0

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

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

HDFS 和 HBase 的区别

  • HBase 提供对大型数据集中少量数据的低延迟访问,而 HDFS 提供高延迟操作。
  • HBase 支持随机读写,而 HDFS 支持 WORM(Write once Read Many or Multiple times)。
  • HDFS 基本上或主要通过 MapReduce 作业访问,而 HBase 通过 shell 命令、Java API、REST、Avro 或 Thrift API 访问。

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

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

在此处输入图像描述

于 2019-10-10T06:57:10.697 回答