【问题标题】:Hadoop Mapreduce tasktrackers keep ignoring HADOOP_CLASSPATH. Zookeeper trying to connect to localhost rather than cluster addressHadoop Mapreduce 任务跟踪器一直忽略 HADOOP_CLASSPATH。 Zookeeper 尝试连接到 localhost 而不是集群地址
【发布时间】:2013-08-14 13:01:47
【问题描述】:

我有一个带有 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 的符号链接,所以理论上,这应该将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 仲裁地址来解决这个问题,但我需要这个 jar 是可移植的,并且无需重新编译即可获取本地配置,所以我看不到硬编码地址是一个可行的选择。

【问题讨论】:

  • 尝试以下步骤: 1) 确保 hbase-site.xml 包含正确的 Zk quorum; 2) export HADOOP_CONF_DIR="$HADOOP_HOME/conf" 3) export HBASE_CONF_DIR="$HBASE_HOME/conf"
  • (1) hbase-site.xml 包含正确的hbase.zookeeper.quorum 值,并且是整个集群中的同一个文件。 (2) 和 (3) 没有区别(假设我在客户端而不是集群节点上设置这些)。 tasktracker 日志中的相同类路径。相同的输出。
  • @growse:我遇到了同样的问题,我想知道您是否找到了解决方案。如果有,你介意分享一下吗?
  • 否 - 我最终手动指定了 zk 地址。
  • 我也遇到了同样的问题。每个 TT 节点都有“hbase 网关角色”和部署的“客户端配置”。但是当代码提交使用 hbase 的作业时,/etc/hbase/conf 在类路径中是 ont :(

标签: hadoop hbase cloudera apache-zookeeper


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2022-11-18
    • 1970-01-01
    相关资源
    最近更新 更多