【问题标题】:Pig - Order by - Different reducers?猪 - 排序方式 - 不同的减速器?
【发布时间】:2014-07-30 19:47:32
【问题描述】:

我是猪新手。我正在尝试进行合并连接。满足以下要求:

数据必须在连接键上按升序 (ASC) 排序 侧面。

示例文件:

4, The Object of Beauty, 1991,2.8,6150 
1, The Nightmare Before Christmas, 1993,3.9,4568 
2, The Mummy, 1932,3.5,4388 
3, Orphans of the Storm, 1921,3.2,9062 
3, Orphans of the Storm, 1921,3.2,9062
4, The Object of Beauty, 1991,2.8,6150 
5, Night Tide, 1963,2.8,5126 
6, One Magic Christmas, 1985,3.8,5333 
7, Muriel's Wedding, 1994,3.5,6323 
8, Mother's Boys, 1994,3.4,5733 
9, Nosferatu: Original Version, 1929,3.5,5651 
10, Nick of Time, 1995,3.4,5333 

我在 PIG 中执行了以下命令:

movies = LOAD 'Sample.csv' using PigStorage (',') as (id: int, name, year, rating, duration); 
movies_sorted movies = order by id ASC PARALLEL 3; 
movies_sorted store into 'output_movies';

当我执行时:

hadoop fs-cat ./output2/part-r-00000

我看到了,在不同的分区中有相同键的记录。例如,我在两个不同的分区中有 id 为 3 的记录。据我所知,具有相同键的记录应始终位于同一分区中。 F

可能出了什么问题?

【问题讨论】:

    标签: hadoop mapreduce apache-pig


    【解决方案1】:

    在少数情况下,包括ORDER BY 和倾斜的JOIN,Pig 将打破将给定键的所有记录仅发送到一个reducer 的map-reduce 约定。 (请注意,排序的概念已经超出了 map-reduce 范式。)但是,您仍然可以保证,如果您按顺序遍历 reducer 的输出(如 part-r-NNNNN 中的数字所示),记录将按规定订购。

    您可以在this thread阅读更多内容。

    【讨论】:

    • 谢谢!你说的对! pig 中是否有任何命令将相同的密钥发送到相同的减速器?如果没有,我可以用什么来满足这个要求,执行合并连接。我需要创建一个 IdentityMapper/Reducer。我也会试试 Zebra。
    • 合并连接是一个只有映射的工作,所以你根本不需要减速器。您可以使用一些技巧来添加一个 reduce 阶段,该阶段确实强制执行一个 reducer-per-key 标准,但我什至不清楚为什么首先需要合并连接。如果您仍然感兴趣,我建议您再问一个问题,考虑到上述情况。
    • 我知道 merge-join 是一个 map-only 作业,但要执行它,我需要满足以下要求:数据必须在连接键上以升序 (ASC) 的顺序在两边进行排序。而且我不知道如何满足执行 map-reduce 作业的要求。
    • 在单个输入 file 中包含一个键的所有记录不是合并连接的要求。唯一的要求就是对数据进行排序,只要使用ORDER BY对数据进行排序就可以满足要求。
    • 真的,我想做的是使用 CompositeInputFormat 从 map-reduce 作业执行 map-side join。要使用 CompositeInputFormat:“每个输入数据集必须划分为相同数量的分区,并且必须按每个源中的相同键(连接键)排序。特定键的所有记录必须驻留在同一分区中,并且这是强制性的。”
    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多