Pig vs Hive vs Native Map Reduce

时间:2013-07-30 14:47:31

标签: hadoop mapreduce hive apache-pig

我对Pig,Hive抽象是什么有基本的了解。但是我不清楚需要Hive,Pig或原生地图减少的场景。

我经历了一些文章,其中基本上指出Hive用于结构化处理,而Pig用于非结构化处理。我们什么时候需要原生地图减少?你能指出一些使用Pig或Hive无法解决但却在原生地图中减少的场景吗?

7 个答案:

答案 0 :(得分:19)

复杂的分支逻辑有很多嵌套的if .. else ..结构在Standard MapReduce中更容易,更快速地实现,为了处理你可以使用Pangool的结构化数据,它还简化了JOIN这样的事情。此外,标准MapReduce可让您完全控制,以最大限度地减少数据处理流程所需的MapReduce作业数量,从而转化为性能。但它需要更多时间来编码和引入变化。

Apache Pig也适用于结构化数据,但它的优点是能够处理数据的BAG(按键分组的所有行),实现以下内容更简单:

  1. 获取每组的前N个元素;
  2. 计算每组的总数,然后将该总数与组中的每一行相对应;
  3. 使用Bloom过滤器进行JOIN优化;
  4. Multiquery支持(当PIG尝试通过在单个作业中执行更多操作来最小化MapReduce作业的数量时)
  5. Hive更适合于即席查询,但其主要优势在于它具有存储和分区数据的引擎。但它的表可以从Pig或Standard MapReduce中读取。

    还有一件事,Hive和Pig不适合使用分层数据。

答案 1 :(得分:14)

简短回答 - 当我们需要对我们想要处理数据的方式进行非常深入的细粒度控制时,我们需要MapReduce。有时,根据Pig和Hive查询来表达我们需要的东西并不是很方便。

不应该完全不可能做到,你可以使用MapReduce,通过Pig或Hive。凭借Pig和Hive提供的灵活性,您可以以某种方式实现目标,但可能并不那么顺利。你可以编写UDF或做一些事情来实现它。

这些工具的使用没有明显的区别。这完全取决于您的特定用例。根据您的数据和处理类型,您需要更好地确定哪种工具符合您的要求。

修改:

前段时间我有一个用例,我必须收集地震数据并对其进行一些分析。保存这些数据的文件的格式有点奇怪。部分数据是EBCDIC编码的,而其余数据是二进制格式。它基本上是一个平面二进制文件,没有像\ n或其他东西的分隔符。我很难找到使用Pig或Hive处理这些文件的方法。结果我不得不与MR安定下来。最初花了一些时间,但是一旦你准备好了基本的模板,MR就会变得更加顺畅了。

所以,就像我之前说的那样,它基本上取决于你的用例。例如,迭代数据集的每个记录在Pig(只是一个foreach)中非常容易,但是如果你需要 foreach n 怎么办?因此,当您需要对您处理数据的方式进行“那种”控制时,MR更适合。

另一种情况可能是您的数据是分层的而不是基于行的,或者您的数据是高度非结构化的。

使用MR而不是使用Pig / Hive,更容易解决涉及作业链和作业合并的Metapatterns问题。

与使用Pig / hive相比,使用某些xyz工具完成特定任务有时非常方便。恕我直言,MR在这种情况下也变得更好。例如,如果您需要对BigData进行一些统计分析,那么与Hadoop一起使用的R可能是最好的选择。

HTH

答案 2 :(得分:10)

<强>的MapReduce:

Strengths:
      works both on structured and unstructured data.
      good for writing complex business logic.

Weakness:
     long development type
     hard to achieve join functionality

Hive:

Strengths:
     less development time.
     suitable for adhoc analysis.
     easy for joins

Weakness :
     not easy for complex business logic.
     deals only structured data.

<强>猪

Strengths :
      Structured and unstructured data.
      joins are easily written.

Weakness:
     new language to learn.
     converted into mapreduce.

答案 3 :(得分:5)

蜂房

优点:

喜欢Sql 数据库人喜欢这样。 对结构化数据的良好支持。 目前支持数据库架构和视图结构 支持并发多用户,多会话场景。 更大的社区支持。 Hive,Hiver服务器,Hiver Server2,Impala,Centry已经

缺点: 随着数据变得越来越大,内存溢出问题,性能会下降。不能做很多事。 分层数据是一项挑战。 非结构化数据需要udf之类的组件 在大数据等情况下,多种技术的组合可能是具有UTDF的噩梦动态部分

猪: 优点: 基于优秀脚本的数据流语言。

缺点:

非结构化数据需要udf之类的组件 不是一个很大的社区支持

MapReudce: 优点: 不同意“难以实现连接功能”,如果您了解要实现的连接类型,则可以使用少量代码实现。 大多数时候MR产生更好的性能。 MR对分层数据的支持非常好,特别是实现树状结构。 更好地控制分区/索引数据。 工作链。

缺点: 需要很好地了解api以获得更好的性能等 代码/调试/维护

答案 4 :(得分:2)

Scenarios其中Hadoop Map Reduce优先于Hive或PIG

  1. 当您需要明确的驱动程序控制时

  2. 每当作业需要实施自定义分区程序

  3. 如果已存在预定义的Java Mappers或Reducers库以供作业

  4. 如果在组合大量数据集时需要大量可测试性
  5. 如果应用程序需要命令物理结构的遗留代码要求
  6. 如果作业需要在特定的处理阶段进行优化,那么最好使用in-mapper combined等技巧
  7. 如果作业对分布式缓存(复制连接)有一些棘手的使用,则交叉产品,分组或连接
  8. Comparison between Map reduce/ Pig/ Hive

    Pig / Hive的优点:

    1. Hadoop MapReduce需要比Pig和Hive更多的开发工作。
    2. Pig和Hive编码方法比完全调整的Hadoop MapReduce程序慢。
    3. 使用Pig和Hive执行作业时,Hadoop开发人员无需担心任何版本不匹配。
    4. 在Pig或Hive编码时,开发人员编写java级别错误的可能性非常有限。
    5. 查看此帖子进行Pig Vs Hive比较。

答案 5 :(得分:1)

我们使用PIG和HIVE可以做的所有事情都可以使用MR实现(有时它会耗费时间)。 PIG和HIVE使用下面的MR / SPARK / TEZ。因此,在Hive和PIG中,MR可以做或不可能做的所有事情。

答案 6 :(得分:1)

Here是一个很好的比较。 它指定了所有用例场景。