hbase之Reverse DNS问题

今天是周五, 明天周末, 晚上正好有时间倒腾下hbase, 在笔记本上安装了虚拟机,香港服务器, 并安装了ubuntu-11.04-server-i386.iso 系统, 下载了jdk-7-linux-i586.tar.gz, hadoop-0.20.203.0rc1.tar.gz, hbase-0.90.4.tar.gz, 接着安装jdk, 配置环境变量, 准备就绪后开始启动hadoop, 正常, 接着启动hbase, 发现报错, 查看日志, 大意是hbase下的hadoop版本与运行中的hadoop版本不同

OK, 来检查下, hbase_home/lib下的hadoop版本是 hadoop-core-0.20-append-r1056497.jar, hadoop-0.20.203 下的为hadoop-core-0.20.203.0.jar. 将hbase_home/lib下的hadoop版本替换为hadoop-core-0.20.203.0.jar, 重新启动hbase, 发现还是有错误, 大意是某些类找不到, 这个好解决, 在hbase启动脚本中把hadoop下的jar包设置到classpath路径, 重启后错误解决, 可以建表和查询了。

因为ubuntu-11.04-server-i386 没有界面, 我的eclipse安装在本地windows系统中, 需要通过虚拟机连接hbase

查看下虚拟机IP地址:

yinjie@ubuntu:~/soft/hadoop-0.20.203.0/bin$ ifconfigeth0 Link encap:Ethernet HWaddr 00:0c:29:bd:62:7b inet addr:192.168.203.129 Bcast:192.168.203.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:febd:627b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:300269 errors:0 dropped:0 overruns:0 frame:0 TX packets:78941 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:417200572 (417.2 MB) TX bytes:7264996 (7.2 MB) Interrupt:19 Base address:0x2000

ip是 192.168.203.129创建一张表试试:

执行后发现总是异常查看zookeeper连接是否正常: 192.168.203.129:2181zkCli -server 192.168.203.129:2181

问题很明显, 通过zookeeper拿到的hmaster地址是 localhost:60000, 这样当然就连接不上hmaster了接下去看看hbase中的默认配置文件hbase-default.xml挖几个配置项出来, 在hbase-site.xml中重新设置:

上面明确指定了使用192.168.203.129地址. 以为这样就没问题了, 但事实上zookeeper里面注册的hmaster地址仍旧是localhost, 为什么会返回localhost而不是192.168.203.129, 真的有点沉不住气了, 那就直接翻源码吧。翻源码过程就不说了, 截几个重要的函数来看下:在HMaster.java中有一个函数:

来看看DNS.getDefaultHost方法

步步跟踪,最后来到:

从这个函数可以看出,hbase会根据ip来得到域名, 如果中间有异常则在 getHosts函数中返回localhost既然是ip->域名反向查找过程有问题, 那就来看看DNS服务吧

问题很明显, 是192.168.203.129这个IP没有被DNS反向解析成域名, 也就是说192.168.203.129在dns里找不到对应的域名真是一路坎坷啊, 那就来安装一个DNS

yinjie@ubuntu:~/soft/hbase-0.90.4/conf$sudoapt-getinstallbind9

安装完毕后来查看下/etc/bind下有哪些文件

接着配置 192.168.203.129 IP地址与域名的对应关系(这里把域名设置成yinjie):照样画葫芦,创建db.129 文件:vi db.129 输入:

创建db.yinjie文件vi db.yinjie 输入:

然后编辑: named.conf.default-zones 添加:

这样 192.168.203.129就与域名yinjie关联起来了,网站空间, 通过yinjie可以解析出地址 192.168.203.129, 通过地址192.168.203.129可以解析出域名yinjie重启一下DNS服务, 使配置生效:

yinjie@ubuntu:/etc/bind$sudo/etc/init.d/bind9restart

好了, 来验证下:

从上面可以看出, 输入192.168.203.129返回的域名确实是yinjie, 而通过域名yinjie可以得到IP地址192.168.203.129好了,DNS已经解决, 成功已经接近,美国服务器, 不过最后还要做些配置上的改动修改hadoop配置core-site.xml

修改hadoop配置mapred-site.xml

修改hbase配置 hbase-site.xml

最后修改/etc/hosts文件增加:192.168.203.129 yinjieOK了, 启动hadoop, hbase, 然后在windows下运行创建表程序, 部分日志打印如下:11/08/27 19:45:18 INFO zookeeper.ZooKeeper: Client environment:user.name=Administrator11/08/27 19:45:18 INFO zookeeper.ZooKeeper: Client environment:user.home=C:\Documents and Settings\Administrator11/08/27 19:45:18 INFO zookeeper.ZooKeeper: Client environment:user.dir=D:\Development\Source\workspace\hbase-test11/08/27 19:45:18 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=yinjie:2181 sessionTimeout=180000 watcher=hconnection11/08/27 19:45:19 INFO zookeeper.ClientCnxn: Opening socket connection to server yinjie/192.168.203.129:218111/08/27 19:45:19 INFO zookeeper.ClientCnxn: Socket connection established to yinjie/192.168.203.129:2181, initiating session11/08/27 19:45:19 INFO zookeeper.ClientCnxn: Session establishment complete on server yinjie/192.168.203.129:2181, sessionid = 0x1320b0d2e2f0005, negotiated timeout = 180000create table ok .

成功!!!HADOOP-5339.doc 附件是问题解决过程中找到的一些资料, 是关于reverse DNS doesnt resolve local loop address DNS解析问题

本文出自 “yyj0531” 博客,请务必保留此出处

人生最大的错误是不断担心会犯错

hbase之Reverse DNS问题

相关文章:

你感兴趣的文章:

标签云: