【问题标题】:Using Hadoop streaming with perl for map reduce使用带有 perl 的 Hadoop 流进行 map reduce
【发布时间】:2015-11-18 12:07:30
【问题描述】:

我想使用带有 perl 脚本的 hadoop-streaming 功能作为映射器和缩减器。我发现 this explanation 部分回答了我的问题,但是它不包含 reducer 的功能,它为每个键一起处理所有值。

例如,mapper 可能会提取对,reducer 将输出每个产品的类别列表。这当然可以通过将所有 reducer 数据保存在内存中来实现(就像我之前提到的示例一样),但在许多情况下,这是不可扩展的。有没有办法让 perl 脚本一次获取每个键的所有值(如普通的 map-reduce 作业)?

【问题讨论】:

    标签: perl hadoop mapreduce hadoop-streaming


    【解决方案1】:

    你可以使用cpan库Hadoop::Streaming

    sub reduce 
    { 
        my ( $self, $key, $value_iterator) = @_;
        ...
        while( $value_iterator->has_next() ) { ... }
        $self->emit( $key, $composite_value );
    }
    

    【讨论】:

    • 为了确保我理解你的答案,我应该在我的脚本中添加一行:“使用 Hadoop::Streaming”。然后我应该把我的 perl 代码放在 sub 中(与相关的键和值部分有关)。我假设默认的键值分隔符是制表符。这是正确的吗?
    • 是的,你是对的。注意:所有tasktracker节点必须安装Hadoop流库(perl库)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2011-07-21
    • 2014-03-22
    • 1970-01-01
    相关资源
    最近更新 更多