2016-12-20 4 views
0

меня это очень простой способ загрузки, чтобы загрузить файл в один-узле hdp2.5 кластер:Загрузка локального файла на удаленный HDFS с Java API, но подключиться к локальному

Configuration conf = new Configuration(); 
FileSystem fs = FileSystem.get(new URI("webhdfs://hdsfhost:50070", conf); 
fs.copyFromLocalFile(false, true, new Path(localFilePath), new Path(hdfsPath)); 

Трассировки, что случается поток начинает правильно:

  • подключения к hdfshost: 50070,
  • проверить, если файл уже существует (нет),
  • подключения к DataNode.

Это то место, где оно терпит неудачу: datanode считается localhost: 50075 вместо hdfshost: 50075, в результате чего «java.net.ConnectException: Connection failed».

У меня есть следующие соответствующие настройки на HDP:

  • dfs.client.use.datanode.hostname => истинный
  • dfs.datanode.http.address => 0.0.0.0:50075
  • dfs.namenode.http-адрес => 0.0.0.0:50070

я не мог найти причину, почему локальный используются вместо hdfshost (и нет переопределения в/и т.д./хостах, ни на местных машины ни на кластере). Любая помощь будет очень оценена.

+0

Имя машины на узле данных отображается в файле '/ etc/hosts' в строке localhost? Если это так, попробуйте переместить его в линию с адресом фактического компьютера. – RealSkeptic

+1

Вы пытались перейти с 0.0.0.0 на локальный IP-адрес устройства? Если ваш компьютер имеет статический IP-адрес, который не изменяется на регулярной основе, это может решить вашу проблему? – Nico

+0

@Nico Я попробовал ваше предложение, а не полагал, что он может помочь (зачем он все-таки возвращать localhost?). Оказывается, я ошибаюсь, и ты прав, спасибо! Я все еще удивляюсь, почему localhost возвращается, когда имя хоста команды возвращает ожидающее имя хоста, а не localhost. – Guillaume

ответ

1

Вам необходимо изменить конфигурацию http-адреса на локальный IP-адрес вместо 0.0.0.0. 0.0.0.0 получает разрешение на localhost и затем будет использоваться dfs.client.use.datanode.hostname => true, в то время как ваш локальный IP-адрес будет разрешен к DNS-имени, а затем снова будет использоваться именем хоста.

Поскольку это работает, я опубликую это как ответ, поэтому я не знаю, правильно ли обосновано решение. Если кто-то знает точную причину, пожалуйста, добавьте его в качестве комментария или отредактируйте мой ответ.

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

  • Нет связанных вопросов^_^