web-dev-qa-db-ja.com

Hadoop DatanodesはNameNodeを見つけることができません

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アドレスで何か間違ったことをしているのですが、それが何なのか本当に分かりません。考え?

22
Magsol

見つけた! /etc/hostsファイルの2行目(127.0.1.1エントリを持つ行)をコメントアウトすることにより、netstatはローカルではなく192.168.1.10アドレスにバインドするNameNodeポートを示します1つ、およびスレーブVMがそれを見つけました。ああああ謎が解けた!みんなの助けてくれてありがとう。

38
Magsol

このソリューションは私のために働いた。すなわち、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ではありません

5
devl

私も同じ問題を抱えていました。 @Magsolソリューションは機能しましたが、コメントアウトする必要があるエントリは

127.0.1.1 masterxyz

スレーブの127.0.1.1ではなく、マスターマシンで実行しましたが、私も実行しました。また、おそらく明らかなhadoopのstop-all.shとstart-all.shが必要です。

Hadoopを再起動したら、ここでnodemasterを確認します。 http:// masterxyz:50030/jobtracker.jsp

また、ジョブで使用可能なノードの数を確認します。

3
pferrel

私も同様の問題に直面しました。 (私は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

そして、すべてのノードが正しく機能するようになりました。

1
Raxit Solanki

この応答は作成者が探している解決策ではありませんが、他のユーザーが別の考えでこのページにアクセスする可能性があるため、クラスターのセットアップにAWSを使用している場合、ICMPセキュリティルールがAWSセキュリティで有効になっていない可能性がありますグループページ。次を見てください: Pinging EC2インスタンス

上記により、データノードからマスターノードへの接続の問題が解決されました。各インスタンス間でpingできることを確認してください。

1
MasterV

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つのデータノードを見ることができました

0
Vignesh Iyer