Как динамически изменить размер блока существующих файлов в Hadoop? - PullRequest
2 голосов
/ 06 сентября 2011

У меня работает кластер Hadoop.Я использую Hadoop API для создания файлов в Hadoop.Например, используя: create (путь f, логическое перезапись, int bufferSize, короткая репликация, длинный blockSize, прогресс прогресса).

Мне интересно, как я могу изменить размер блока файла после того, как файл был создан?Используя команду или любой API или любые другие методы?Потому что я не могу найти функцию для изменения размера блока в API.

Спасибо

Ответы [ 3 ]

3 голосов
/ 06 сентября 2011

Я не знаю, и не нашел способа динамически изменить размер блока одного файла с помощью API.Существует несколько способов изменить размер блока файла, хранящегося в HDFS.

Помимо использования функции create и указания другого размера блока, они сосредоточены вокруг изменения размера блока по умолчанию, в котором хранится HDFS..

Два основных способа использования измененного размера блока по умолчанию:

  • Локальное копирование файла;Удалить файл HDFS;Загрузить файл
  • Скопировать файл в новое место / имя на HDFS;Удалить исходный файл;Переместить / переименовать файл в исходное местоположение / имя

Та же идея может быть реализована с помощью API.Скопируйте файл на локальный диск, удалите файл HDFS, затем используйте API для создания файла, используя локальную копию с желаемым размером блока.

Я могу предположить, почему это еще не было реализовано;Хотя это и упростит это, но, вероятно, не нужно слишком часто.Чтобы реализовать это, файл должен быть «повторно собран», а затем повторно заблокирован в соответствии с новым размером.В очень больших файлах это может привести к насыщению сети, поскольку все данные могут потенциально перемещаться по сети несколько раз.

Я не знаю достаточно деталей hadoop, чтобы точно знать, какие недостатки могут существовать, пытаясь реализовать эту функциональность вAPI, но я вижу несколько спорных моментов, которые могут затормозить реализацию, пока удовлетворяются большие потребности.

hth

2 голосов
/ 06 сентября 2011

Я не уверен, можно ли динамически изменять размер блока после записи файла в HDFS.Обходной путь - извлечь файл из HDFS и вернуть его обратно с требуемым размером блока.Смотрите письмо от Аллена о том, как это сделать.

1 голос
/ 16 января 2015

Попробуйте это:

hdfs dfs -D dfs.blocksize = [размер вашего блока] -put [имя вашего файла / каталога] [dest file / dir]

Спасибо, Sai

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...