我是Hadoop和mapreduce的新手。我们有一个普通的java应用程序,我们从hadoop文件系统中读取一个文件(8 GB大小),并对这些数据应用一些规则。应用规则后,我们得到java哈希图(大小很大),并将该数据保存在缓存或缓冲区中。同时,我们通过对 hive 应用查询从 hive 获取数据,并准备一个 java 哈希图,该哈希图同样很大。现在我们比较两个哈希图数据以准备最终报告以检查数据准确性。
在上面的过程中,由于我们使用普通的java程序来完成我们面临的以下问题。
-
为了处理这些庞大的数据,完成这项工作需要很长时间。因为输入文件中包含数千万条记录,我们需要对每一行应用规则来提取数据。完成这项工作需要几天时间。同时 hive 也包含相同数量的数据,查询从 hive 返回数据需要花费太多时间。
-
由于我们将数据保存在缓冲区中,因此我们面临着内存问题。
现在我们正尝试在Hadoopmapreduce中实现相同的功能。
- 实现上述方案的最佳方法是什么?
- 在mapreduce中实现上述场景的最佳方法是什么?
- 如何使用mapreduce提高应用程序性能?
8 GB 是一个很小的数据集。我可以将其中 4 个"数据集"放入我的笔记本电脑 RAM 中!只需将其倾倒在任何关系引擎中并根据需要按摩,直到奶牛回家。这不是"大数据"。
作为记录,在 Hive 中处理两个真正大的数据集(例如每个数据集 +1 TB)的方法是排序-合并-存储桶联接(又名。中小企业加入)。阅读语言手册加入优化,观看 Hive 中的加入策略。