VirtualBox内に分散Hadoop環境をセットアップしました。4つの仮想Ubuntu 11.10インストール、1つはマスターノードとして機能し、他の3つはスレーブとして機能します。 このチュートリアル に従って、シングルノードバージョンを起動して実行し、完全に配布されたバージョンに変換しました。 11.04を実行していたときは正常に機能していました。ただし、11.10にアップグレードすると、壊れました。これで、すべてのスレーブのログに次のエラーメッセージが表示され、広告の吐き気が繰り返されます。
INFO org.Apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.1.10:54310. Already tried 0 time(s).
INFO org.Apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.1.10:54310. Already tried 1 time(s).
INFO org.Apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.1.10:54310. Already tried 2 time(s).
等々。インターネットでこのエラーメッセージの他のインスタンスを見つけました(および StackOverflow )が、どのソリューションも機能していません(core-site.xmlおよびmapred-site.xmlエントリを変更して、ホスト名ではなくIPアドレス、4回チェックされた/etc/hosts
すべてのスレーブとマスターで。マスターはすべてのスレーブにパスワードなしでSSH接続できます)。私は各スレーブを単一ノード設定に戻そうとしましたが、この場合はすべて正常に機能します(その点、マスターは常にDatanodeとNamenodeの両方として正常に機能します)。
リードを与えると思われる唯一の症状は、私がtelnet 192.168.1.10 54310
、私はConnection refused
、アクセスをブロックするルールがあることを示唆しています(11.10にアップグレードしたときに有効になったはずです)。
俺の /etc/hosts.allow
ただし、変更されていません。ルールを試しましたALL: 192.168.1.
、ただし、動作は変更されませんでした。
ああ、マスターのnetstat
は、TCPポート54310と54311がリッスンしていることを明確に示しています。
誰もがスレーブデータノードにネームノードを認識させるための提案はありますか?
編集#1:nmapをいじってみると(この投稿に関するコメントを参照)、この問題は/etc/hosts
ファイル。これは、マスターVMについてリストされているものです。
127.0.0.1 localhost
127.0.1.1 master
192.168.1.10 master
192.168.1.11 slave1
192.168.1.12 slave2
192.168.1.13 slave3
各スレーブVMについて:
127.0.0.1 localhost
127.0.1.1 slaveX
192.168.1.10 master
192.168.1.1X slaveX
残念ながら、何を変更したのかはわかりませんが、「すでに使用されている」ポート(127.0.1.1:54310)をバインドしようとする例外を除いて、NameNodeは常に死にかけています。私は明らかにホスト名とIPアドレスで何か間違ったことをしているのですが、それが何なのか本当に分かりません。考え?
見つけた! /etc/hosts
ファイルの2行目(127.0.1.1
エントリを持つ行)をコメントアウトすることにより、netstat
はローカルではなく192.168.1.10
アドレスにバインドするNameNodeポートを示します1つ、およびスレーブVMがそれを見つけました。ああああ謎が解けた!みんなの助けてくれてありがとう。
このソリューションは私のために働いた。すなわち、core-site.xmlおよびmapred-site.xmlのプロパティで使用した名前を確認してください:
<property>
<name>fs.default.name</name>
<value>hdfs://master:54310</value>
<final>true</final>
</property>
つまり、マスターは、マスターノードとスレーブノードの両方で/ etc/hostsでxyz.xyz.xyz.xyzマスターとして定義されます。次に、ネームノードを再起動し、netstat -tuplen
を使用して確認し、「外部」IPアドレスにバインドされていることを確認します
tcp 0 xyz.xyz.xyz.xyz:54310 0.0.0.0:* LISTEN 102 107203 -
ローカルIP 192.168.x.yまたは127.0.x.yではありません
私も同じ問題を抱えていました。 @Magsolソリューションは機能しましたが、コメントアウトする必要があるエントリは
127.0.1.1 masterxyz
スレーブの127.0.1.1ではなく、マスターマシンで実行しましたが、私も実行しました。また、おそらく明らかなhadoopのstop-all.shとstart-all.shが必要です。
Hadoopを再起動したら、ここでnodemasterを確認します。 http:// masterxyz:50030/jobtracker.jsp
また、ジョブで使用可能なノードの数を確認します。
私も同様の問題に直面しました。 (私はubuntu 17.0を使用しています)/etc/hosts
ファイルにはマスターとスレーブのエントリのみを保持しました。 (マスターマシンとスレーブマシンの両方で)
127.0.0.1 localhost
192.168.201.101 master
192.168.201.102 slave1
192.168.201.103 slave2
次に、> Sudo gedit /etc/hosts.allow
とエントリを追加します:ALL:192.168.201.
第三に、Sudo ufw disable
を使用してファイアウォールを無効にしました
最後に、クラスター内のすべてのノードからnamenodeフォルダーとdatanodeフォルダーの両方を削除し、再実行します
$HADOOP_HOME/bin> hdfs namenode -format -force
$HADOOP_HOME/sbin> ./start-dfs.sh
$HADOOP_HOME/sbin> ./start-yarn.sh
コマンドラインからヘルスレポートを確認するには(推奨)
$HADOOP_HOME/bin> hdfs dfsadmin -report
そして、すべてのノードが正しく機能するようになりました。
この応答は作成者が探している解決策ではありませんが、他のユーザーが別の考えでこのページにアクセスする可能性があるため、クラスターのセットアップにAWSを使用している場合、ICMPセキュリティルールがAWSセキュリティで有効になっていない可能性がありますグループページ。次を見てください: Pinging EC2インスタンス
上記により、データノードからマスターノードへの接続の問題が解決されました。各インスタンス間でpingできることを確認してください。
2ノードのクラスターを実行しています。
192.168.0.24マスター
192.168.0.26 worker2
サーバーへの接続を再試行するという同じ問題に直面していました:私のworker2マシンログのmaster/192.168.0.24:54310。しかし、上記の人々は、このコマンドの実行エラー-telnet 192.168.0.24 54310に遭遇しました。しかし、私の場合、telnetコマンドはうまく機能しました。次に、/ etc/hostsファイルを確認しました
マスター/ etc/hosts
127.0.0.1 localhost
192.168.0.24 ubuntu
192.168.0.24マスター
192.168.0.26 worker2
worker2/etc/hosts
127.0.0.1 localhost
192.168.0.26 ubuntu
192.168.0.24マスター
192.168.0.26 worker2
マスターで http:// localhost:5007 を押すと、ライブノードが表示されました。マスターとworker2の両方でjpsをチェックしました。 Datanodeプロセスは両方のマシンで実行されていました。
その後、何度か試行錯誤を繰り返した結果、マスターマシンとworker2マシンのホスト名が同じ「ubuntu」であることに気付きました。 worker2のホスト名を「ubuntu」から「worker2」に変更し、worker2マシンから「ubuntu」エントリを削除しました。
注:ホスト名を変更するには、/ etc/hostnameをSudoで編集します。
ビンゴ!うまくいきました:) dfshealth UIページ(locahost:50070)で2つのデータノードを見ることができました