java - 在多个 CPU 内核上运行独立的 Hadoop 应用程序

标签 java multithreading command-line hadoop mapreduce

我的团队使用 Hadoop 库构建了一个 Java 应用程序,将大量输入文件转换为有用的输出。 考虑到当前的负载,单个多核服务器在未来一年左右的时间里表现良好。我们(还)不需要建立多服务器 Hadoop 集群,但我们选择“准备中”开始这个项目。

当我在命令行(或在 eclipse 或 netbeans 中)运行这个应用程序时,我还不能说服它一次使用多个 map 和/或 reduce 线程。 鉴于该工具非常占用 CPU,这种“单线程”是我目前的瓶颈。

当在 netbeans profiler 中运行它时,我确实看到该应用程序出于各种目的启动了多个线程,但同时只有一个 map/reduce 在运行。

输入数据由多个输入文件组成,因此 Hadoop 至少应该能够在映射阶段同时为每个输入文件运行 1 个线程。

我该怎么做才能至少运行 2 个甚至 4 个 Activity 线程(对于此应用程序的大部分处理时间来说这应该是可能的)?

我希望这是我忽略的非常愚蠢的事情。


我刚找到这个:https://issues.apache.org/jira/browse/MAPREDUCE-1367 这实现了我在 Hadoop 0.21 中寻找的功能 它引入标志 mapreduce.local.map.tasks.maximum 来控制它。

现在我还找到了 here in this question 中描述的解决方案.

最佳答案

我不确定我是否正确,但是当您在本地模式下运行任务时,您不能有多个映射器/缩减器。

无论如何,要设置最大运行映射器和缩减器的数量,请使用配置选项 mapred.tasktracker.map.tasks.maximummapred.tasktracker.reduce.tasks.maximum默认情况下,这些选项设置为 2,所以我可能是对的。

最后,如果你想为多节点集群做好准备,请直接以完全分布式的方式运行它,但要让所有服务器(namenode、datanode、tasktracker、jobtracker ......)在一台机器上运行

关于java - 在多个 CPU 内核上运行独立的 Hadoop 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3406839/

相关文章:

java - SnakeYAML:以不同的方式创建一些对象

multithreading - 减少缓存行失效的总线流量

c++ - C++11 认为 "thread"是什么?

java - 如何创建一个使用线程从下限到上限计数的程序?

Windows FOR/F - 回显文件中的每一行 - 行中的空格 - 失败

java - 如何使用 Eclipse 在 Axis2 Web 服务上实现最小值、最大值、必需和可选?

java - Spring MVC 中的 dbconfig.properties 文件有什么问题?我运行该项目很好,但在 JUnit 中它是错误的

Java - 尝试将空值放入数组

windows - 启动应用程序后将控制权返回给 cmd.exe

linux - 删除 xinetd 导致 plesk 删除