をlocalhostに接続しますは、Java APIを使用してリモートHDFSにローカルファイルをアップロードするが、私は1ノードhdp2.5クラスタにファイルをアップロードするには、この非常に簡単なアップロード方法を持っている
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、
- ファイルが既に存在する場合は、チェック(なし)、
- は、データノードに接続します。
これは失敗します.hdfshost:50075の代わりにdatanodeがlocalhost:50075であるため、「java.net.ConnectException:Connection refused」という結果に終わります。
私はHDPで以下の関連する設定があります。
- dfs.client.use.datanode.hostname =>真
- dfs.datanode.http.address => 0.0.0.0:50075 を
- dfs.namenode.httpアドレス=> 0.0.0.0:50070
私はlocalhostの代わりにhdfshostのに使用されない理由を見つけることができなかった(および/ etc/hostsに、どちらのローカルにはオーバーライドがありませんクラスタ上でもマシンでもない)。どんな助けでも大歓迎です。
データノードのマシン名は、localhost行の '/ etc/hosts'ファイルに表示されますか?その場合は、実際のマシンのアドレスを持つ行に移動してみてください。 – RealSkeptic
0.0.0.0からマシンのローカルIPに変更しようとしましたか?定期的に変更されない静的IPがマシンにある場合は、問題を解決できますか? – Nico
@Nico私はあなたの提案を試みましたが、実際には助けになるとは考えていませんでした(どうしてlocalhostを返すのでしょうか?)。私は間違っていると思います。コマンドhostnameがlocalhostではなく予期しているホスト名を返すと、なぜlocalhostが返されるのか不思議です。 – Guillaume