【发布时间】:2010-08-04 15:02:15
【问题描述】:
我的团队使用 Hadoop 库构建了一个 Java 应用程序,将一堆输入文件转换为有用的输出。 考虑到当前的负载,单个多核服务器在未来一年左右可以正常工作。我们(目前)还没有需要多服务器 Hadoop 集群,但我们选择“正在准备中”开始这个项目。
当我在命令行上(或在 eclipse 或 netbeans 中)运行这个应用程序时,我还不能说服它一次使用多个 map 和/或 reduce 线程。 鉴于该工具非常占用 CPU 资源,这种“单线程”是我目前的瓶颈。
在 netbeans 分析器中运行它时,我确实看到应用程序启动了多个线程用于各种目的,但同时只有一个 map/reduce 正在运行。
输入数据由多个输入文件组成,因此 Hadoop 至少应该能够在映射阶段为每个输入文件同时运行 1 个线程。
我该怎么做才能至少有 2 甚至 4 个活动线程在运行(这对于该应用程序的大部分处理时间来说应该是可能的)?
我认为这是我忽略的非常愚蠢的事情。
我刚刚发现了这个:https://issues.apache.org/jira/browse/MAPREDUCE-1367 这实现了我在 Hadoop 0.21 中寻找的功能 它引入了标志 mapreduce.local.map.tasks.maximum 来控制它。
现在我还找到了here in this question 描述的解决方案。
【问题讨论】:
标签: java multithreading command-line hadoop mapreduce