我有4个核心的桌面,并希望使用我的所有核心与hadoop本地数据处理(i、 有时我有足够的能力在本地处理数据,有时我向集群提交相同的作业)。
默认情况下,hadoop本地模式只运行一个mapper和一个reducer,所以我的本地作业非常慢。我不想首先在单机上设置集群,因为“痛苦”的配置,其次每次都要创建jar。所以完美的解决方案是如何在一台机器上运行嵌入式hadoop
ps伪分布式模式是一个坏的选择,因为它将创建具有单个节点的集群,所以我将只获得一个Map器,并且我必须在额外的配置上花费一些时间。
3条答案
按热度按时间xjreopfe1#
zpqajqem2#
您需要使用multi-threadedmaprunner—只需在jobconf的setmaprunnerclass方法中设置它,并且不要忘记将mapred.map.multi-threadedrunner.threads设置为所需的并发级别。
还有一种方法,你应该:
将multithreadedmapper设置为作业类型对象中的Map器类
呼叫
MultithreadedMapper.setMapperClass
和你实际的Map绘制类呼叫
MultithreadedMapper.setNumberOfThreads
具有理想的并发级别但是要小心,你的Map器类应该是线程安全的,它的设置和清理方法会被多次调用,所以把多线程apper和多输出混合在一起不是一个聪明的主意,除非你实现了你自己的多线程apper类。
kxe2p93d3#
出于隔离的目的,hadoop故意不在一个jvm中同时运行多个任务。在独立(本地)模式下,只使用一个jvm。如果您想利用您的四个核心,您应该在伪分布式模式下运行,并将最大并发任务数增加到四个。你可以用
mapred.tasktracker.map.tasks.maximum
以及mapred.tasktracker.reduce.tasks.maximum
属性。