【发布时间】:2015-09-02 17:21:42
【问题描述】:
如何在一个 mapreduce 程序中加入三个大型数据集。所有这三个文件都无法放入内存中。file1 有 key K1,file2 有 K2,file3 有 k1 和 k2。我想加入 File1 和 File2引用 File3。如果有任何技术可以做到这一点,请告诉我。提前谢谢...!!
【问题讨论】:
如何在一个 mapreduce 程序中加入三个大型数据集。所有这三个文件都无法放入内存中。file1 有 key K1,file2 有 K2,file3 有 k1 和 k2。我想加入 File1 和 File2引用 File3。如果有任何技术可以做到这一点,请告诉我。提前谢谢...!!
【问题讨论】:
你不能用一个 mapreduce 作业来做到这一点。由于您必须为输入 1 和输入 2(键必须是字段 k1 或 k2 和连接标识符)创建两个单独的自定义可写类,并为输入 3 创建单独的一个(键必须是字段 k1、k2 和连接标识符)。所以它需要两个 mapreduce 作业。
MR 1(根据K1键加入输入1和输入3)。
映射器 1
地图输出:
(K,V)=>((K1,input1),值)
映射器 2
地图输出:
(K,V)=>((K1,input3),值)
在 reducer 中追加/加入数据集。
MR2(根据K2键加入MR 1的输入2和输出)
映射器 1:
地图输出:
(K,V)=>((K2,input2),值)
映射器 2:
地图输出:
(K,V)=>((K2,输出MR1),值)
在 reducer 中追加/加入数据集
【讨论】: