HBase 与 Hadoop/HDFS 的区别

这是一个很幼稚的问题,但是我对 NoSQL 范式还是很新,对它知之甚少。因此,如果有人能帮助我清楚地理解 HBase 和 Hadoop 之间的区别,或者如果给我一些指导,可能会帮助我理解它们之间的区别。

到现在为止,我做了一些调查。据我所知,Hadoop 提供了一个框架来处理 HDFS 中的原始数据块(文件) ,而 HBase 是 Hadoop 之上的数据库引擎,它基本上处理的是结构化数据,而不是原始数据块。Hbase 和 SQL 一样在 HDFS 上提供了一个逻辑层。对吗?

77417 次浏览

Hadoop 基本上有三个要素: 一个 FS (Hadoop 分散式档案系统)、一个计算框架(MapReduce)和一个管理桥梁(又一个资源协商者)。HDFS 允许以分布式(提供更快的读/写访问)和冗余(提供更好的可用性)方式存储大量数据。MapReduce 允许您以分布式和并行的方式处理这些巨大的数据。但 MapReduce 不仅仅局限于 HDFS。作为 FS,HDFS 缺乏随机读/写能力。它有利于顺序数据访问。这就是 HBase 出现的地方。它是一个运行在 Hadoop 集群上的 NoSQL 数据库,为您提供对数据的随机实时读/写访问。

你可以在 Hadoop 和 HBase 中同时存储结构化和非结构化数据。它们都提供了多种访问数据的机制,比如 shell 和其他 API。 而且,HBase 以柱状方式将数据存储为键/值对,而 HDFS 以平面文件形式存储数据。这两个系统的一些显著特点是:

Hadoop

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

总部

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

Hadoop 最适合离线批处理之类的东西,而 HBase 则用于实时需求。

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

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

Hadoop 是几个子系统的通用名称: 1) HDFS 一个将数据分发到一组机器上的分散式档案系统,可以解决冗余等问题 2)减少地图。在 HDFS 之上的作业管理系统-管理 map-reduce (和其他类型)作业处理存储在 HDFS 上的数据。

基本上,它意味着它是一个离线系统——你可以在 HDFS 上存储数据,然后通过运行作业来处理它。

另一方面,在基于列的数据库中使用 HBase。 它使用 HDFS 作为存储器-它负责备份冗余等,但它是一个“在线存储”-这意味着你可以查询它的特定行等,并得到一个即时的值。

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

Hadoop 只能执行批处理,数据只能按顺序访问。这意味着一个人必须搜索整个数据集,即使是最简单的作业。一个巨大的数据集,当处理结果在另一个巨大的数据集,这也应该是顺序处理。此时,需要一个新的解决方案来访问单个时间单位(随机访问)中的任何数据点。

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

ApacheHadoop项目包括四个关键模块

  1. Hadoop Common : 支持其他 Hadoop 模块的通用实用程序。
  2. Hadoop 分散式档案系统(HDFSTM) : 提供对应用程序数据的高吞吐量访问的分散式档案系统。
  3. Hadoop YARN : 用于作业调度和集群资源管理的框架。
  4. Hadoop MapReduce : 一个基于 纱线的并行处理大型数据集的系统。

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

何时使用 HBase:

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

但是 HBase 有一些局限性

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

摘要:

当按键加载数据、按键(或范围)搜索数据、按键服务数据、按键查询数据或按行存储不符合模式的数据时,请考虑 HBase。

看看 云母博客上关于 HBase 的注意事项。

HBase 和 HDFS 都在一张图片中

Both HBase and HDFS in one picture

注:

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

HDFS 是一个非常适合存储大型文件的分散式档案系统。它不在文件中提供快速的单个记录查找。

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

这看起来怎么样?

在基础设施级别,集群中的每个救助机器都有以下恶魔

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

Slave machine

查找速度怎么样?

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

  • 桌子

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

    • HBase 中的列由列族和列限定符组成,它们由: (冒号)字符分隔。
  • 立柱家族

    • 列族在物理上共存一组列及其值,这通常是出于性能原因。每个列族都有一组存储属性,比如它的值是否应该缓存在内存中,它的数据是如何压缩的,或者它的行键是如何编码的,等等。表中的每一行都有相同的列族,尽管给定的行可能不会在给定的列族中存储任何东西。
  • 列限定词

    • 列限定符被添加到列族中,以便为给定的数据段提供索引。给定一个列族内容,一个列限定符可能是 content: html,另一个可能是 content: pdf。虽然在创建表时列族是固定的,但是列限定符是可变的,并且行之间可能有很大的不同。
  • 手机

    • 单元格是行、列族和列限定符的组合,包含值和时间戳,表示值的版本。
  • 时间戳

    • 时间戳被写在每个值旁边,并且是给定版本的值的标识符。默认情况下,时间戳表示写入数据时 RegionServer 上的时间,但是可以在将数据放入单元格时指定不同的时间戳值。

客户端读取请求流:

Client read request flow

上图中的元表是什么?

meta table

在获得所有信息之后,HBase 读流用于查找这些实体

  1. 首先,扫描器在 块缓存(读取缓存)中查找 Row 单元格。最近读取的键值缓存在这里,当需要内存时,最近使用的键值将被驱逐。
  2. 接下来,扫描器查看 MemStore,即内存中包含最新写入的写入缓存。
  3. 如果扫描器没有找到 MemStore 和 Block Cache 中的所有行单元格,那么 HBase 将使用 Block Cache 索引和 blom 过滤器将 健康档案加载到内存中,内存中可能包含目标行单元格。

来源和更多信息:

  1. HBase 数据模型
  2. HBase 体系结构

HDFS 是一个基于 Java 的分散式档案系统,允许你在 Hadoop 集群的多个节点之间存储大量数据。而 HBase 是 NoSQL 数据库(类似于 NTFS 和 MySQL)。

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

HDFS 与 HBase 的区别

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

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

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

enter image description here