何时使用Hadoop,HBase,Hive和Pig?

时间:2012-12-17 09:33:36

标签: hadoop hbase hive apache-pig

使用 Hadoop HBase Hive 有什么好处?

根据我的理解, HBase 避免使用map-reduce,并且在HDFS之上具有面向列的存储。 Hive Hadoop HBase 的类似sql的界面。

我还想知道 Hive Pig 的比较。

17 个答案:

答案 0 :(得分:337)

MapReduce只是一个计算框架。 HBase与它无关。也就是说,您可以通过编写MapReduce作业来有效地向/从HBase提取数据。或者,您可以使用其他HBase API(例如Java)编写顺序程序来放置或获取数据。但我们使用Hadoop,HBase等来处理大量数据,因此这没有多大意义。当数据太大时,使用正常的顺序程序效率非常低。

回到问题的第一部分,Hadoop基本上是两件事:分布式文件系统(HDFS) + 计算或处理框架(MapReduce)。与所有其他FS一样,HDFS也为我们提供存储,但是以容错的方式提供高吞吐量和较低的数据丢失风险(因为复制)。但是,作为FS,HDFS缺乏随机读写访问。这是HBase进入画面的地方。它是一个分布式,可扩展的大数据存储,模仿Google的BigTable。它将数据存储为键/值对。

来到Hive。它为现有Hadoop集群提供了数据仓储设施。除此之外,它提供了一个 SQL like 接口,使您的工作更轻松,以防您来自SQL背景。您可以在Hive中创建表并在那里存储数据。除此之外,您甚至可以将现有的HBase表映射到Hive并对其进行操作。

虽然Pig基本上是一种数据流语言,它允许我们非常轻松快速地处理大量数据。猪基本上有两部分:猪口译员和语言, PigLatin 。你在PigLatin中编写Pig脚本并使用Pig解释器处理它们。猪让我们的生活变得更轻松,否则编写MapReduce总是不容易。事实上,在某些情况下,它真的会变成一种痛苦。

前段时间我写了article on a short comparison of different tools of the Hadoop ecosystem。这不是深度比较,而是对这些工具的简短介绍,可以帮助您入门。 (只是为了补充我的答案。没有自我推销)

Hive和Pig查询都会被转换为MapReduce作业。

HTH

答案 1 :(得分:50)

我最近在我的公司实施了一个Hive数据平台,因为我是一个单独的团队,所以我可以用第一人称对话。

目的

  1. 每天从350多台服务器收集的每日网络日志文件可以通过一些 SQL 类似语言进行查询
  2. 用Hive
  3. 替换通过 MySQL 生成的每日汇总数据
  4. 通过 Hive
  5. 中的查询构建自定义报告

    架构选项

    我对以下选项进行了基准测试:

    1. 蜂房+ HDFS
    2. Hive + HBase - 查询太慢所以我转储了这个选项
    3. 设计

      1. 每日日志文件已传输到 HDFS
      2. MR作业在 HDFS
      3. 中解析了这些日志文件和输出文件
      4. 创建包含指向 HDFS 位置
      5. 的分区和位置的Hive表
      6. 创建Hive查询脚本(如果你喜欢 SQL ,称之为 HQL ),后者又在后台运行MR作业并生成聚合数据
      7. 将所有这些步骤放入 Oozie 工作流程中 - 使用Daily Oozie 协调员安排
      8. 摘要

        HBase 就像一张地图。如果您知道密钥,您可以立即获得价值。但是如果你想知道Hbase中有多少整数键在1000000和2000000之间,那么单独不适合 Hbase

        如果要汇总,汇总,跨行分析数据,请考虑 Hive

        希望这有帮助。

        Hive 实际上非常好......我知道,我已经活了12个月了......那么 HBase ......

答案 2 :(得分:25)

Hadoop是一个框架,允许使用简单的编程模型跨计算机集群分布式处理大型数据集。

Hadoop中有四个主要模块。

  1. Hadoop Common :支持其他Hadoop模块的常用实用程序。

  2. Hadoop分布式文件系统( HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。

  3. Hadoop YARN :作业调度和群集资源管理的框架。

  4. Hadoop MapReduce :基于YARN的系统,用于并行处理大型数据集。

  5. 在进一步说明之前,请注意我们有三种不同类型的数据。

    • 结构化:结构化数据具有强大的架构,并且在写入期间将检查架构。读操作。例如RDBMS系统中的数据,如Oracle,MySQL Server等。

    • 非结构化:数据没有任何结构,可以是任何形式 - Web服务器日志,电子邮件,图像等。

    • 半结构化:数据没有严格的结构,但有一些结构。例如XML文件。

    根据要处理的数据类型,我们必须选择正确的技术。

    更多项目,它们是Hadoop的一部分:

    • HBase™:一个可扩展的分布式数据库,支持大型表的结构化数据存储。

    • Hive ™:提供数据汇总和临时查询的数据仓库基础架构。

    • Pig™:用于并行计算的高级数据流语言和执行框架。

    Hive Vs PIG 比较可以在此article和我在SE question的其他帖子找到。

    HBASE 不会取代Map Reduce。 HBase 是可扩展的分布式数据库& Map Reduce 是用于分布式数据处理的编程模型。 Map Reduce可以在处理过程中对HBASE中的数据起作用。

    您可以将 HIVE / HBASE 用于结构化/半结构化数据,并使用Hadoop Map Reduce进行处理

    您可以使用 SQOOP 从传统的RDBMS数据库Oracle,SQL Server等导入结构化数据,并使用Hadoop Map Reduce进行处理

    您可以使用 FLUME 处理非结构化数据并使用Hadoop Map Reduce进行处理

    请查看:Hadoop Use Cases

    应该使用

    Hive 来分析查询一段时间内收集的数据。例如计算趋势,总结网站日志,但它不能用于实时查询。

    HBase 适合实时查询大数据。 Facebook将其用于消息传递和实时分析。

    PIG 可用于构建数据流,运行预定作业,处理大量数据,汇总/汇总数据并存储到关系数据库系统中。适用于临时分析。

    Hive 可用于临时数据分析,但它不支持与PIG不同的所有非结构化数据格式。

答案 3 :(得分:22)

考虑您使用RDBMS并且必须选择要使用的内容 - 全表扫描或索引访问 - 但只能选择其中一个。
如果选择全表扫描 - 请使用配置单元。如果索引访问 - HBase。

答案 4 :(得分:5)

我致力于Lambda架构处理实时和批量加载。 如果在传感器发送火警或在银行交易的情况下进行欺诈检测,则需要进行快速决策,需要实时处理。 需要批处理来汇总可以提供给BI系统的数据。

我们将 Hadoop 生态系统技术用于上述应用程序。

实时处理

Apache Storm:流数据处理,规则应用

HBase:用于提供实时仪表板的数据存储

批处理 Hadoop:破解大量数据。 360度概览或向事件添加上下文。 Pig,MR,Spark,Hive,Shark等接口或框架有助于计算。这一层需要调度程序,Oozie是不错的选择。

事件处理图层

Apache Kafka是从传感器消耗高速事件的第一层。 Kafka通过Linkedin连接器提供实时和批量分析数据流。

答案 5 :(得分:5)

对于Hadoop与Cassandra / HBase之间的比较,请阅读post

基本上,HBase可以实现真正快速的读写和可扩展性。速度和可扩展性如何? Facebook使用它来管理其用户状态,照片,聊天消息等.HBase是如此之快,有时候Facebook开发了堆栈,使用HBase作为Hive本身的数据存储。

As Hive更像是一个数据仓库解决方案。您可以使用类似于SQL的语法来查询Hive内容,从而导致Map Reduce作业。不适合快速的交易系统。

答案 6 :(得分:3)

深入了解

<强> Hadoop的

HadoopApache基金会的开源项目。它是一个用Java编写的框架,最初由Doug Cutting于2005年开发。它的创建是为了支持文本搜索引擎Nutch的发布。 Hadoop使用Google的Map Reduce和Google文件系统技术作为其基础。

Hadoop的功能

  1. 它经过优化,可以使用商用硬件处理大量的结构化,半结构化和非结构化数据。
  2. 它没有共享架构。
  3. 它将数据复制到多台计算机中,这样如果一台计算机停机,数据仍然可以从另一台存储其副本的计算机上处​​理。
  4. Hadoop用于高吞吐量而非低延迟。它是处理大量数据的批处理操作;因此,响应时间不会立竿见影。
  5. 它补充了在线交易处理和在线分析处理。但是,它不能替代RDBMS
  6. 当工作无法并行化或数据中存在依赖关系时,这是不好的。
  7. 处理小文件不好。它最适用于大量数据文件和数据集。
  8. Hadoop的版本

    Hadoop有两个版本:

    1. Hadoop 1.0
    2. Hadoop 2.0
    3. Hadoop 1.0

      它有两个主要部分:

      <强> 1。数据存储框架

      这是一个名为Hadoop分布式文件系统(HDFS)的通用文件系统。

      HDFS是无架构的

      它只存储数据文件,这些数据文件几乎可以是任何格式。

      我们的想法是尽可能接近原始格式存储文件。

      这反过来为业务部门和组织提供了急需的灵活性和灵活性,而不会过分担心它可以实现的目标。

      <强> 2。数据处理框架

      这是一个简单的函数式编程模型,最初由Google推广为MapReduce

      它主要使用两个函数:MAPREDUCE来处理数据。

      &#34; Mappers&#34;接受一组键值对并生成中间数据(这是另一个键值对列表)。

      &#34;减速机&#34;然后对此输入进行操作以生成输出数据。

      这两个函数似乎彼此孤立地工作,从而使处理能够以高度并行,容错和可扩展的方式高度分布。

      Hadoop 1.0的限制

      1. 第一个限制是MapReduce编程专业知识的要求。

      2. 它仅支持批处理,虽然它适用于日志分析,大规模数据挖掘项目等任务,但几乎不适合其他类型的项目。

      3. 一个主要的限制是Hadoop 1.0MapReduce紧密计算耦合,这意味着已建立的数据管理供应商留下了两个意见:

        1. MapReduce中重写其功能,以便它可以 在Hadoop

        2. 中执行
        3. HDFS提取数据或在Hadoop之外处理数据。

      4. 这些选项都不可行,因为它导致数据移入和移出Hadoop群集导致流程效率低下。

        Hadoop 2.0

        Hadoop 2.0中,HDFS仍然是数据存储框架。

        然而,一个新的单独的资源管理框架称为 Y et A nother R esource N egotiater( YARN )已被添加。

        YARN支持任何能够将自身划分为并行任务的应用程序。

        YARN协调提交的应用程序的子任务分配,从而进一步增强应用程序的灵活性,可伸缩性和效率。

        通过使用应用程序主数据代替作业跟踪器,在受新节点管理器管理的资源上运行应用程序。

        ApplicationMaster能够运行任何应用程序,而不仅仅是MapReduce

        这意味着它不仅支持批处理,还支持实时处理。 MapReduce不再是唯一的数据处理选项。

        Hadoop的优势

        它将数据存储在其原生地中。在键入数据或存储数据时没有强加任何结构。 HDFS架构较少。只有在需要处理数据时才会对原始数据施加结构。

        可扩展。 Hadoop可以在数百个并行运行的廉价服务器上存储和分发非常大的数据集。

        它对失败很有弹性。 Hadoop是容错的。它努力实现数据复制,这意味着无论何时将数据发送到任何节点,相同的数据也会被复制到集群中的其他节点,从而确保在节点发生故障时,总会有另一个数据副本可供使用。

        很灵活。 Hadoop的一个主要优点是它可以处理任何类型的数据:结构化,非结构化或半结构化。此外,由于&#34;将代码移动到数据&#34;,Hadoop处理速度非常快。范例

        Hadoop生态系统

        以下是Hadoop生态系统的组成部分:

        HDFS Hadoop分布式文件系统。它只是将数据文件存储为尽可能接近原始形式。

        HBase :它是Hadoop的数据库,可与RDBMS进行比较。它支持大型表的结构化数据存储。

        Hive :它可以使用与标准ANSI SQL非常相似的语言分析大型数据集,这意味着任何有SQL的家庭成员都应该能够访问Hadoop群集。

        Pig :这是一种易于理解的数据流语言。它有助于分析大型数据集,这与Hadoop完全相同。 Pig解释程序会自动将MapReduce个脚本转换为Pig个作业。

        ZooKeeper :它是分布式应用程序的协调服务。

        Oozie :这是一个管理Apache schedular工作的工作流Hadoop系统。

        Mahout :它是一个可扩展的机器学习和数据挖掘库。

        Chukwa :这是用于管理大型分布式系统的数据收集系统。

        Sqoop :它用于在Hadoop和结构化数据存储(如关系数据库)之间传输批量数据。

        Ambari :这是一个基于网络的工具,用于配置,管理和监控Hadoop群集。

        <强>蜂房

        Hive是一个数据仓库基础架构工具,用于处理Hadoop中的结构化数据。它位于Hadoop之上,用于汇总大数据,使查询和分析变得简单。

        Hive不是

        1. 关系数据库

        2. 在线交易处理的设计(OLTP)。

        3. 用于实时查询和行级更新的语言。

        4. Hive的功能

          1. 它将数据库中的架构和处理后的数据存储到HDFS

          2. 专为OLAP设计。

          3. 它提供了SQL类型语言,用于查询名为HiveQLHQL

          4. 它比较熟悉,快速,可扩展且可扩展。

          5. Hive Architecture

            Hive Architecture中包含以下组件:

            1. 用户界面Hive是一个data warehouse基础架构,可以在用户和HDFS之间创建互动。 Hive支持的用户界面是Hive Web UI,Hive命令行和Hive HD Insight(在Windows Server中)。

            2. MetaStore Hive选择相应的database servers来存储架构或Metadata表,数据库,列表,它们的数据类型和HDFS映射。

            3. HiveQL Process Engine HiveQL类似于SQL,用于查询Metastore上的架构信息。它是MapReduce计划的传统方法的替代品之一。我们可以编写MapReduce的查询并处理它,而不是在Java中撰写MapReduce

            4. Exceution Engine HiveQL流程引擎和MapReduce的合并部分是Hive执行引擎。执行引擎处理查询并生成与MapReduce results相同的结果。它使用MapReduce

            5. 的味道
            6. HDFS或HBase Hadoop分布式文件系统或HBase是将数据存储到文件系统的数据存储技术。

答案 7 :(得分:1)

首先,我们应该明白 Hadoop 是作为 RDBMS 的更快替代方案而创建的。以非常快的速度处理大量数据,这在RDBMS中花了很多时间。

现在应该知道这两个术语:

  1. 结构化数据:这是我们在传统RDBMS中使用的数据,并且被划分为明确定义的结构。

  2. 非结构化数据:理解这一点非常重要,大约80%的世界数据都是非结构化或半结构化的。这些是原始形式的数据,无法使用RDMS进行处理。示例:facebook,twitter数据。 (http://www.dummies.com/how-to/content/unstructured-data-in-a-big-data-environment.html)。

  3. 因此,在过去几年中生成了大量数据,而且数据大多是非结构化的,这就产生了HADOOP。它主要用于使用RDBMS花费不可行时间的大量数据。它有许多缺点,它不能实时用于相对较小的数据,但它们已设法消除其在较新版本中的缺点。

    在进一步讨论之前,我想告诉他们在以前的工具上发现错误时会创建一个新的大数据工具。因此,您将看到创建的任何工具都已经完成,以克服以前工具的问题。

    Hadoop 可以简单地说两件事: Mapreduce HDFS 。 Mapreduce是处理发生的地方,HDFS是存储数据的DataBase。该结构遵循 WORM 原则,即多次写入一次读取。因此,一旦我们将数据存储在HDFS中,我们就无法进行更改。这导致了 HBASE 的创建,这是一个NOSQL产品,我们可以在写完一次后对数据进行更改。

    但随着时间的推移,我们看到Hadoop有很多错误,为此我们创建了不同于Hadoop结构的环境。 PIG和HIVE是两个流行的例子。

    HIVE 是为 SQL 背景的人创建的。编写的查询类似于名为 HIVEQL 的SQL。开发HIVE是为了处理完全结构化数据。它不用于组织数据。

    另一方面,

    PIG 有自己的查询语言,即 PIG LATIN 。它既可用于结构化,也可用于非结构化数据

    在使用HIVE以及何时使用PIG的过程中,我认为除了PIG的架构师之外的任何人都可以说。点击链接: https://developer.yahoo.com/blogs/hadoop/comparing-pig-latin-sql-constructing-data-processing-pipelines-444.html

答案 8 :(得分:1)

Hadoop:

HDFS代表Hadoop分布式文件系统,它使用计算处理模型Map-Reduce。

HBase:

HBase是键值存储,非常适合于近乎实时的读写。

蜂巢:

Hive用于使用类似SQL的语法从HDFS提取数据。蜂巢使用HQL语言。

猪:

Pig是用于创建ETL的数据流语言。这是一种脚本语言。

答案 9 :(得分:0)

在 Cloudera 在 CDP 中摆脱它之后,Pig 大部分都死了。 Apache 的最后一次发布是 2017 年 6 月 19 日:发布 0.17.0,因此基本上没有提交者积极工作了。使用比 Pig 更强大的 Spark 或 Python。

答案 10 :(得分:0)

我认为,该线程并没有对HBase和Pig带来特别的公正。尽管我认为Hadoop是大数据湖实施的分布式弹性文件系统的选择,但HBase和Hive之间的选择尤其合理。

同样,许多用例对类似SQL或类似No-SQL的接口有特殊的要求。在Phoenix的HBase之上,尽管可以实现类似SQL的功能,但是,性能,第三方集成,仪表盘更新是一种痛苦的体验。但是,对于需要水平扩展的数据库来说,这是一个绝佳的选择。

Pig对于非递归批处理(例如计算或ETL流水线)(在某个地方,它的性能优于Spark的地方)特别出色。而且,它的高级数据流实现是批处理查询和脚本编写的绝佳选择。 Pig和Hive之间的选择还取决于客户端或服务器端脚本的需要,所需的文件格式等。Pig支持Avro文件格式,这在Hive中是不正确的。 “过程数据流语言”与“声明性数据流语言”的选择也是在猪和蜂巢之间进行选择的强烈理由。

答案 11 :(得分:0)

这个问题的简短答案是-

Hadoop-是一种框架,它促进了分布式文件系统和编程模型的发展,与传统方法相比,该框架使我们能够以分布式方式非常有效地并且以更少的处理时间来存储庞大的数据和处理数据。

(HDFS-Hadoop分布式文件系统) (Map Reduce-用于分布式处理的编程模型)

Hive-是一种查询语言,它允许以非常流行的类似SQL的方式从Hadoop分布式文件系统读取/写入数据。对于许多非编程背景的人们来说,这使生活变得更轻松,因为他们不再需要编写Map-Reduce程序,除非非常复杂的场景中不支持Hive。

Hbase-是列式NoSQL数据库。 Hbase的底层存储层还是HDFS。该数据库最重要的用例是能够存储十亿行和一百万列。 Hbase的低延迟功能有助于更快,更随机地访问分布式数据上的记录,这是非常重要的功能,它使其对于诸如Recommender Engines之类的复杂项目很有用。此外,它的记录级别版本控制功能使用户可以非常高效地存储事务数据(这解决了更新我们使用HDFS和Hive拥有的记录的问题)

希望这有助于快速了解以上3个功能。

答案 12 :(得分:0)

Hive,Hbase和Pig的使用我在不同项目中的实时经验。

配置单元主要用于:

  • 分析的目的是需要对历史数据进行分析

  • 根据某些列生成业务报告

  • 与元数据信息一起有效地管理数据

  • 在某些使用列概念经常使用的列上联接表

  • 使用分区概念进行有效的存储和查询

  • 对事务/行级别的操作(如更新,删除等)无效。

猪主要用于:

  • 对大数据的频繁数据分析

  • 根据海量数据生成汇总值/计数

  • 非常频繁地生成企业级关键绩效指标

Hbase最常用:

  • 用于数据的实时处理

  • 有效地管理复杂和嵌套模式

  • 用于实时查询和更快的结果

  • 使用列可轻松扩展

  • 用于事务/行级别的操作,例如更新,删除等。

答案 13 :(得分:0)

Pig中的清理数据非常简单,一种合适的方法是通过pig清理数据,然后通过hive处理数据,然后将其上传到hdfs。

答案 14 :(得分:0)

1.我们正在使用Hadoop以txt,csv等格式文件格式存储大数据(即结构,非结构和半结构数据)。

2.如果我们想在数据中使用柱状更新,那么我们正在使用Hbase工具

3.如果是Hive,我们正在存储结构化格式的大数据 除此之外,我们还提供对该数据的分析。

4.Pig是使用Pig latin语言分析任何格式(结构,半结构和非结构)数据的工具。

答案 15 :(得分:0)

Pig:最好处理文件和清理数据   示例:删除空值,字符串处理,不必要的值 Hive:用于查询已清理的数据

答案 16 :(得分:0)

让我试着用几句话回答。

Hadoop是一个由所有其他工具组成的生态系统。所以,你无法比较Hadoop,但你可以比较MapReduce。

这是我的几分钱:

  1. Hive:如果您的需求非常SQLish意味着您的问题陈述可以通过SQL来满足,那么最简单的方法就是使用Hive。另一种情况是,当您使用配置单元时,您希望服务器具有特定的数据结构。
  2. 猪:如果您对Pig Latin感到满意,那么您需要更多的数据管道。此外,您的数据缺乏结构。在这些情况下,你可以使用猪。老实说,Hive&amp;和Hive之间差别不大。猪就用例而言。
  3. MapReduce:如果直接使用SQL无法解决问题,首先应该尝试为Hive&amp;创建UDF。猪,然后如果UDF没有解决问题,那么通过MapReduce完成它是有道理的。