【问题标题】:Pig vs Hive vs Native Map ReducePig vs Hive vs Native Map Reduce
【发布时间】:2023-03-23 21:44:01
【问题描述】:

我对 Pig、Hive 抽象是什么有了基本的了解。但我对需要 Hive、Pig 或原生 map reduce 的场景没有明确的概念。

我浏览了几篇文章,基本上都指出 Hive 用于结构化处理,Pig 用于非结构化处理。我们什么时候需要原生 map reduce?您能否指出一些使用 Pig 或 Hive 无法解决但在原生 map reduce 中无法解决的场景?

【问题讨论】:

    标签: hadoop mapreduce hive apache-pig


    【解决方案1】:

    简短回答 - 当我们需要对处理数据的方式进行非常深层次和细粒度的控制时,我们需要 MapReduce。有时,用 Pig 和 Hive 查询来准确表达我们需要的内容并不是很方便。

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

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

    编辑:

    前段时间,我有一个用例,我必须收集地震数据并对其进行一些分析。保存这些数据的文件格式有些奇怪。部分数据采用EBCDIC 编码,而其余数据采用二进制格式。它基本上是一个平面二进制文件,没有像 \n 之类的分隔符。我很难找到使用 Pig 或 Hive 处理这些文件的方法。结果我不得不和MR安定下来。最初需要一些时间,但逐渐变得更加流畅,因为一旦您准备好基本模板,MR 真的很快。

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

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

    涉及作业链接和作业合并的元模式问题直接使用 MR 比使用 Pig/Hive 更容易解决。

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

    HTH

    【讨论】:

    • 谢谢...你能举个例子吗?这真的很有帮助:)
    • 好的..我会给你我的例子..希望它有所帮助。
    • 解决“但是如果你需要 foreach n??”在 PIG 中,您可以在 BAG/组上使用 LIMIT 或嵌套的 LIMIT n,请参阅stackoverflow.com/questions/14604311/… where n==1
    【解决方案2】:

    具有大量嵌套 if .. else .. 结构的复杂分支逻辑在标准 MapReduce 中更容易和更快地实现,对于处理结构化数据,您可以使用 Pangool,它还简化了诸如 JOIN 之类的事情。此外,标准 MapReduce 让您可以完全控制数据处理流程所需的 MapReduce 作业数量,从而转化为性能。但它需要更多时间来编写代码和引入更改。

    Apache Pig 也适用于结构化数据,但它的优势在于能够处理 BAG 数据(按键分组的所有行),实现起来更简单,例如:

    1. 获取每个组的前 N ​​个元素;
    2. 计算每组的总数,然后将该总数与组中的每一行相比较;
    3. 使用 Bloom 过滤器进行 JOIN 优化;
    4. 多查询支持(当 PIG 尝试通过在单个作业中执行更多操作来最小化 MapReduce 作业的数量时)

    Hive 更适合临时查询,但它的主要优点是它具有存储和分区数据的引擎。但它的表可以从 Pig 或 Standard MapReduce 中读取。

    还有一点,Hive 和 Pig 不太适合处理分层数据。

    【讨论】:

    • 此外,如果您必须在 Pig/Hive 中编写大量 UDAF 来解决您的问题,您最好编写一个单独的 map reduce 工作来完成所有这些工作。根据我的经验,一旦您采用努力编写一个 map reduce 作业,将来您将主要对其进行简单的增量更改,主要是在 map/reduce 方法中随着业务规则的发展。当团队中有新成员时,您还希望他们在开始对 pig/hive 进行认真的工作之前了解 map reduce 的细微差别,并且您的 MR 代码库可以为他们提供很好的参考。
    • 完全同意评论。 Java MR 也是第一波 ETL 作业的一个很好的选择,因为它有很多分支逻辑和旋转。此外,java 代码更容易进行单元测试,如果您想要获得最佳性能,有时它是唯一的选择。但是很多 Hadoop 用户大多是前 SQL 开发人员,他们非常不愿意编写任何类型的代码,经常花费太多精力来尝试用 SQL 或脚本解决问题。另一方面,前 Java 应用程序开发人员无法编写高效的数据处理代码,因为他们不知道什么是归并排序。
    【解决方案3】:

    Mapreduce:

    Strengths:
          works both on structured and unstructured data.
          good for writing complex business logic.
    
    Weakness:
         long development type
         hard to achieve join functionality
    

    蜂巢:

    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.
    

    【讨论】:

      【解决方案4】:

      蜂巢

      优点:

      类似Sql 数据库人员喜欢这一点。 对结构化数据的良好支持。 目前支持数据库模式和视图等结构 支持并发多用户、多会话场景。 更大的社区支持。 Hive , Hiver server , Hiver Server2 , Impala , Centry 已经

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

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

      缺点:

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

      MapReudce: 优点: 不同意“难以实现连接功能”,如果您了解要实现的连接类型,您可以用几行代码实现。 大多数情况下,MR 会产生更好的性能。 MR 对分层数据的支持非常好,尤其是实现树状结构。 更好地控制分区/索引数据。 作业链。

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          Scenarios Hadoop Map Reduce 优于 Hive 或 PIG

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

          2. 每当作业需要实现自定义分区器时

          3. 如果已经存在用于作业的 Java Mappers 或 Reducers 的预定义库

          4. 如果您在组合大量大型数据集时需要良好的可测试性
          5. 如果应用程序需要控制物理结构的遗留代码要求
          6. 如果作业需要在特定处理阶段通过充分利用映射器内组合等技巧进行优化
          7. 如果作业对分布式缓存(复制连接)、交叉产品、分组或连接有一些棘手的使用

          Pig/Hive 的优点:

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

          查看此帖子以进行Pig Vs Hive 比较。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-03-24
              • 1970-01-01
              • 2018-06-14
              • 1970-01-01
              • 2017-08-23
              • 2017-11-05
              • 1970-01-01
              • 2018-07-08
              相关资源
              最近更新 更多