当前位置:  开发笔记 > 大数据 > 正文

Hadoop如何执行输入拆分?

如何解决《Hadoop如何执行输入拆分?》经验,为你挑选了4个好方法。

这是一个涉及Hadoop/HDFS的概念性问题.假设您有一个包含10亿行的文件.并且为了简单起见,我们考虑每条线的形式,其中k是从开头开始的线的偏移量,值是线的内容.

现在,当我们说要运行N个映射任务时,框架是否将输入文件拆分为N个拆分并在该拆分上运行每个映射任务?或者我们是否必须编写一个分区函数来执行N分割并在生成的分割上运行每个映射任务?

我想知道的是,拆分是在内部完成还是我们必须手动拆分数据?

更具体地说,每次调用map()函数时,它的Key key and Value val参数是什么?

谢谢,迪帕克



1> Peter Wipper..:

InputFormat负责提供劈叉.

通常,如果您有n个节点,HDFS将在所有这n个节点上分发文件.如果你开始一个工作,默认情况下会有n个映射器.感谢Hadoop,计算机上的映射器将处理存储在此节点上的部分数据.我认为这是所谓的Rack awareness.

所以简而言之:上传HDFS中的数据并启动MR作业.Hadoop将关注优化执行.



2> 小智..:

文件被拆分为HDFS块并复制块.Hadoop根据数据位置原则为拆分分配节点.Hadoop将尝试在块所在的节点上执行映射器.由于复制,有多个这样的节点托管相同的块.

如果节点不可用,Hadoop将尝试选择最接近托管数据块的节点的节点.例如,它可以在同一个机架中选择另一个节点.由于各种原因,节点可能不可用; 所有映射槽可能正在使用中,或者节点可能只是关闭.



3> Ravindra bab..:

幸运的是,一切都将由框架来处理.

MapReduce数据处理由输入分割的概念驱动.为特定应用程序计算的输入拆分数决定了映射器任务的数量.

映射数通常由输入文件中的DFS块数驱动.

在可能的情况下,将这些映射器任务中的每一个分配给存储输入分割的从节点.资源管理器(或JobTracker,如果您在Hadoop 1中)尽力确保在本地处理输入拆分.

如果由于跨越数据节点边界的输入分裂而无法实现数据局部性,则一些数据将从一个数据节点传输到另一个数据节点.

假定有128 MB块和最后一个记录不适合在块一个和在传播B座,然后在数据B座将被复制到节点具有阻止一

看看这个图.

在此输入图像描述

看看相关的问题

关于Hadoop/HDFS文件拆分

Hadoop流程记录如何跨块边界分割?



4> Karishma Mal..:

我认为Deepak提出的问题更多是关于如何确定map函数每次调用的输入,而不是每个map 节点上的数据。我是根据问题的第二部分说这句话的: 更具体地说,每次调用map()函数时,其Key键和Value val参数是什么?

实际上,同样的问题也将我带到这里,并且如果我是一位经验丰富的hadoop开发人员,我可能会像上面的答案一样解释它。

为了回答这个问题,

根据我们为InputFormat设置的值,将拆分给定地图节点上的文件。(这是使用setInputFormat()在Java中完成的!)

一个例子:

conf.setInputFormat(TextInputFormat.class); 在这里,通过将TextInputFormat传递给setInputFormat函数,我们告诉hadoop 将映射节点处的输入文件的每一行都视为映射函数的输入。换行或回车用于信号行结束。有关更多信息,请参见TextInputFormat!

在此示例中:键是文件中的位置,值是文本行。

希望这可以帮助。

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有