spark 读取预分region的Hbase

在Hbase中建立一个空表 按日期预分region如下
20170101-~
20170102-~
20170103-~
20170104-~
20170105-~
然后提交spark 任务涉及的scan范围为
startRowKey..20161203- stopRowKey..20170101_
sparksubmit之后报:
17/01/12 17:25:36 WARN TableInputFormatBase: Cannot resolve the host name for 10-10-135-166/10.10.135.166 because of javax.naming.NameNotFoundException: DNS name not found ; remaining name '166.135.10.10.in-addr.arpa'
17/01/12 17:25:36 WARN TableInputFormatBase: Cannot resolve the host name for 10-10-135-166/10.10.135.166 because of javax.naming.NameNotFoundException: DNS name not found ; remaining name '166.135.10.10.in-addr.arpa'
17/01/12 17:25:36 WARN TableInputFormatBase: Cannot resolve the host name for 10-10-135-166/10.10.135.166 because of javax.naming.NameNotFoundException: DNS name not found ; remaining name '166.135.10.10.in-addr.arpa'
17/01/12 17:25:36 WARN TableInputFormatBase: Cannot resolve the host name for 10-10-135-166/10.10.135.166 because of javax.naming.NameNotFoundException: DNS name not found ; remaining name '166.135.10.10.in-addr.arpa'
17/01/12 17:25:36 WARN TableInputFormatBase: Cannot resolve the host name for 10-10-135-166/10.10.135.166 because of javax.naming.NameNotFoundException: DNS name not found ; remaining name '166.135.10.10.in-addr.arpa'
17/01/12 17:25:36 WARN TableInputFormatBase: Cannot resolve the host name for 10-10-135-166/10.10.135.166 because of javax.naming.NameNotFoundException: DNS name not found ; remaining name '166.135.10.10.in-addr.arpa'
 
一共6条warn,也就是说它会请求预分配的6个region,这是为什么呢,为什么不是一个 region呢?
 
已邀请:

fish - Hadooper

Warning看起来是dns(或者/etc/hosts)没配好导致的。

mopishv0 - 高级开发工程师@美团

是meta表中记录的机器名,客户端无法解析
**找到问题答案了:****以上问题的实质,就是集群中的Reverse DNS不能正常工作。所以,我们要保证集群中的每一个rDNS都能正常工作**
验证Reverse DNS是否正常

首先来验证,Reverse DNS是否确实不能正常工作。这里正常工作的定义是:集群中的每一个节点的Reverse DNS都要能正常工作,即能根据任意一个节点的IP查询它对应的hostname。 


验证命令

host IP


例如,要验证某个节点的rDNS是否正常工作,我们只需要准备好一个该节点应该知道hostname的IP(假定是10.163.105.115),并在该节点上运行以下命令:

host 10.163.105.115


如果返回的是类似于如下的结果(即给出了该IP对应的hostname):

115.105.163.10.in-addr.arpa domain name pointer ecs2.njzd.com.
则说明该节点的rDNS是正常工作的。





配置rDNS

最简单的方法就是利用/etc/hosts中IP与hostname的关系。 


#1、禁用DNS Server 
编辑etc/resolv.conf,把所有的DNS项(即形如 nameserver 的行)都注释掉


#2、完善/etc/hosts文件 
将该文件中的所有ip与hostname的项都写正确



#3、调用命令dnsmasq 
如果没有该命令,则先用yum install dnsmasq安装,然后运行命令dnsmasq



在集群中的每一个节点都用上述方法来保证每个节点的rDNS都是正常的。



现在,以HBase table为数据源运行MR job或Spark job,应该不会再报上述的Cannot resolve the host name for xxx/yyy because of javax.naming.NameNotFoundException: DNS name not found这样的异常了
 

要回复问题请先登录注册