分裂何时何地发生?
Posted
技术标签:
【中文标题】分裂何时何地发生?【英文标题】:When and where does splitting happen? 【发布时间】:2018-11-08 12:33:53 【问题描述】:例如,我在 HDFS 中有一个 1 Gb 的文件,例如
2018-10-10 12:30
EVENT INFORMATION
2018-10-10 12:35
ANOTHER EVENT INFORMATION
...
所以我需要使用NLineInputFormat
(N = 2),对吧?
问题是关于更多的概念性原则。这个 1 Gb 文件何时何地转换为 InputSplits
? hadoop如何处理不同的拆分逻辑?是否需要解析整个文件来创建拆分(因为我们需要遍历文件来逐行计算行数)?
该文件在 HDFS (1024 / 128) 中分为 8 个块。因此,当我提交作业时,hadoop 在每个节点上启动映射器,并使用此文件的块(默认拆分大小)。
如果我的文件分割不整齐会怎样?喜欢
<block1>
...
2018-10-10 12:
</block1>
<block2>
40
EVENT INFORMATION
...
</block2>
第一个映射器如何知道位于另一个数据节点上的剩余部分?
如果分割大小 = 1/2 块大小会怎样?还是 4/5 块大小?应用程序主控如何知道它应该选择哪个节点来运行拆分?
能否请您说清楚并给我一些链接以更深入地了解它?
【问题讨论】:
【参考方案1】:数据的划分(File into Block),这是物理上真正的划分 Split和HDFS Block是一对多的关系;
HDFS块是数据的物理表示,而Split是块中数据的逻辑表示。
在数据局部性的情况下,程序也会从远程节点读取少量数据,因为行被切割到不同的Block。
当你读取一个文件时,它是这样的
客户端通过调用FileSystem对象的open()方法打开文件(对应HDFS文件系统,调用DistributedFileSystem对象)(即图中的第一步)。 DistributedFileSystem 通过 RPC (Remote Procedure Call) 调用调用 NameNode 来得到这个。文件前几个块的文件位置(步骤 2)。对于每一个block,namenode返回所有有这个block备份的namenode的地址信息(在集群拓扑网络中按照到客户端的距离排序。Hadoop集群中如何进行网络拓扑见下文) .
如果客户端本身是一个datanode(如果客户端是一个mapreduce 任务)和datanode本身有需要的文件块,客户端 在本地读取文件。
以上步骤完成后,DistributedFileSystem会返回一个FSDataInputStream(支持文件查找),客户端可以从FSDataInputStream中读取数据。 FSDataInputStream 包装了一个 DFSInputSteam 类,该类处理名称节点和数据节点的 I/O 操作。 然后客户端执行read()方法(步骤3),DFSInputStream(已经存储了要读取的文件的前几块的位置信息)连接到第一个datanode(也就是最近的datanode ) 来获取数据。通过重复调用 read() 方法(第四步和第五步),文件中的数据被流式传输到客户端。当读取块的末尾时,DFSInputStream 关闭指向该块的流,而是找到下一个块的位置信息,然后重复调用 read() 方法继续流该块。 这些过程对用户是透明的,并且在用户看来这是整个文件的不间断流式传输。 读取整个文件时,客户端调用 FSDataInputSteam 中的 close() 方法关闭文件输入流(步骤 6)。
【讨论】:
非常感谢您的回答。您能否阐明应用程序主控如何将 InputSplit 分配给特定的执行节点(NodeManager)?例如 InputSplit A 链接到块 A 和块 B。两个块都在不同的数据节点上。地图任务将在哪里运行? @ВадимПарафенюк 数据的位置无法决定地图应该在哪里运行,地图尽可能地获取数据。 local,near server,other rock ..,每个inputSplit生成一个map。所以地图在哪里运行取决于服务器资源和资源管理器 这是个好问题,不是随机的,但也很难说是什么算法。它根据 'numActiveTrackers' 、'heartbeat status' 、'load situation' 、' capacity' 、'file location' 等等,都是决定mapper从哪里开始的因素 根据你的情况,如果其他情况没有差异,则运行本地优先 很高兴为您提供帮助,inputsplit 还包含有关块位置的信息。以上是关于分裂何时何地发生?的主要内容,如果未能解决你的问题,请参考以下文章