gpt4 book ai didi

hadoop - Hadoop 中的 InputSplit 自定义

转载 作者:可可西里 更新时间:2023-11-01 14:19:54 27 4
gpt4 key购买 nike

我了解到,在 Hadoop 中,大输入文件拆分为小文件,并通过映射函数在不同的节点中进行处理。我还了解到我们可以自定义 InputSplit。我想知道的是 InputSplit 是否可以进行以下类型的自定义:

我有一个大型输入文件进入 Hadoop,我想要该文件的一个子集,即文件中的一组行与每个输入拆分一起使用。我的意思是,无论文件以何种方式拆分,大文件的所有数据 block 都应包含这些行集。

为了让我的问题更清楚,如果我们需要将输入文件的一部分(比如 A)与文件的其余部分内容进行比较,在这种情况下,所有 InputSplit前往 map 函数的 需要包含此 A 部分以进行比较。请指导我。

最佳答案

理论上,可以将您的大文件 (A, B, C, D, ...) 拆分为 (A, B), (A, C), (A, D), ...。但是,您必须为此目的编写大量自定义类。目前FileSplit , 它扩展了 InputSplit ,基本上是说 file 的拆分从位置 start 开始,并且具有固定的 length。对文件的实际访问是由 RecordReader 完成的,即 LineRecordReader .因此,您必须实现代码,它不仅会读取实际的拆分,还会读取文件的 header (A 部分)。

我认为,您正在寻找的方法是不切实际的。记录阅读器访问位置(开始、开始+长度)的原因只是数据局部性。对于一个非常大的文件,部分 AZ 将位于两个不同的节点上。

根据 A 部分的大小,更好的办法是将这个公共(public)部分存储在 DistributedCache 中.通过这种方式,您可以高效地访问每个映射器中的公共(public)数据。请参阅 javadoc 和 http://developer.yahoo.com/hadoop/tutorial/module5.html#auxdata了解更多信息。

关于hadoop - Hadoop 中的 InputSplit 自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16337059/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com