gpt4 book ai didi

Hadoop Mapreduce tasktrackers 不断忽略 HADOOP_CLASSPATH。 Zookeeper 尝试连接到本地主机而不是集群地址

转载 作者:可可西里 更新时间:2023-11-01 14:59:14 25 4
gpt4 key购买 nike

我有一个包含 5 个数据节点的 Hadoop 集群 (Cloudera CDH4.2)。我正在尝试运行创建 HBaseConfiguration 对象的 MapReduce 作业。 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 的符号链接(symbolic link),因此在理论上,这应该将 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_CLASSPATH 设置为 hbase classpath 的努力。文档 ( http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/package-summary.html#classpath ) 指出这应该可以正常工作。怎么了?

我知道我可以通过在 jar 代码中显式指定 zookeeper quorum 地址来解决这个问题,但我需要这个 jar 是可移植的,并在不重新编译的情况下获取本地配置,所以我看不到硬编码地址作为一个可行的选择。

最佳答案

如果你做过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

关于Hadoop Mapreduce tasktrackers 不断忽略 HADOOP_CLASSPATH。 Zookeeper 尝试连接到本地主机而不是集群地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18232473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com