使用Hive / Hadoop加入两个已排序的文件

时间:2014-07-25 21:11:14

标签: performance sorting hadoop hive etl

我有两个已排序的文件,我需要使用hive或hadoop加入并通过密钥聚合。 文件A按(A.X,A.Y)排序,文件B按(B.X,B.Y)排序。我可以使用配置单元进行连接,创建中间结果,然后执行另一个查询来对值进行求和。进行此操作的最佳方法是什么?做mapreduce工作或使用配置单元?文件B比文件A小得多。我可以使用文件A和文件B的排序吗?

FILE A       FILE B    INTERMEDIATE_FILE   FINAL_FILE
X Y  Z       X Y       X Y  Z              X Y   
1 V1 10      1 V1      1 V1 10             1 30 (20 + 10)
1 V1 20      2 V2      1 V1 20             2 50 (50)
1 V2 30      3 V1      2 V2 50             3 130 (60 + 70)
2 V1 40                3 V1 60
2 V2 50                3 V1 70
3 V1 60                
3 V1 70
4 V1 80

由于

2 个答案:

答案 0 :(得分:0)

您可以使用pig中的'merge'选项加入数据。

示例:

data_a = load '$input1' as (X, Y, Z);
data_b = load '$input2' as (P, Q);
join_data = join data_a by (X,Y), data_b by (P,Q) using 'merge';

在join_data关系上执行聚合逻辑。

这是排序合并连接操作。通过打开两个文件并遍历它们,可以在映射阶段完成连接。 Pig将此称为合并连接,因为它是排序合并连接,但排序已经完成。

来源:Alan Gates的编程猪。

答案 1 :(得分:0)

我创建了一个Identy Mapper Reducer作业,然后使用CompositeInputFormat执行另一个作业。在地图阶段,我使用称为“In-mapper Combiner”的模式进行了计算。所以,这个第二个工作没有减速器。我认为这是解决方案是goind线性扩展。因此,如果我将我的群集的大小增加一倍,我的工作就是在半个时间内完成。