如何使用hadoop mapreduce比较两个大数据集?

时间:2014-03-31 10:55:22

标签: performance hadoop mapreduce hive

我是hadoop和mapreduce的新手。我们有一个普通的java应用程序,我们从hadoop文件系统读取一个文件(大小为8 GB),我们对这些数据应用了一些规则。应用规则后,我们得到java hashmap(大小很大),我们将这些数据保存在缓存或缓冲区中。同时,我们通过对其应用查询来获取来自配置单元的数据,并准备一个同样巨大的java hashmap。现在我们比较两个哈希映射数据以准备最终报告以检查数据准确性。

在上面的过程中,因为我们使用普通的java程序来完成我们面临的问题。

  1. 要处理这些庞大的数据,完成这项工作需要很长时间。因为输入文件中包含数千万条记录,我们需要在每一行上应用规则来提取数据。完成这项工作需要几天时间。同时,hive也包含相同数量的数据,查询花费了太多时间从hive返回数据。

  2. 由于我们将数据保留在缓冲区中,因此我们面临内存问题。

  3. 现在我们正在尝试在hadoop mapreduce中实现相同的功能。

    1. 实现上述方案的最佳方法是什么?
    2. 在mapreduce中实现上述方案的最佳方法是什么?
    3. 如何使用mapreduce提高应用程序性能?

1 个答案:

答案 0 :(得分:3)

8 GB是一个很小的数据集。我可以将4个'数据集'放入我的笔记本电脑内存中!只需将其倾倒在任何关系引擎中并按摩它,直到奶牛回家。这不是“大数据”。

为了记录,在Hive中处理两个真正大型数据集(比如每个+1 TB)的方法是排序 - 合并 - 桶连接(也称为SMB连接)。阅读LanguageManual JoinOptimization,注意Join Strategies in Hive