2

我有 4 个核心桌面,想使用我的所有核心使用 hadoop 进行本地数据处理。(即有时我有足够的能力在本地处理数据,有时我将相同的作业提交到集群)。

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

PS 伪分布式模式是不好的选择,因为它会使用单节点创建集群,所以我只会得到一个映射器,我必须花一些时间进行额外的配置。

4

3 回答 3

5

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

还有另一种方法,你应该:

但请注意,您的映射器类应该是线程安全的,并且它的设置和清理方法将被调用多次,因此将 MultithreadedMapper 与 MultipulOutput 混合不是一个聪明的主意,除非您实现自己的 MultithreadedMapper 启发类。

于 2012-09-20T18:18:40.873 回答
1

出于隔离目的,Hadoop 故意不在一个 JVM 中同时运行多个任务。在独立(本地)模式下,只使用一个 JVM。如果你想利用你的四个核心,你应该在伪分布式模式下运行,并将最大并发任务数增加到四个。您可以使用mapred.tasktracker.map.tasks.maximummapred.tasktracker.reduce.tasks.maximum属性执行此操作。

于 2012-09-20T01:14:54.643 回答
0
    Configuration conf = new Configuration();

    Job job = new Job(conf, "SolerRandomHit");

    job.setOutputKeyClass(Text.class);

    job.setOutputValueClass(IntWritable.class);


    job.setMapperClass(MultithreadedMapper.class);
于 2016-02-28T12:44:49.713 回答