在读取 hbase 表时挂起 Mapreduce 作业

Posted

技术标签:

【中文标题】在读取 hbase 表时挂起 Mapreduce 作业【英文标题】:Hanging Mapreduce job while reading hbase tables 【发布时间】:2015-10-02 18:30:49 【问题描述】:

我有一个像这样设置的 4 节点 hadoop 分布式集群(包括 hbase)。

node1-namenode + hbase master + zookeeper node2-资源管理器 node3-datanode1+hbase regionserver1+nodemanager node4- datenode2+hbase regionserver2+nodemanager

集群设置似乎很好,因为所有的 WEB UI(hbase、namenode、资源管理器)都将出现。现在,当我尝试提交一个读取/写入 hbase 表的 mapreduce 作业时,它会被挂起。它不断超时 但是同样的工作工作正常,如果我在我的 mapreduce 代码中明确提到 hbase 凭据并将它们设置在工作中

Configuration conf =  HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "10.211.55.101");
conf.set("hbase.zookeeper.property.clientPort","2181");
conf.set("hbase.master", "10.211.55.101:60000");
//10.211.55.101 is the ipaddress of node1

这些属性已经在 node1 、 node3 和 node4 上的 hbase 配置中设置。现在我的问题是 我是否需要在仅运行资源管理器的 node2 上设置有关 hbase 配置的任何内容?为什么在代码中明确设置 hbase 配置时相同的工作可以正常工作

【问题讨论】:

【参考方案1】:

HBaseConfiguration.create() 方法加载 hbase-site.xml 中的配置。确保 Node2 的类路径中有可用的 hbase-site.xml。

HBase 文档中指定以下内容here

Java 客户端使用的配置保存在一个 HBaseConfiguration 实例。 HBaseConfiguration 上的工厂方法, HBaseConfiguration.create();,在调用时,将读入内容 在客户端的 CLASSPATH 上找到的第一个 hbase-site.xml,如果有的话 存在(调用还将考虑找到的任何 hbase-default.xml; hbase-default.xml 包含在 hbase.X.X.X.jar 中)

【讨论】:

感谢 Ramana...我仍在努力使其工作.. .. RM 节点(在我的情况下为 node2)是否只需要类路径中的 hbase-site.xml 或类路径中的任何其他实体?还有一个问题,我通常知道在现实世界的用例中,我们为 mapreduce 和 hbase 维护单独的集群。 ..我理解这意味着节点管理器和区域服务器在不同集群中的不同节点上运行......所以在这种情况下,每当运行 mapreduce 作业时,数据局部性总是一个问题......我说的对吗? 没有。通常,区域服务器与 HDFS 数据节点位于同一位置。这就是 HBase 提供更好性能的原因。

以上是关于在读取 hbase 表时挂起 Mapreduce 作业的主要内容,如果未能解决你的问题,请参考以下文章

bigquery 存储 api 在创建读取会话时挂起

Spark 2.1 在读取大量数据集时挂起

Web API 服务在读取流时挂起

Apache/PHP 进程在与 MySQL 交互时挂起

npm 在安装后/解锁时挂起

Dapper 在执行时挂起