Как разрешить «файл может быть реплицирован только на 0 узлов, а не 1» в hadoop? - PullRequest
8 голосов
/ 03 апреля 2012

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

Если при загрузке страницы обнаружена ошибка сети (404 и т. Д.), То URL-адрес пропускается полностью, а не записывается в HDFS.Всякий раз, когда я запускаю небольшой список ~ 1000 веб-сайтов, мне всегда кажется, что я сталкиваюсь с этой ошибкой, которая многократно прерывает работу в моей псевдораспределенной установке.В чем может быть проблема?

Я использую Hadoop 0.20.2-cdh3u3.

org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/raj/cache/9b4edc6adab6f81d5bbb84fdabb82ac0 could only be replicated to 0 nodes, instead of 1
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1520)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:665)
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:557)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1434)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1430)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:416)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1157)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1428)

Ответы [ 3 ]

2 голосов
/ 13 апреля 2012

Проблема заключалась в том, что в маппере был открыт экземпляр FileSystem InputStream, который использовался для кэширования ввода в файловую систему.

1 голос
/ 18 июня 2012

Пожалуйста, проверьте логи namenode, соответствующие отметкам времени. Если есть признаки проблем с IPC, вероятно, у вас не хватает «xcievers». В моем случае установка dfs.datanode.max.xcievers в hdfs-site.xml на большее значение, то есть 4096 или 8192, устранила эту конкретную проблему для меня.

1 голос
/ 03 апреля 2012

При поиске по источникам вы, вероятно, выходите из космоса на локальном компьютере (или виртуальной машине).Это исключение возникает, когда система не может найти достаточно узлов для репликации.Класс, отвечающий за выбор узлов, - ReplicationTargetChooser.

http://javasourcecode.org/html/open-source/hadoop/hadoop-0.20.203.0/org/apache/hadoop/hdfs/server/namenode/ReplicationTargetChooser.java.html

Его основной метод - chooseTarget (строка 67).
После погружения в код вы попадете в метод isGoodTarget, который также проверяет, достаточно ли места на узле: Строка 404.
Если вы включите журналы отладки, вы, вероятно, увидите соответствующее сообщение.

...