меня это очень простой способ загрузки, чтобы загрузить файл в один-узле 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 (и нет переопределения в/и т.д./хостах, ни на местных машины ни на кластере). Любая помощь будет очень оценена.
Имя машины на узле данных отображается в файле '/ etc/hosts' в строке localhost? Если это так, попробуйте переместить его в линию с адресом фактического компьютера. – RealSkeptic
Вы пытались перейти с 0.0.0.0 на локальный IP-адрес устройства? Если ваш компьютер имеет статический IP-адрес, который не изменяется на регулярной основе, это может решить вашу проблему? – Nico
@Nico Я попробовал ваше предложение, а не полагал, что он может помочь (зачем он все-таки возвращать localhost?). Оказывается, я ошибаюсь, и ты прав, спасибо! Я все еще удивляюсь, почему localhost возвращается, когда имя хоста команды возвращает ожидающее имя хоста, а не localhost. – Guillaume