как их использовать в методе карты?
Основная проблема заключается в том, что каждый файл будет в одном файле.Поэтому, если у вас есть 10M файлов, у вас будет 10M картографов, что звучит не очень разумно.Возможно, вы захотите рассмотреть предварительную сериализацию файлов в SequenceFiles
(одно изображение на пару ключ-значение).Это сделает загрузку данных в собственное задание MapReduce, так что вам не придется писать хитрый код.Кроме того, вы сможете хранить всех ваших данных в одном SequenceFile, если вы того пожелаете.Hadoop очень хорошо справляется с разбиением SequenceFiles.
По сути, это работает так: у вас будет отдельный процесс Java, который берет несколько файлов изображений, считывает байты луча в память, а затем сохраняет данные в ключ-значение.пара в SequenceFile.Продолжайте и продолжайте писать в HDFS.Это может занять некоторое время, но вам придется сделать это только один раз.
Можно ли сделать ввод (в карту) в виде текстового файла, содержащего все фотографиипуть (в HDFS) с каждой строкой, и в методе map загрузите двоичный файл, например: photoInputStream = getImageFromHDFS (photopath);(На самом деле, что является правильным методом для загрузки файла из HDFS во время выполнения метода карты?)
Это не нормально, если у вас есть какой-либо разумный кластер (который вы должны, если вырассматривая Hadoop для этого), и вы действительно хотите использовать всю мощь Hadoop.Ваше задание MapReduce сработает и загрузит файлы, но средства отображения будут работать с данными локально для текстовых файлов, а не для изображений!Таким образом, в основном вы будете перетасовывать файлы изображений повсюду, поскольку JobTracker не размещает задачи там, где находятся файлы.Это повлечет за собой значительную нагрузку на сеть.Если у вас есть 1 ТБ изображений, вы можете ожидать, что многие из них будут передаваться по сети, если у вас более нескольких узлов.Это может быть не так уж плохо в зависимости от вашей ситуации и размера кластера (меньше, чем несколько узлов).
Если вы действительно хотите это сделать, вы можете использовать API FileSystem
создавать файлы (вам нужен метод open
).