【问题标题】:Filtering output in hadoop过滤hadoop中的输出
【发布时间】:2015-12-24 21:26:18
【问题描述】:

我是 Hadoop 新手,正在玩 WordCount 示例。

我遇到了一个令我困惑的问题。例如,如果我从文本文件中计算字数,并且我想以这样的方式过滤它,以便输出中只有超过 5 个字母的单词,我是否必须运行 2 个作业才能做到这一点?

第一个工作是统计字数,第二个工作是过滤少于 5 个字母的单词?

或者我可以将逻辑写入reducer,如果出现少于5次,不会将单词写入结果文件?如果有多个 reducer 实例在运行,这会导致无效的输出吗?

【问题讨论】:

    标签: hadoop


    【解决方案1】:

    简单的答案是您不需要工作。

    您可以通过一份工作来实现这一目标。你在最后一个问题中描述的逻辑是完全正确的。

    在 MapReduce 框架中,与单个键相关的所有数据(值)始终传递给同一个 Reducer。因此,即使为您的工作运行多个减速器也不会影响输出。

    PS:

    输出中只有超过 5 个字母的单词

    这是您问题的第二段。我假设您的意思是单词出现 5 次而不是单词的长度。

    但您只需要长度超过 5 个的单词,您可以在 Mapper 本身中进行过滤。所以sort-shuffle阶段(数据排序和网络传输)的数据会更少,Reducer的数据处理也会更少。

    【讨论】:

      【解决方案2】:

      一个 MapReduce 作业就足够了。

      最佳实践表明,如果可能,您应该在映射器中过滤投影数据。

      在您的情况下,您的过滤条件仅取决于输入数据(输入单词中的字符),那么您可以在映射器端过滤输入,并且只发送超过 5 个字母的减速器单词。提高工作绩效。将数据发送到减速器以丢弃它是没有意义的。虽然它也应该工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-15
        • 2021-07-02
        • 1970-01-01
        • 2012-12-15
        • 2017-12-31
        相关资源
        最近更新 更多