5 つのデータノードを持つ Hadoop クラスター (Cloudera CDH4.2) があります。オブジェクトを作成する MapReduce ジョブを実行しようとしていHBaseConfiguration
ます。localhost:2181
tasktracker の試行は、実際の Zookeeper インストールのアドレスではなく接続しようとしているため、失敗します。
これは、タスクトラッカーに hbase 構成を含む正しいクラスパスが提供されていないためです。ただし、次のようにジョブを実行すると:
HADOOP_CLASSPATH=`/usr/bin/hbase classpath` hadoop jar myjar.jar
ドキュメントには、これで問題が解決することが示されています。の最初のエントリhbase classpath
は/usr/lib/hbase/conf
へのシンボリック リンク/etc/hbase/conf
であるため、理論的には、これにより hbase 構成がHADOOP_CLASSPATH
変数に追加されます。
ただし、タスクトラッカーからのログには次のように表示されます。
2013-08-14 12:47:24,308 INFO org.apache.zookeeper.ZooKeeper: Client environment:java.class.path=<output of `hadoop classpath`>
....
2013-08-14 12:47:24,309 INFO org.apache.zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=180000 watcher=hconnection
.....
2013-08-14 12:47:24,328 WARN org.apache.zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused
HADOOP_CLASSPATH
そのため、何らかの理由で、タスクトラッカーは に設定する私の努力を完全に無視していhbase classpath
ます。ドキュメント ( http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/package-summary.html#classpath ) には、これが機能するはずであると記載されています。どうしたの?
jarコードでzookeeperクォーラムアドレスを明示的に指定することでこれを回避できることは承知していますが、このjarを移植可能にし、再コンパイルせずにローカル構成を取得する必要があるため、アドレスを次のようにハードコーディングする必要はありません実行可能なオプション。