いま使っている環境(scribe + CDH3b2クラスタ)からHadoopクラスタを別のノード群で構成しなおすことになったのでCDH3u2で組んでみたんだけど、いざ相互接続をやるべー、と思ったらなんかscribedからHDFSに書き込みができない。
最初はよくあるネットワークや設定の問題かと思ったんだけど、あれこれ試してみたらタイトルのような状況らしいことがわかってきた。
以下、CDH3b2のノードを nodeX.cluster CDH3b2クラスタのNameNodeを nodeY.cluster CDH3u2クラスタのNameNodeを nodeZ.cluster と書くことにする。
また大前提として nodeX はCDH3b2で構成されたクラスタに普通に hadoop fs -ls できるし nodeZ はCDH3u2で構成されたクラスタに普通に hadoop fs -ls できる。
CDH3b2のノードからCDH3u2のクラスタへのアクセス
失敗する。
$ hadoop fs -fs hdfs://nodeZ.cluster:50071/ -ls / Bad connection to FS. command aborted.
CDH3u2のノードからCDH3b2のクラスタへのアクセス
失敗する。
$ hadoop fs -fs hdfs://nodeY.cluster:50071/ -ls / Bad connection to FS. command aborted. exception: Call to nodeY.cluster/10.0.xxx.xxx:50071 failed on local exception: java.io.EOFException
nodeXに仮のCDH3u2環境をつくってCDH3u2クラスタへアクセス
成功しちゃった。手順はざっと。~/configs/hadoop にCDH3u2クラスタ用の設定一式があると思いねえ。
$ cd /usr/local; tar xzf hadoop-0.20.2-cdh3u2.tar.gz $ export HADOOP_HOME=/usr/local/hadoop-0.20.2-cdh3u2 $ export HADOOP_CONF_DIR=$HOME/configs/hadoop $ export PATH=$PATH:/usr/local/hadoop-0.20.2-cdh3u2 $ hadoop fs -fs hdfs://nodeZ.cluster:50071/ -ls / log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /var/log/hadoop/SecurityAuth.audit (No such file or directory) at java.io.FileOutputStream.openAppend(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:177) at java.io.FileOutputStream.<init>(FileOutputStream.java:102) at org.apache.log4j.FileAppender.setFile(FileAppender.java:290) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:164) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:216) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:257) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:133) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:97) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:689) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:647) at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:568) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:442) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:476) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471) at org.apache.log4j.LogManager.<clinit>(LogManager.java:125) at org.apache.log4j.Logger.getLogger(Logger.java:105) at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:229) at org.apache.commons.logging.impl.Log4JLogger.<init>(Log4JLogger.java:65) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529) at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235) at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351) at org.apache.hadoop.fs.FsShell.<clinit>(FsShell.java:53) log4j:ERROR Either File or DatePattern options are not set for appender [DRFAS]. Found 2 items drwxr-xr-x - dareka supergroup 0 2011-10-25 17:17 /scribe drwxr-xr-x - dareka supergroup 0 2011-10-24 18:58 /var
なんかlog4jのエラーが出てるがどっかに /usr/local/hadoop (こっちはCDH3b2)を使う設定が残ってたんだろう。それはまあいいとして、HDFSの中身が見えてる。ぐええ。