gpt4 book ai didi

apache-pig - pig : Force UDF to occur in Reducer or set number of mappers

转载 作者:行者123 更新时间:2023-12-01 12:46:09 26 4
gpt4 key购买 nike

我有一个运行非常耗时的 UDF 的 pig 脚本。 Pig 似乎将 UDF 设置为作为映射作业而不是化简作业运行。结果,创建了少量次优的映射器来运行该作业。我知道我可以使用 setDefaultParallel 设置在 pig 中使用的默认 reducer 数量以及使用 PARALELL x PigLatin 中的命令来设置给定行的 reducer 数量。但是我该怎么做才能设置映射器的数量?我看过关于通过定义我自己的 InputSplit 大小来增加映射器数量的帖子,但我想将映射器的数量明确设置为主机数 * 内核数,文件大小不应该与它有任何关系。

如果我无法控制映射器的数量,是否有任何方法可以强制我的 UDF 作为 reducer 出现,因为我可以控制它们?

最佳答案

  • 不,您可以 不是 明确指定映射器的数量只是因为 Hadoop 不能那样工作。创建的映射器数量大约为 total input size/input split size ,但如果您有大量小文件(由于 HDFS 的工作方式,不鼓励这样做),这可能会产生偏差。所以基本上,Pig 不允许你这样做,因为 Hadoop 根据定义没有那个选项。
  • 不。无论如何,不​​是明确地使用 Pig。也因为“它不能那样工作”。 Pig 为您编译和优化内容,输出是 MR 作业流。当下一个版本的 Pig 出现时,任何将 UDF 强制转换为 reducer 的技巧都可以轻松更改。如果你觉得你真的需要 reducer 中的 UDF,你可以创建一个自定义的 MR 作业 jar,在其中实现一个直通映射器,然后在 reducer 中完成你的工作。你用 MAPREDUCE 从 pig 中调用它命令。但是,该解决方案听起来是错误的,并且您可能误解了某些内容。你可以看看是什么迫使 Pig 得到一个重要的想法——a DISTINCT , LIMITORDER将始终这样做,GROUP通常也会这样做。一个 JOIN通常会同时获得一个映射器和一个 reducer 。如您所见,强制 reduce 的操作是利用 Hadoop 的一些内在特性的操作(例如 ORDER 处于 reduce 中,因为 reducer 输入已排序)。没有简单的方法可以将 UDF 潜入其中,因为没有任何类型的 UDF(评估、过滤、加载、存储)可以轻松地与 reducer 一起使用。
  • 关于apache-pig - pig : Force UDF to occur in Reducer or set number of mappers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735696/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com