HBase和Hadoop/HDFS之间的区别

Dha*_*hah 129 hadoop hbase nosql hdfs difference

这是一个天真的问题,但我是NoSQL范式的新手并且对此并不了解.所以,如果有人可以帮助我清楚地理解HBase和Hadoop之间的区别,或者给出一些可能有助于我理解差异的指针.

直到现在,我做了一些研究和acc.根据我的理解,Hadoop提供框架来处理HDFS中的原始数据块(文件),而HBase是Hadoop之上的数据库引擎,它基本上使用结构化数据而不是原始数据块.与SQL一样,Hbase在HDFS上提供逻辑层.这是对的吗?

请随时纠正我.

谢谢.

Tar*_*riq 245

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之间进行.


Rav*_*abu 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博客看一下Do's和Do not of HBase .


Pra*_*ani 6

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

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

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


mrs*_*vas 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 索引和布隆过滤器将HFile加载到可能包含目标行单元的内存中。

来源和更多信息:

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