2

5 つのデータノードを持つ Hadoop クラスター (Cloudera CDH4.2) があります。オブジェクトを作成する MapReduce ジョブを実行しようとしていHBaseConfigurationます。localhost:2181tasktracker の試行は、実際の 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を移植可能にし、再コンパイルせずにローカル構成を取得する必要があるため、アドレスを次のようにハードコーディングする必要はありません実行可能なオプション。

4

1 に答える 1

0

Java プログラミングを作成した場合:

conf.set("hbase.zookeeper.quorum", "server1,server2,server3");    
conf.set("hbase.zookeeper.property.clientPort", "2181");

コマンドを使用した場合: add -Dhbase.zookeeper.quorum

sudo hadoop jar /opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0.p0.22/lib/hbase/hbase.jar rowcounter -Dhbase.zookeeper.quorum=server1,server2,server3 hly_temp
于 2015-07-10T18:31:27.827 に答える