hadoop mapreduce tasktrackers一直忽略hadoop\u类路径zookeeper正在尝试连接到本地主机而不是群集地址

a11xaf1n  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(238)

我有一个hadoop集群(clouderacdh4.2),有5个数据节点。我正在运行一个mapreduce作业,它创建一个 HBaseConfiguration 对象。tasktracker尝试失败,因为它们正在尝试连接到 localhost:2181 而不是实际zookeeper安装的地址。
我知道这是因为TaskTracker没有提供包含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

因此,出于某种原因,TaskTracker完全忽略了我设置 HADOOP_CLASSPATHhbase classpath . 文件(http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/package-summary.html#classpath)说明这应该管用。怎么了?
我知道我可以通过在jar代码中显式指定zookeeper仲裁地址来解决这个问题,但是我需要这个jar是可移植的,并且在不重新编译的情况下获取本地配置,所以我不认为硬编码地址是可行的选择。

toe95027

toe950271#

如果您进行了java编程:

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

如果你用过command: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

相关问题