我有4个核心的台式机,并且想使用我的所有核心通过hadoop进行本地数据处理。
(即有时我有足够的能力在本地处理数据,有时我将相同的作业提交给集群)。

默认情况下,hadoop本地模式仅运行一个映射器和一个reducer,因此我的本地作业确实很慢。
由于“痛苦”的配置,我不想首先在单台计算机上设置集群,其次我每次都必须创建jar。如此完美的解决方案是如何在一台机器上运行嵌入式Hadoop

PS伪分布式模式是一个不好的选择,因为它将创建具有单个节点的群集,因此我将仅获得一个映射器,并且必须花一些时间进行其他配置。

最佳答案

您需要使用MultithreadedMapRunner-只需在JobConf的setMapRunnerClass方法中进行设置即可,不要忘记将mapred.map.multithreadedrunner.threads设置为所需的并发级别。

另外还有另一种方法,您应该:

  • 在作业类型的对象
  • 中将MultithreadedMapper设置为您的映射器类
  • 与您实际的映射器类
  • 一起调用MultithreadedMapper.setMapperClass
  • 以所需的并发级别
  • 调用MultithreadedMapper.setNumberOfThreads
    但是要小心,您的mapper类应该是线程安全的,并且它的设置和清除方法将被调用多次,因此,除非您实现自己的MultithreadedMapper启发式类,否则将MultithreadedMapper与MultipulOutput混合并不是一个聪明的主意。

    08-25 07:14