Невозможно загрузить файлы размером более 100 МБ в HDFS

Я столкнулся с действительно странной проблемой с моим кластером.

Всякий раз, когда я пытаюсь загрузить в HDFS любой файл размером более 100 МБ (104857600 байт), происходит сбой со следующей ошибкой:

Все узлы данных неисправны... Прерывание.

Это действительно странно, так как 100 МБ стали порогом для размера файла.

Даже если я попытаюсь увеличить размер файла на 1 байт (104857601 байт) и попытаюсь загрузить его в HDFS, произойдет сбой с длинной трассировкой стека. В основном говоря: «Все узлы данных плохие ... Прерывание»

Кто-нибудь сталкивался с подобной ситуацией ранее?

Возможно ли, что какое-то изменение конфигурации по ошибке привело к такому поведению? Если да, какую конфигурацию, которая ограничивает размер данных, которые могут быть загружены, я могу изменить?

Спасибо


person Megh Vidani    schedule 29.09.2016    source источник
comment
Просто уточню: можете ли вы загрузить несколько файлов по 51 МБ? Как вы загружаете его, и он выходит из строя сразу или ближе к концу? Есть ли шанс, что вы установили очень низкий лимит памяти для картографов?   -  person Dennis Jaheruddin    schedule 29.09.2016
comment
Вы проверили размер разделения и максимальное количество дескрипторов открытых файлов?   -  person mbaxi    schedule 29.09.2016
comment
@ Деннис - я могу загрузить все, что меньше 100 МБ. Загрузка с использованием hadoop fs -put. Сразу выходит из строя. Я не уверен, как проверить предел памяти. Пожалуйста, уточните то же самое.   -  person Megh Vidani    schedule 29.09.2016
comment
@mbaxi - как проверить размер разделения? Максимальное количество дескрипторов открытых файлов установлено на неограниченное количество.   -  person Megh Vidani    schedule 29.09.2016
comment
@MeghVidani: попробуйте изменить размер разделения, используя параметр mapred.max.split.size.   -  person red    schedule 29.09.2016
comment
@red - я думаю, вы говорите о mapreduce.input.fileinputformat.split.maxsize? По умолчанию установлено значение Long.MAX_VALUE. На что мне его поменять?   -  person Megh Vidani    schedule 29.09.2016
comment
@MeghVidani-да, какова ваша текущая стоимость?   -  person red    schedule 29.09.2016
comment
Я не нахожу это свойство в файле mapred-site.xml. Думаю, установлено значение Long.MAX_VALUE.   -  person Megh Vidani    schedule 29.09.2016
comment
@MeghVidani попробуйте установить его на 1/4 размера вашего блока.   -  person red    schedule 29.09.2016


Ответы (2)


«Кто-нибудь сталкивался с подобной ситуацией ранее?»

Да, было. Вы должны уменьшить лимит для пользователя, который запускает hadoop. Я установил Hadoop на компьютер с Linux, загрузив его с веб-сайта Apache, и моя система не была настроена для этого, я получил ваше сообщение. Это настройки из быстрого старта cloudera, сравните с ними свой лимит.

[cloudera@quickstart ~]$ ulimit -a 
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 30494
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
person ozw1z5rd    schedule 29.09.2016
comment
Спасибо. Я действительно понял это до того, как пришел ваш ответ, но это наверняка поможет другим. - person Megh Vidani; 01.10.2016
comment
@MeghVidani, какие изменения ты внесла? - person red; 01.10.2016
comment
@red Я отредактировал файл /etc/security/limits.conf и установил неограниченный размер файла. Ранее было установлено значение 102400 КБ (100 МБ). - person Megh Vidani; 01.10.2016
comment
@MeghVidani Будет здорово, если вы найдете ответ на свой вопрос, но в таком случае укажите его здесь. Как для дальнейшего использования, так и для людей, которые в противном случае могут найти то же решение, что и вы, после тщательного поиска. - person Dennis Jaheruddin; 04.10.2016
comment
@ Деннис Джахеруддин - я уже отметил этот ответ как принятый, что еще я могу добавить? - person Megh Vidani; 04.10.2016
comment
@MeghVidani Поскольку вы упомянули: «Я действительно понял это до того, как пришел ваш ответ», я решил сделать предложение о том, как справиться с этим в будущем. Поскольку вы уже получили и приняли ответ здесь, в дальнейших действиях по этому вопросу действительно нет необходимости. - person Dennis Jaheruddin; 04.10.2016
comment
@ Деннис Джахеруддин - хорошо. На самом деле я собирался ответить на этот вопрос сам. Но прежде чем я получил возможность сделать это, ozw1z5rd уже опубликовал решение. Я буду держать ваше предложение в виду, хотя. - person Megh Vidani; 04.10.2016

Если вы можете получить более подробную информацию об узле данных из трассировки стека, вы сможете остановить узел данных, который будет одним из демонов. Уничтожив или остановив узел данных, вы получите узел данных, который, вероятно, будет поврежден, повторно создан. По сути, вы перезапускаете jvm этого конкретного узла данных. Команда: Для остановки: bin/hadoop-daemon.sh stop datanode Для запуска: bin/hadoop-daemon.sh start datanode

person mgp    schedule 29.09.2016
comment
Привет, я столкнулся с этой ошибкой со всеми узлами данных. У меня в кластере 5 узлов данных, и он пробует их все по очереди. Все вылетает с одной и той же ошибкой. - person Megh Vidani; 29.09.2016