xperiaにskypeをインストールしたらバッテリーが1日持たなくなってしまいました。
今は充電ケーブルに行動範囲を縛られてるleonです。
今回は、前回の続き「ご紹介したHadoopサーバーの増やし方、減らし方」のハマり話です。
今は充電ケーブルに行動範囲を縛られてるleonです。
今回は、前回の続き「ご紹介したHadoopサーバーの増やし方、減らし方」のハマり話です。
ハマったのはincludeファイル、excludeファイルの記述する方法です。
答え、先言っちゃいますね。
includeファイルと、excludeファイルにはサーバーのFQDNを記述しなきゃ行けなかったんです。
答え、先言っちゃいますね。
includeファイルと、excludeファイルにはサーバーのFQDNを記述しなきゃ行けなかったんです。
最初、slavesファイルと同じホスト名を記述したんですが、Hadoopサービスを再起動するとslaveサーバーが接続されないんです。
「hadoop-hadoop-jobtracker-hdmaster.log」を見ると以下のようなログが出てました。
Haddop設定ファイルのdfs.hostsプロパティとmapred.hostsプロパティの値を見直しても間違ってませんよ。って感じであれこれ試行錯誤しました。
で、ホスト名をFQDNにしてみたらなんとslaveサーバーと接続されるじゃないですか。
前回説明した通りmasters/slavesファイルとinclude/excludeファイルは役割が異なる。役割が異なるから設定も異なるってことなんでしょうね。
masters/slavesファイルはHadoop起動制御のシェルスクリプトが参照し、include/excludeファイルはHadoopのjavaプロセスが参照しています。
これ、わかんないですよねー。
あと、masterサーバーとslaveサーバーのネットワーク接続状態を確認したところ、hadoopのjavaプロセスはIPv6でバインドされてました。
$ sudo netstat -plten | grep java
弊社のネットワークはすべてIPv4で構築してます。なので、HadoopもIPv4でバインドするように変更しました。具体的には、hadoopコマンドのスクリプトを編集して明示的にIPv4で接続するしました。
hadoopを再起動して、ネットワーク接続状態を確認すると・・・
IPv4でバインドされてますね。OKです。
ではでは
「hadoop-hadoop-jobtracker-hdmaster.log」を見ると以下のようなログが出てました。
2010-10-20 14:05:35,769 INFO org.apache.hadoop.ipc.Server: IPC Server handler 15 on 9001, call heartbeat(org.apache.hadoop.mapred.TaskTrackerStatus@51c293f8, true, true, -1) from 192.168.0.xxx:44035: error: org.apache.hadoop.mapred.DisallowedTaskTrackerException: Tasktracker denied communication with jobtracker: tracker_hdslave1.domain.jp:localhost.localdomain/127.0.0.1:44034 org.apache.hadoop.mapred.DisallowedTaskTrackerException: Tasktracker denied communication with jobtracker: tracker_hdslave1.domain.jp:localhost.localdomain/127.0.0.1:44034 at org.apache.hadoop.mapred.JobTracker.heartbeat(JobTracker.java:1246) at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:481) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:890)はて?jobtrackerからクラスタへの接続が許可されないとな?includeファイルが読めてない?
Haddop設定ファイルのdfs.hostsプロパティとmapred.hostsプロパティの値を見直しても間違ってませんよ。って感じであれこれ試行錯誤しました。
で、ホスト名をFQDNにしてみたらなんとslaveサーバーと接続されるじゃないですか。
前回説明した通りmasters/slavesファイルとinclude/excludeファイルは役割が異なる。役割が異なるから設定も異なるってことなんでしょうね。
masters/slavesファイルはHadoop起動制御のシェルスクリプトが参照し、include/excludeファイルはHadoopのjavaプロセスが参照しています。
これ、わかんないですよねー。
あと、masterサーバーとslaveサーバーのネットワーク接続状態を確認したところ、hadoopのjavaプロセスはIPv6でバインドされてました。
$ sudo netstat -plten | grep java
tcp 0 0 ::ffff:192.168.0.5:9000 :::* LISTEN 220 2464200901 8483/java tcp 0 0 ::ffff:192.168.0.5:9001 :::* LISTEN 220 2464201589 8766/java (省略)
弊社のネットワークはすべてIPv4で構築してます。なので、HadoopもIPv4でバインドするように変更しました。具体的には、hadoopコマンドのスクリプトを編集して明示的にIPv4で接続するしました。
258 HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.root.logger=${HADOOP_ROOT_LOGGER:-INFO,console}" 259 if [ "x$JAVA_LIBRARY_PATH" != "x" ]; then 260 HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$JAVA_LIBRARY_PATH" 261 fi → 262 HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true" 263 264 # run it 265 exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"262行目の1行が編集した部分です。
hadoopを再起動して、ネットワーク接続状態を確認すると・・・
$ sudo netstat -plten | grep java tcp 0 0 192.168.0.5:9000 0.0.0.0:* LISTEN 220 2480561580 29797/java tcp 0 0 192.168.0.5:9001 0.0.0.0:* LISTEN 220 2480562441 30112/java (省略)
IPv4でバインドされてますね。OKです。
ではでは