Как импортировать файлы в 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 маленьких файлов. Один из возможных подходов:
- Скопируйте 10 000 файлов во временную папку в HDFS. Например, hdfs:///tmp/partition1/
- Создайте файл HAR из этих 10000 файлов. Например, hdfs:///tmp/archive1/
- После создания архива удалите файлы из hdfs:///tmp/partition1/
- Повторите шаги с 1 по 3, пока вы не проглотите все 100 000 файлов.