java—是否可以限制mapreduce作业访问远程数据?

yshpjwxd  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(533)

我们有特定的算法,我们想与hdfs集成。算法要求我们在本地访问数据(这项工作只能在 Mapper ). 但是,我们确实希望在分发文件(提供可靠性和条带化)方面利用hdfs。计算完成后,我们将使用 Reducer 把答案寄回去,而不是做任何额外的工作。避免使用网络是一个明确的目标。是否存在允许我们限制网络数据访问的配置设置,以便当mapreduce作业启动时,它将仅访问其本地数据节点?
update:adding a 一点背景
我们试图用字符串匹配来分析这个问题。假设我们的集群有n个节点,一个文件存储有ngb的文本。该文件存储到hdfs中,并以偶数部分分发到节点(每个节点1部分)。我们可以创建一个mapreduce作业,在每个节点上启动一个进程来访问位于同一主机上的文件部分吗?或者,mapreduce框架是否会不公平地分配工作(e、 g.1访问所有n部分数据的作业,还是尝试处理整个文件的.5n节点?

tquggr8v

tquggr8v1#

将reducer设置为零将增加数据的局部性。这意味着Map器生成的中间数据将存储在hdfs上。当然,您将无法控制选择将存储中间数据的节点,如果其大小大于Map器插槽数*块大小,则远程访问将尝试避免饥饿。我的建议是使用延迟调度器,并将locality delay node ms和locality delay rack ms设置为一个较大的值(即Map程序的最大预期运行时间)。这将使延迟调度器在远程请求数据之前尽可能多地等待。然而,这可能导致资源利用不足并增加运行时间(例如,任何不存储任何数据块的节点将在长时间的本地延迟节点ms+本地延迟机架ms中空闲)。

hiz5n14c

hiz5n14c2#

如果将reduce任务数设置为零,则可以跳过洗牌,从而减少算法的网络开销。
在创建作业时,可以使用以下代码行完成此操作

job.setNumReduceTasks(0);

我不知道你的算法会做什么,但说这是一个模式匹配算法,寻找一个特定的单词出现,然后Map程序会报告的数量匹配每分裂。如果你想增加计数,你需要网络通讯和减速机。
我发现的第一个谷歌Map匹配的例子:只Map的乔布斯先生

相关问题