我正在使用hadoop并尝试用两个数据集创建一些interection函数,这是最好的方案。我可以将一个数据集加载到内存中,然后在Map函数中与另一个数据集相交,但如果数据集对于ram内存来说太大,这不是一个解决方案,您的想法是什么?谢谢你的回答,我将尝试这些,看看什么是最好的解决方案。
erhoui1w1#
你可以试着把它们放到 DistributedCache -在那页上有一个很好的例子。
DistributedCache
inkz8wg92#
分布式缓存适用于小型数据集,可以考虑在内存中缓存。如您所述,如果数据很大,分布式缓存就不是一种选择。hadoop框架允许对大型数据集进行排序,但是,您可能需要遵循许多步骤,其中一个要求是,必须先对输入数据集进行排序,然后才能进行连接。您可以考虑利用apache配置单元来实现这一点。如果排除了配置单元,那么本链接中提到的步骤应该可以帮助您开始使用大型数据集在hadoop map/reduce中为多个Map器配置Map端连接
voj3qocg3#
与hadoopapi周围的其他平台相比,在mapred中操纵交叉点是很困难的。有人已经提到了hive(如果您有sql背景,那么非常容易实现),但是您也可以考虑:Pig级联(如果内存是一个问题,特别是cogroup,如果不是,则是hashjoin)
3条答案
按热度按时间erhoui1w1#
你可以试着把它们放到
DistributedCache
-在那页上有一个很好的例子。inkz8wg92#
分布式缓存适用于小型数据集,可以考虑在内存中缓存。如您所述,如果数据很大,分布式缓存就不是一种选择。
hadoop框架允许对大型数据集进行排序,但是,您可能需要遵循许多步骤,其中一个要求是,必须先对输入数据集进行排序,然后才能进行连接。您可以考虑利用apache配置单元来实现这一点。如果排除了配置单元,那么本链接中提到的步骤应该可以帮助您开始使用大型数据集
在hadoop map/reduce中为多个Map器配置Map端连接
voj3qocg3#
与hadoopapi周围的其他平台相比,在mapred中操纵交叉点是很困难的。有人已经提到了hive(如果您有sql背景,那么非常容易实现),但是您也可以考虑:
Pig
级联(如果内存是一个问题,特别是cogroup,如果不是,则是hashjoin)