2016-02-10 3 views
0

У меня есть кластер hadoop на aws, и я пытаюсь получить к нему доступ из-за пределов кластера через клиента hadoop. Я могу успешно hdfs dfs -ls и увидеть все содержимое, но когда я пытаюсь put или get файл я получаю эту ошибку:Доступ к hdfs извне кластера

Exception in thread "main" java.lang.NullPointerException 
    at org.apache.hadoop.fs.FsShell.displayError(FsShell.java:304) 
    at org.apache.hadoop.fs.FsShell.run(FsShell.java:289) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) 
    at org.apache.hadoop.fs.FsShell.main(FsShell.java:340) 

У меня есть Hadoop 2.6.0 установлен как в моем кластере и моей локальной машине. Я скопировал файлы conf кластера на локальный компьютер и получил эти параметры в файле hdfs-site.xml (наряду с некоторыми другими опциями).

<property> 
    <name>dfs.client.use.datanode.hostname</name> 
    <value>true</value> 
</property> 
<property> 
    <name>dfs.permissions.enable</name> 
    <value>false</value> 
</property> 

Мой ядро-site.xml содержит одно свойство, как в кластере и клиентом:

<property> 
    <name>fs.defaultFS</name> 
    <value>hdfs://public-dns:9000</value> 
    <description>NameNode URI</description> 
</property> 

я нашел подобные вопросы, но не смог найти решение этой проблемы.

+0

В этом вопросе не хватает деталей, чтобы помочь вам. Как вы установили утилиты командной строки hadoop на свою локальную машину? –

+0

И ваш 'core-site.xml'? –

+0

Итак ... Я не могу найти что-нибудь действительно онлайн, чтобы помочь с этим. Альтернативой является SSH в кластере для запуска всех команд hdfs dfs. –

ответ

0

Как насчет вас SSH в эту машину?

Я знаю, что это очень плохо идеи, но, чтобы получить работу, вы можете сначала скопировать этот файл на компьютер с помощью scp, а затем SSH в этот кластере/мастер и сделать hdfs dfs -put на этом скопированный локальный файл.

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

Ждать, если кто-то еще ответит, чтобы узнать правильный путь!

+1

И действительно, это то, что я закончил, так как не смог найти решение. Спасибо за Ваш ответ! –

+0

Вы можете принять его, если хотите: p –

0

У меня была аналогичная проблема с моим кластером при запуске hasoop fs -get, и я мог его решить. Просто проверьте, разрешены ли все ваши узлы данных с использованием полного доменного имени (Fully Qualified Domain Name) с вашего локального узла. В моем случае команда nc была успешной, используя IP-адреса для узлов данных, но не с именем хоста. выполните команду ниже: для i в cat /<host list file>; do nc -vz $ i 50010; done 50010 по умолчанию datanode port

Когда вы запускаете любую команду hadoop, она пытается подключиться к узлам данных с использованием полного доменного имени, и именно там, где она дает этот странный NPE.

ли ниже экспорта и запустить вашу команду Hadoop экспорта HADOOP_ROOT_LOGGER = DEBUG, консоль

вы увидите это NPE приходит, когда он пытается подключиться к любому DataNode для передачи данных.

Я имел Java-код, который также делает Hadoop фс -get с помощью API, и там, исключение было более понятнее

java.lang.Exception: java.nio.channels.UnresolvedAddressException

Позвольте мне знать, если это поможет вам.

Смежные вопросы