2

我有一个带有 5 个数据节点的 Hadoop 集群(Cloudera CDH4.2)。我正在尝试运行创建HBaseConfiguration对象的 MapReduce 作业。tasktracker 尝试失败,因为他们尝试连接localhost:2181而不是实际的 zookeeper 安装地址。

我知道这是因为没有为 tasktrackers 提供包含 hbase 配置的正确类路径。但是,如果我像这样运行工作:

HADOOP_CLASSPATH=`/usr/bin/hbase classpath` hadoop jar myjar.jar

文档表明这应该可以解决问题。第一个条目hbase classpath/usr/lib/hbase/conf的符号链接/etc/hbase/conf,因此理论上,这应该将 hbase 配置添加到HADOOP_CLASSPATH变量中。

但是,来自 tasktracker 的日志显示了这一点:

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

因此,出于某种原因,tasktrackers 完全无视我设置HADOOP_CLASSPATHhbase 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 回答