Как импортировать файлы в HDFS как архив HAR? на Яве

В настоящее время мы импортируем файлы в HDFS, вызывая org.apache.hadoop.fs.FileSystem.moveFromLocalFile() метод в FileSystem API от hadoop, теперь мы сталкиваемся с большим размером кучи в нашем namenode из-за того, что количество импортируемых маленьких файлов слишком велико, и мы хотим уменьшить его. Существует ли более простой способ импортировать файлы в формате HAR в HDFS без предварительного импорта всех небольших файлов? Короче говоря, я импортирую небольшие файлы, но в HDFS есть 1 файл HAR, содержащий мои импортированные файлы.

1 ответ

Невозможно напрямую загружать файлы HAR (Hadoop ARchive) в HDFS.

Лучшим подходом было бы сначала скопировать меньшие файлы в HDFS, а затем создать файл HAR, объединив все эти меньшие файлы вместе.

Ты можешь использовать hadoop archive (Использование: hadoop archive -archiveName {имя архива} -p {Путь к входной родительской папке} {Путь к выходной папке}) для создания файла HAR, а после создания файла HAR вы можете удалить исходные файлы.

Если есть миллионы маленьких файлов, то вы можете скопировать эти файлы кусками.

Например, предположим, что у вас есть 100 000 маленьких файлов. Один из возможных подходов:

  1. Скопируйте 10 000 файлов во временную папку в HDFS. Например, hdfs:///tmp/partition1/
  2. Создайте файл HAR из этих 10000 файлов. Например, hdfs:///tmp/archive1/
  3. После создания архива удалите файлы из hdfs:///tmp/partition1/
  4. Повторите шаги с 1 по 3, пока вы не проглотите все 100 000 файлов.
Другие вопросы по тегам