分裂何时何地发生?

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 还包含有关块位置的信息。

以上是关于分裂何时何地发生?的主要内容,如果未能解决你的问题,请参考以下文章

Verilog语言:还真的是人格分裂的语言

[敲重点]减数分裂图像识别及分裂异常情况分析

细胞分裂结果的计算方法:分裂几次就是2的几次方,即:啥

专治减数分裂各种不会!有丝分裂和减数分裂图像识别及有关题型的分析归类!

高中生物有丝分裂和减数分裂图像识别及有关题型的分析归类

B树索引分裂