gpt4 book ai didi

java - Hadoop:是否可以将多个文件放在一起?

转载 作者:可可西里 更新时间:2023-11-01 16:30:02 26 4
gpt4 key购买 nike

我有包含许多文件的输入。它们的大小大于 blockSize。每个文件在被处理后,至少诱导一个 InputSplit 来处理它。

一个问题是:是否可以一次处理多个文件?

基于 FileInputFormat 代码,它不是:

    for (FileStatus file: files) {
337 Path path = file.getPath();
338 long length = file.getLen();
339 if (length != 0) {
340 BlockLocation[] blkLocations;
341 if (file instanceof LocatedFileStatus) {
342 blkLocations = ((LocatedFileStatus) file).getBlockLocations();
343 } else {
344 FileSystem fs = path.getFileSystem(job.getConfiguration());
345 blkLocations = fs.getFileBlockLocations(file, 0, length);
346 }
347 if (isSplitable(job, path)) {
348 long blockSize = file.getBlockSize();
349 long splitSize = computeSplitSize(blockSize, minSize, maxSize);
350
351 long bytesRemaining = length;
352 while (((double) bytesRemaining)/splitSize > SPLIT_SLOP) {
353 int blkIndex = getBlockIndex(blkLocations, length-bytesRemaining);
354 splits.add(makeSplit(path, length-bytesRemaining, splitSize,
355 blkLocations[blkIndex].getHosts()));
356 bytesRemaining -= splitSize;
357 }

因此,我们可能应该使用其他 InputFormat 或创建我们自己的 InputFormat。有什么解决办法吗?

最佳答案

在一个拆分中处理多个大文件在 Hadoop 中没有意义,Hadoop 的目标是同时通过不同的拆分并行计算数据,而不是使用同一容器顺序处理它们。但是如果你仍然想在一个分割中处理大文件,你可以使用 CombineTextInputFormat 并为 ma​​preduce.input.fileinputformat.split.maxsize 属性设置一个足够大的值。 CombineTextInputFormat的正常使用是用同一个容器处理几个小文件。这里有一个使用示例:https://github.com/lalosam/HadoopInExamples/blob/master/src/main/java/rojosam/hadoop/CombinedInputWordCount/DriverCIPWC.java

关于java - Hadoop:是否可以将多个文件放在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38271314/

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