Я запустил программу MapReduce с помощью команды hadoop jar <jar> [mainClass] path/to/input path/to/output
. Однако моя работа зависла на: INFO mapreduce.Job: map 100% reduce 29%
.
Гораздо позже я остановился и проверил журнал узла данных (я работаю в псевдораспределенном режиме). Он содержал следующее исключение:
java.io.IOException: Premature EOF from inputStream
at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:201)
at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)
at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)
at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)
at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:472)
at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:849)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:804)
at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:137)
at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:74)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:251)
at java.lang.Thread.run(Thread.java:745)
Через 5 секунд в логе было ERROR DataXceiver error processing WRITE_BLOCK operation
.
Какая проблема может быть причиной этого исключения и ошибки?
Мой NodeHealthReport сказал:
1/1 local-dirs are bad: /home/$USER/hadoop/nm-local-dir;
1/1 log-dirs are bad: /home/$USER/hadoop-2.7.1/logs/userlogs
Я нашел это указывает на то, что dfs.datanode.max.xcievers
может потребоваться увеличить. Однако оно устарело, и новое свойство называется dfs.datanode.max.transfer.threads
со значением по умолчанию 4096. Если изменение этого параметра решит мою проблему, какое новое значение я должен установить для него?
Это указывает, что ulimit
для узла данных может потребоваться увеличить. Мой ulimit -n
(открытые файлы) равен 1024. Если увеличение этого значения решит мою проблему, на что мне его установить?