5

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がデフォルトでリモート接続を拒否するかどうかはわかりません。リモート接続を許可するには、いくつかの設定を変更する必要がありますか?

4

4 に答える 4

9

クライアントと NameNode の両方について、core-site.xmlの値をfs.default.nametohdfs://106.77.211.187:9000から fromに変更します。hdfs://localhost:9000IP アドレスを、NameNode が実行されているノードの IP アドレスまたはホスト名に置き換えます。

できましたtelnet 106.77.211.187 9000。ここに出力がありますnetstat -a | grep 9000

TCP6 0 0 106.77.211.187:9000 [::]:*
TCP6 0 0 106.77.211.187:50753 106.77.211.187%819:9000確立
されたTCP6 0 0 106.77.211.187:9000 106.7.211.187%81:50753

なぜかというと、 fs.default.name を localhost に設定した場合のソースコードは以下のようになります

ServerSocket ソケット = 新しい ServerSocket(9000);
socket.bind(localhost);

bind アドレスは localhost に割り当てられているため、namenode プロセスは localhost からの接続のみを受け入れることができます。バインド アドレスがマシン名または IP アドレスの名前に割り当てられている場合、namenode プロセスはリモート マシンからの任意の接続を受け入れることができます。

于 2012-01-01T17:32:44.677 に答える
3

すべての構成ファイルですべてのローカルホストをそのIPアドレスに置き換えましたが、正常に機能しています。

于 2012-11-05T05:44:37.497 に答える