マルチノードHadoopクラスターをセットアップしました。 NameNodeとセカンダリnamenodeは同じマシンで実行され、クラスターにはDatanodeが1つしかありません。すべてのノードはAmazon EC2マシンで構成されます。
masters
54.68.218.192 (public IP of the master node)
slaves
54.68.169.62 (public IP of the slave node)
core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>
core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://54.68.218.192:10001</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>54.68.218.192:10002</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>
namenodeで実行されるjpsは次を提供します。
5696 NameNode
6504 Jps
5905 SecondaryNameNode
6040 ResourceManager
datanodeのjps:
2883 DataNode
3496 Jps
3381 NodeManager
私には正しいようです。
さて、putコマンドを実行しようとすると:
hadoop fs -put count_inputfile /test/input/
次のエラーが表示されます。
put: File /count_inputfile._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
データノードのログには次のことが記録されています。
hadoop-datanode log
INFO org.Apache.hadoop.ipc.Client: Retrying connect to server: 54.68.218.192/54.68.218.192:10001. Already tried 8 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
yarn-nodemanagerログ:
INFO org.Apache.hadoop.ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8031. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
ノードマネージャー(50070)のWeb UIには、0個のライブノードと0個のデッドノードがあり、使用されるdfsは100%
IPV6も無効にしています
いくつかのWebサイトで、/etc/hosts
ファイル。私もそれらを編集しました、そして、彼らはこのように見えます:
127.0.0.1 localhost
172.31.25.151 ip-172-31-25-151.us-west-2.compute.internal
172.31.25.152 ip-172-31-25-152.us-west-2.compute.internal
まだエラーが発生するのはなぜですか?
2つのことがうまくいきました。
ステップ1:hadoopを停止し、hduser
から一時ファイルを消去します
Sudo rm -R /tmp/*
また、削除して再作成する必要がある場合があります/app/hadoop/tmp
(ほとんどがhadoopバージョンを2.2.0
から2.7.0
)
Sudo rm -r /app/hadoop/tmp
Sudo mkdir -p /app/hadoop/tmp
Sudo chown hduser:hadoop /app/hadoop/tmp
Sudo chmod 750 /app/hadoop/tmp
ステップ2:namenodeをフォーマットする
hdfs namenode -format
今、私はDataNodeを見ることができます
hduser@prayagupd:~$ jps
19135 NameNode
20497 Jps
19477 DataNode
20447 NodeManager
19902 SecondaryNameNode
20106 ResourceManager
ノードの不適切なシャットダウン後に同じ問題が発生しました。また、UIでデータノードがリストされていないことを確認します。
これで、datanodeフォルダーからファイルを削除し、サービスを再起動した後に機能します。
stop-all.sh
rm -rf/usr/local/hadoop_store/hdfs/datanode/*
start-all.sh
@Learner、
NamenodeのWeb UIにデータノードが表示されないという問題がありました。 Hadoop 2.4.1のこれらの手順で解決しました。
これをすべてのノード(マスターとスレーブ)に対して行います
1。すべての一時ファイルを削除します(デフォルトでは/ tmpにあります)-Sudo rm -R /tmp/*
。
2。 ssh username@Host
を使用してssh
を介してすべてのノードに接続し、ssh-copy-id -i ~/.ssh/id_rsa.pub username@Host
を使用してマスターにキーを追加して、マスターへのスレーブの無制限のアクセスを許可してください接続を拒否します)。
3。 hadoop namenode -format
を使用してネームノードをフォーマットし、デーモンを再起動してください。
私の状況では、firewalldサービスが実行されていました。それはデフォルト設定でした。また、ノード間の通信を許可しません。私のhadoopクラスターはテストクラスターでした。このため、サービスを停止しました。サーバーが実稼働している場合は、firewalldのhadoopポートを許可する代わりに、
service firewalld stop
chkconfig firewalld off
私の状況では、MacOSでHomeBrewを使用してインストールされたhdfs-site.xml
(Hadoop 3.0.0)内に必要なプロパティがありませんでした。 (file:///
はタイプミスではありません。)
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/Cellar/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/Cellar/hadoop/hdfs/datanode</value>
</property>
同じエラーが発生しました。 hdfsファイルシステムへのアクセス許可がありません。そこで、ユーザーに許可を与えます。
chmod 777 /usr/local/hadoop_store/hdfs/namenode
chmod 777 /usr/local/hadoop_store/hdfs/datanode
単一ノードクラスターでも同じ問題に直面しています。
この問題を解決するために、次の手順を実行しました。
1。 logsディレクトリの下のdatanodeログをチェックし、namenode clusterIdとdatanode clusterIdが異なることを発見しました。
2。空のデータノードディレクトリを作成します。
rm -rvf/hadoop/hdfs/datanode/*
3。 stop-all.sh
4。 hdfs namenode -format
5。 start-all.sh
6。 jps
27200 NodeManager
26129 NameNode
26595 SecondaryNameNode
5539 GradleDaemon
2355メイン
2693 GradleDaemon
27389 Jps
26846 ResourceManager
26334 DataNode
これは私には有効です。
データノードとネームノードまたはノードマネージャのクラスタIDが一致していないためと思われます。クラスターIDは、namenodeとdatanodesの両方にあるVERSIONファイルで確認できます。
これは、ネームノードをフォーマットしてからクラスターを再起動したときに発生しますが、データノードは以前のclusterIDを使用して接続を試みます。正しく接続するには、正しいIPアドレスと、ノード上の一致するクラスターIDが必要です。
そのため、ネームノードとデータノードを再フォーマットするか、新しく作成されたフォルダーでデータノードとネームノードを構成してください。
これで問題が解決するはずです。
現在のdatanodesフォルダーからファイルを削除すると、古いVERSIONファイルも削除され、namenodeとの再接続中に新しいVERSIONファイルが要求されます。
例の構成内のdatanodeディレクトリは/ hadoop2/datanodeです
$ rm -rvf /hadoop2/datanode/*
そして、サービスを再起動します。ネームノードを再フォーマットする場合は、この手順の前にそれを実行します。ネームノードを再フォーマットするたびに新しいIDが取得され、そのIDはランダムに生成され、データノードの古いIDと一致しません
だから毎回このシーケンスに従う
namenodeをフォーマットしてからdatanodeディレクトリーの内容を削除する場合OR新しく作成されたディレクトリーでdatanodeを構成してから、namenodeおよびdatanodesを開始します
/ tmpフォルダーをクリアしようとしましたか?.
クリーンアップする前に、データノードが起動しませんでした
86528 SecondaryNameNode
87719 Jps
86198 NameNode
78968 RunJar
79515 RunJar
63964 RunNiFi
63981 NiFi
クリーンアップ後
Sudo rm -rf /tmp/*
それは私のために働いた
89200 Jps
88859 DataNode
マスターマシンとスレーブマシンの両方で、core-site.xmlのプロパティ{fs.default.name}の値は、マスターマシンを指している必要があります。したがって、次のようになります。
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
masterは、マスターノードを指す/ etc/hostsファイル内のホスト名です。
@mustafacanturkソリューション、ファイアウォールを無効にするとうまくいきました。データノードは、jpsを実行しているときに表示されたが、ファイルをアップロードしようとすると「0 nodes running」というメッセージが表示されたために開始されたと考えました。実際、( http:// nn1:5007 )へのWebインターフェースもファイアウォールのために機能していませんでした。 hadoopのインストール時にファイアウォールを無効にしましたが、何らかの理由で起動していました。一時フォルダー(hadoop.tmp.dir)またはdfs.data.dirおよびdfs.namenode.name.dirフォルダーをクリーニングまたは再作成し、ネームサーバーを再構築することが解決策であることがありました。