У меня есть вход, который состоит из многих файлов. Их размер больше, чем blockSize. Каждый файл после обработки вызывает по крайней мере один InputSplit для его обработки.Hadoop: можно ли поместить несколько файлов в один раскол?
Вопрос: возможно ли обрабатывать много файлов в одном разрезе?
Основываясь на 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 или создать нашу собственную. Любые решения?
RojoSam, спасибо большое! То, что я искал. Я не могу обрабатывать файлы параллельно, поскольку их число значительно больше, чем количество узлов. – MiamiBeach
Это не имеет значения. Если вам требуется больше контейнеров, чем доступных слотов, Hadoop должен организовать его. Это то, что делает хаос. В конце он будет последовательным, но если в будущем вы сможете добавить больше узлов, то hasoop будет использовать его в автоматическом режиме. – RojoSam
Администратор ресурсов hadoop (YARN) будет создавать экземпляры контейнеров и выполнять задачу map/reduce (или другого типа), как только будет доступно достаточно ресурсов. Сохранение оставшихся задач в очереди. – RojoSam