IPが192.168.1.109の単一のマシンにHadoopを正常にインストールして実行しました(実際には、仮想ボックスで実行されているUbuntuインスタンスです)。jpsと入力すると、次のように表示されます
2473 DataNode
2765 TaskTracker
3373 Jps
2361 NameNode
2588 SecondaryNameNode
2655 JobTracker
これは、Hadoopが稼働していることを意味するはずです。./hadoop fs -lsのようなコマンドを実行すると問題なく、期待どおりの結果が得られます。
しかし、次のように接続するJavaコードのHDFS APIを記述して、IPが192.168.1.80のWindowsボックスから接続しようとすると、次のようになります。
構成conf=new Configuration();
FileSystem hdfs = null;
パスfilenamePath=new Path(FILE_NAME);
hdfs = FileSystem.get(conf); <-この行で問題が発生しました
コードを実行すると、エラーは次のように表示されます。
11/12/07 20:37:24 INFO ipc.Client:サーバーへの接続を再試行しています:/192.168.1.109:9000。すでに0回試しました。
11/12/07 20:37:26 INFO ipc.Client:サーバーへの接続を再試行しています:/192.168.1.109:9000。すでに1回試しました。
11/12/07 20:37:28 INFO ipc.Client:サーバーへの接続を再試行しています:/192.168.1.109:9000。すでに2回試しました。
11/12/07 20:37:30 INFO ipc.Client:サーバーへの接続を再試行しています:/192.168.1.109:9000。すでに3回試しました。
11/12/07 20:37:32 INFO ipc.Client:サーバーへの接続を再試行しています:/192.168.1.109:9000。すでに4回試しました。
11/12/07 20:37:33 INFO ipc.Client:サーバーへの接続を再試行しています:/192.168.1.109:9000。すでに5回試しました。
11/12/07 20:37:35 INFO ipc.Client:サーバーへの接続を再試行しています:/192.168.1.109:9000。すでに6回試しました。
11/12/07 20:37:37 INFO ipc.Client:サーバーへの接続を再試行しています:/192.168.1.109:9000。すでに7回試しました。
11/12/07 20:37:39 INFO ipc.Client:サーバーへの接続を再試行しています:/192.168.1.109:9000。すでに8回試しました。
11/12/07 20:37:41 INFO ipc.Client:サーバーへの接続を再試行しています:/192.168.1.109:9000。すでに9回試しました。
java.net.ConnectException:接続例外で/192.168.1.109:9000への呼び出しが失敗しました:java.net.ConnectException:接続が拒否されました:これ以上の情報はありません
ソケットがすでに開いていて、Hadoopサーバーで着信接続を待機しているかどうかを確認するために、ubuntuボックスでnetstatを実行すると、結果が次のように表示されます。
tcp 0 0 localhost:51201 : LISTEN 2765 / java
tcp 0 0 *:50020 : LISTEN 2473 / java
tcp 0 0 localhost:9000 : LISTEN 2361 / java
tcp 0 0 localhost:9001 : LISTEN 2655 / java
tcp 0 0 *:mysql : LISTEN
--tcp 0 0 *:50090 : LISTEN 2588 / java
tcp 0 0 *:11211 : LISTEN
--tcp 0 0 *:40843 : LISTEN 2473 / java
tcp 0 0 *:58699 : LISTEN --tcp
0 0 *:50060 : LISTEN 2765 / java
tcp 0 0 *:50030 : LISTEN 2655 / java
tcp 0 0 *:53966 : LISTEN 2655 / java
tcp 0 0 *:www : LISTEN
--tcp 0 0 *:epmd : LISTEN
--tcp 0 0 *:55826 : LISTEN 2588 / java
tcp 0 0 *:ftp : LISTEN --tcp
0 0 *:50070 : LISTEN 2361 / java
tcp 0 0 *:52822 : LISTEN 2361 / java
tcp 0 0 *:ssh : LISTEN
--tcp 0 0 *:55672 : LISTEN --tcp
0 0 *:50010 : LISTEN 2473 / java
tcp 0 0 *:50075 : LISTEN 2473 / java
ローカルアドレス列がlocalhost:9000のようなものである場合(localhost:ではなく* :)、リモートホストから接続できないか、場合によっては独自のボックスに接続できないことに気付きました。telnet localhost 9000を試しましたが、動作します。つまり、ポートに接続できますが、telnet 192.168.1.109 9000を使用すると、次のようなエラーが表示されます。
$ telnet 192.168.1.109 9000192.168.1.109を試行しています...telnet:リモートホストに接続できません:接続が拒否されました
私は今本当に疲れ果てている問題を理解するためにほぼ一週間を費やしました、そして誰かが私を助けてくれることを願っています。
注:namenodeがデフォルトでリモート接続を拒否するかどうかはわかりません。リモート接続を許可するには、いくつかの設定を変更する必要がありますか?