HBase和Hadoop / HDFS之间的区别

时间:2013-06-05 00:49:30

标签: hadoop nosql hbase hdfs difference

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

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

请随时纠正我。

感谢。

6 个答案:

答案 0 :(得分:240)

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. 不支持随机读/写。
  4. <强> HBase的

    1. 以柱状方式存储键/值对(列作为列族聚集在一起)。
    2. 提供对大型数据集中少量数据的低延迟访问。
    3. 提供灵活的数据模型。
    4. Hadoop最适合离线批量处理,当您有实时需求时使用HBase。

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

答案 1 :(得分:21)

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

  1. Hadoop Common :支持其他Hadoop模块的常用实用程序。
  2. Hadoop分布式文件系统(HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
  3. Hadoop YARN :作业调度和群集资源管理的框架。
  4. Hadoop MapReduce :基于 YARN 的系统,用于并行处理大型数据集。
  5. HBase 是一个可扩展的分布式数据库,支持大型表的结构化数据存储。就像Bigtable利用Google文件系统提供的分布式数据存储一样,Apache HBase在Hadoop和HDFS之上提供类似Bigtable的功能。

    何时使用HBase:

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

      1. 它不能用于传统的事务性应用程序甚至是关系分析。
      2. 在进行大批量MapReduce时,它也不是HDFS的完全替代品。
      3. 它不会说SQL,有优化器,支持交叉记录事务或连接。
      4. 它不能用于复杂的访问模式(例如连接)
      5. <强>要点:

          

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

        cloudera博客查看HBase的“不做”和“不要”。

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:3)

HBase和HDFS都在一张图片中

Both HBase and HDFS in one picture

  

注意:

     

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

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

另一方面,

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

  

看起来如何?

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

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

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. 首先,扫描程序在 Block cache (读取缓存)中查找Row单元。最近读取的键值存储在此处,当需要内存时,会将最近使用的最少使用的值逐出。
  2.     
  3. 接下来,扫描程序将在 MemStore 中查找,该高速缓存在内存中包含最近的写入操作。
  4.     
  5. 如果扫描程序未在MemStore和块缓存中找到所有行单元格,则HBase将使用块缓存索引和Bloom过滤器将 HFiles 加载到内存中,该文件可能包含目标行单元格。
  6.     
  

来源和更多信息:

  1. HBase data model
  2. HBase architecute

答案 4 :(得分: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,但它是一个“在线商店” - 这意味着你可以查询特定的行\行等,并获得即时价值。

答案 5 :(得分:0)

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

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

HDFS与HBase之间的区别

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

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

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

enter image description here