代码之家  ›  专栏  ›  技术社区  ›  Arnkrishn

猪和蜂巢的区别?为什么两者都有?[关闭]

  •  250
  • Arnkrishn  · 技术社区  · 15 年前

    我的背景-在Hadoop世界4周大。使用Cloudera的Hadoop VM涉足了Hive、Pig和Hadoop。读过谷歌关于地图还原和GFS的论文( PDF link ).

    我明白-

    • 猪的语言猪的拉丁语是一个转变 from(适合程序员的想法) 类似SQL的声明式样式 编程与Hive查询语言 类似于SQL。

    • 猪坐在Hadoop上面 原则也可以放在 德莱德。我可能错了,但蜂巢是 与Hadoop紧密耦合。

    • 猪拉丁语和蜂巢指令 编译以映射和减少作业。

    我的问题是,当一只(比如说猪)可以达到目的时,两者兼得的目的是什么。是不是因为猪被雅虎传福音了!还有Facebook的Hive?

    19 回复  |  直到 10 年前
        1
  •  150
  •   Josh Bradley    8 年前

    看看这个 post 来自艾伦·盖茨,雅虎的猪建筑师!,这与何时使用类似SQL的Hive而不是Pig进行比较。他提出了一个非常有说服力的例子,说明了Pig(与声明性SQL相比)等过程性语言的有用性及其对数据流设计器的实用性。

        2
  •  57
  •   momo    12 年前

    Hive旨在吸引一个熟悉SQL的社区。它的理念是我们不需要另一种脚本语言。配置单元支持使用用户选择的语言(可以嵌入在SQL子句中)映射和减少转换脚本。它在Facebook中被熟悉SQL的分析师以及用Python编程的数据挖掘人员广泛使用。Pig中的SQL兼容性工作已经在AFAIK中被放弃,因此这两个项目之间的区别非常明显。

    支持SQL语法也意味着可以与现有的BI工具(如微策略)集成。配置单元有一个ODBC/JDBC驱动程序(这是一个正在进行的工作),应该允许在不久的将来发生这种情况。它还开始添加对索引的支持,这将允许支持此类环境中常见的深入查询。

    最后——这与问题不直接相关——Hive是一个用于执行分析查询的框架。虽然它的主要用途是查询平面文件,但没有理由不能查询其他存储。目前,配置单元可用于查询存储在Hbase中的数据(Hbase是一个键值存储,与大多数RDBMS的核心一样),HadoopDB项目已使用配置单元查询联邦RDBMS层。

        3
  •  37
  •   Community Mohan Dere    7 年前

    我觉得这是最有帮助的(不过,已经一岁了)- http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

    它特别谈到了猪与蜂巢,以及它们在雅虎的工作时间和地点。我觉得这很有见地。一些有趣的注释:

    对数据集进行增量更改/更新时:

    相反,加入新的增量数据并使用 结果与上一个完全联接的结果一起是 正确的方法。这只需要几分钟。标准数据库 操作可以用Pig拉丁语以这种增量方式实现, 使Pig成为这个用例的好工具。

    通过流媒体使用其他工具时:

    Pig与流媒体的集成也使研究人员很容易 使用一个Perl或Python脚本,它们已经在一个 数据集并对一个巨大的数据集运行它。

    关于将配置单元用于数据仓库:

    在这两种情况下,关系模型和SQL都是最合适的。的确, 数据仓库一直是SQL的核心用例之一 它的大部分历史。它有正确的结构来支持类型 分析人员希望使用的查询和工具。它已经在里面了 供现场工具和用户使用。

    Hadoop子项目配置单元提供了一个SQL接口和关系 Hadoop的模型。蜂巢团队已经开始与BI整合 通过ODBC等接口的工具。

        4
  •  28
  •   ragingasiancoder Shivam    9 年前

    看一看 猪Vs蜂巢 比较 nut shell 从一篇“dezyre”文章

    蜂巢 在:分区、服务器、Web界面和JDBC/ODBC支持。

    一些区别:

    1. 蜂巢 最适合 结构化数据 &安培; 最适合 半结构化数据

    2. 蜂巢 用于 报告 &安培; 对于 程序设计

    3. 蜂巢 用作 声明式SQL &安培; 作为一个 程序语言

    4. 蜂巢 支架 分区 &安培; 没有

    5. 蜂巢 可以启动可选的 基于节约的服务器 &安培; 不能

    6. 蜂巢 预先定义表( 架构 )+在数据库中存储架构信息& 没有数据库的专用元数据

    7. 蜂巢 不支持 阿夫罗 但是 做。编辑:配置单元支持Avro,将serde指定为org.apache.hadoop.Hive.serde2.Avro

    8. 还支持其他 同族 用于执行外部联接但配置单元不执行的功能。但两者都是 蜂箱和猪 可以 连接、排序 动态的。

        5
  •  17
  •   G__    12 年前

    我相信你问题的真正答案是,它们是独立的项目,没有中央协调的目标。它们很早就处于不同的空间,随着两个项目的扩展,它们逐渐与时间重叠。

    摘自Hadoop O'Reilly的书:

    Pig:一种数据流语言 非常大的勘探环境 数据集。

    Hive:分布式数据仓库

        6
  •  12
  •   wlk    15 年前

    使用pig/hive查询可以获得类似的结果。主要区别在于理解/编写/创建查询的方法。

    Pig倾向于创建一个数据流:在每个步骤中,您都要做一些处理
    Hive为您提供了类似SQL的语言来操作数据,因此从RDBMS的转换要容易得多(对于以前没有使用SQL经验的人来说,Pig可能更容易)

    值得注意的是,对于Hive,您可以很好地使用该数据的接口(beexwaxforhue,或Hive web接口),它还为您提供有关数据(模式等)的信息的元存储,这些信息作为数据的中心信息非常有用。

    对于不同的查询,我同时使用Hive和Pig(我使用那个可以更快/更轻松地编写查询的查询,我主要是以这种方式进行即席查询),它们可以使用相同的数据作为输入。但目前我大部分工作都是通过蜂蜡完成的。

        7
  •  12
  •   swarb    11 年前

    Pig允许在管道中的任意点加载数据和用户代码。如果数据是流式数据(例如来自卫星或仪器的数据),这一点尤其重要。

    基于RDBMS的Hive需要首先导入(或加载)数据,然后才能对其进行操作。因此,如果在流数据上使用配置单元,则必须继续填充bucket(或文件),并在每个bucket(或文件)上使用配置单元 填满 bucket,同时使用其他bucket来保存新到达的数据。

    猪也使用懒惰评价。它使编程更加容易,人们可以使用它以不同的方式分析数据,比使用类似SQL的语言(如Hive)更自由。所以,如果你真的想分析一些非结构化数据中的矩阵或模式,并想对它们进行有趣的计算,用Pig你可以进行一些公平的距离,而用Hive,你需要一些其他的东西来处理结果。

    Pig在数据导入方面比像Hive这样的RDBMS友好语言更快,但在实际执行方面慢。

    Pig非常适合并行化,因此它可能在数据集庞大的系统中具有优势,即在您更关心结果吞吐量而不是延迟(获取任何特定结果数据的时间)的系统中。

        8
  •  10
  •   Ashwin Aravind    9 年前

    蜂巢对猪-

    配置单元是一个SQL接口,它允许精通SQL的用户或其他工具,如Tableu/Microstrategy/任何其他具有SQL接口的工具或语言。。

    PIG更像是一个ETL管道..带有一步一步的命令,如声明变量、循环、迭代、条件语句等。

    当我想一步一步地编写复杂的逻辑时,我更喜欢编写Pig脚本而不是hive QL。当我习惯于编写一个sql来提取我想要的数据时,我就使用Hive。对于配置单元,在查询之前需要定义表(就像在RDBMS中一样)

    两者的目的是不同的,但是在幕后,两者都做同样的事情,转换成map-reduce程序

        9
  •  8
  •   Jegan    12 年前

    阅读这个链接中猪和蜂巢的区别。

    http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features

    所有方面都给出了。如果你不知道该选择哪一个,那么你必须看到那个网页。

        10
  •  7
  •   zjffdu    12 年前
    1. Pig拉丁语是数据流风格,更适合软件工程师。而sql更适合于习惯sql的分析人员。对于复杂的任务,对于配置单元,您必须手动创建临时表来存储中间数据,但对于pig来说这不是必需的。

    2. Pig拉丁语适用于复杂的数据结构(如小图)。pig中有一个名为DataBag的数据结构,它是元组的集合。有时需要计算涉及多个元组的度量(元组之间有一个隐藏的链接,在本例中我称之为graph)。在这种情况下,很容易编写一个UDF来计算涉及多个元组的度量。当然可以在蜂巢里做,但不像猪那样方便。

    3. 在我看来,用猪写自定义项比用蜂巢写要容易得多。

    4. Pig没有元数据支持(或者是可选的,将来可能会集成hcatalog)。配置单元将表的元数据存储在数据库中。

    5. 您可以在本地环境中调试pig脚本,但hive很难做到这一点。原因是第三点。您需要在本地环境中设置配置单元元数据,非常耗时。

        11
  •  5
  •   Raj    12 年前

    我在下面找到了一个有用的链接来探索如何以及何时使用蜂箱和猪。

    http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/

        12
  •  4
  •   Praveen Sripati    14 年前
        13
  •  4
  •   Tamil Selvan C    12 年前

    从链接: http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=What-kind-of-datawarehouse-application-is-suitable-for-Hive ?

    配置单元不是完整的数据库。Hadoop和HDFS的设计约束和限制限制了Hive的功能。

    配置单元最适合于数据仓库应用程序,其中

    1) 分析相对静态的数据,

    2) 不需要快速响应时间,并且

    3) 当数据变化不快时。

    配置单元不提供OLTP、在线事务处理所需的关键功能。它更接近于OLAP工具,在线分析处理。 因此,Hive最适合于数据仓库应用程序,在这些应用程序中,维护和挖掘大型数据集以获取洞察、报告等。

        14
  •  4
  •   user3167459    11 年前

    简单地说,Pig是一个用于创建与Hadoop一起使用的MapReduce程序的高级平台,我们将使用Pig脚本将大量数据处理成所需的格式。

    一旦获得处理过的数据,该处理过的数据就保存在HDFS中,以便以后处理以获得期望的结果。

    在存储的处理数据之上,我们将应用HIVE SQL命令来获得所需的结果,在内部,这个HIVE SQL命令运行MAP Reduce程序。

        15
  •  4
  •   exAres    11 年前

    简而言之,要对这两个方面进行非常高层次的概述:

    1) Pig是hadoop上的关系代数

    2) Hive是hadoop上的SQL(比Pig高一级)

        16
  •  3
  •   221B    10 年前

    猪身上不可能的蜂巢能做什么?

    分区可以使用HIVE完成,但不能在PIG中完成,这是一种绕过输出的方法。

    什么猪能做蜂巢里不可能做的事?

    位置引用-即使您没有字段名,我们也可以使用像$0这样的位置引用-对于第一个字段,$1对于第二个字段,依此类推。

    另一个基本区别是,PIG不需要模式来编写值,但是HIVE需要模式。

    您可以使用JDBC和其他方法从任何外部应用程序连接到配置单元,但不能使用PIG。

    注意:两者都运行在HDFS(hadoop分布式文件系统)之上,并且语句被转换为Map Reduce程序。

        17
  •  3
  •   tree em    6 年前

    当我们使用 Hadoop 从某种意义上说,这意味着我们正试图进行巨大的数据处理 数据处理的最终目标是从中生成内容/报告。

    因此,它内部包含两个主要活动:

    1) 加载数据处理

    2) 生成内容并用于报告等。。

    加载/数据处理->Pig将对其有所帮助。

    这有助于ETL(我们可以使用pig脚本执行ETL操作)。

    处理结果后,我们可以使用配置单元根据处理的结果生成报告。

    蜂巢: 它建立在hdfs之上,用于仓库处理。

    我们可以使用hive从pig生成的处理内容轻松生成临时报告。

        18
  •  1
  •   rbanikaz    10 年前

    猪什么都吃!这意味着它可以使用非结构化数据。

    配置单元需要架构。

        19
  •  1
  •   Krishna Kalyan    10 年前

    一般来说,Pig对于ETL类型的工作负载是有用的。例如,每天需要对数据执行的一组转换。

    当您需要运行临时查询或只是想浏览数据时,配置单元会发光。它有时可以充当可视化层(Tableau/Qlikview)的接口。

    两者都是必不可少的,而且服务于不同的目的。

    推荐文章