前几天,兴起想仔细玩玩hbase,细细去研究一下,写了个小demo,从win7去连接另一台T510的ubuntu上的hbase.很简单的crud的操作程序,没有看出来什么问题,但是跑起来,硬是好像block住了,不往下执行,eclipse console没有打印任何信息,小红点还一直亮,纳闷之余,看到一些
Opening socket connection to server 192.168.0.xx/192.168.0.xx:2181. Will not attempt to authenticate using SASL (java.lang.SecurityException: 无法定位登录配置) 错误及 hadoop.native.lib is deprecated. Instead, use io.native.lib.available错误,以为是这二者造成的,网上找了n个贴子,试了n次,都毫无头绪,结果还是依然....
真是奇怪了,zookeeper都连上了,但连不到Hbase的master或region server. why?

换了一个本地虚拟机上的单节点伪分布下的hadoop,架上一个hbase-0.98.1-hadoop2跑起,win7下eclipse插件连接hdfs没问题,刷刷的/hbase目录出现了,hbase-site.xml配置好hbase.zookeeper.quorum指向新vm的本地域名,跑起,通了,刷刷的几秒执行完。。怪事,以后实例就直接vm上玩了。。。。

今天下血本败了台新笔记本,内存升到了16G,装了ubuntu server,把hadoop2,hbase,hive一通都配好,再将quorum指向此机子下的地址,之前的那个问题又来了。小红点一直没退,block住一动不动。奇怪奇怪。。。。

决定debug跟踪一看究竟。。。。
一路都跟着很正常,很轻易地连上了zookeeper,locateMeta地址,locate master的location,再到生成RPC的stub完全ok...但是并不是所有都ok....当执行到

RpcRetryingCaller.callWithRetries时,block住了,等了十几秒准备叉掉重来看上一步什么问题的时候。意外地,到了catch代码块,exception了,非常好,正是我想要的。。。。

try {
beforeCall();
callable.prepare(tries != 0); // if called with false, check table status on ZK
return callable.call();
} catch (Throwable t) {
if (LOG.isTraceEnabled()) {
LOG.trace("Call exception, tries=" + tries + ", retries=" + retries + ", retryTime=" +
(EnvironmentEdgeManager.currentTimeMillis() - this.globalStartTime) + "ms", t);
}

得到debug中e的message信息如下:
org.apache.hadoop.net.ConnectTimeoutException: 20000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=hadoop/192.168.0.105:50578]

开心及气愤并存着,它这个鬼level是trace的,完全没有打印告知咱,若不是debug一回,深埋的小石头咱发现不了啊,顿时眼泪都流没了。。。。

咱比较笨,到这里,还没有立马想到为什么会连到105, 105是我的T510机器的IP,第一反应,难道locate时候会cache数据写到文件中,查看了project也没有生成任何hbaes相关的文件,再回头看,region server的域名。。。hadoop.....
oh...查看hosts文件,正是IP 105映射着hadoop.真相大白了。。。

那些Will not attempt to authenticate using SASL (java.lang.SecurityException: 无法定位登录配置) 错误没关紧要。
事实是这样的:
1.hbase connection 是RPC的关键。connection通过查zookeeper来获取master地址,也通过zk获取meta的地址,再通过meta获取对应region server的地址。通过根据这些location信息,结合相关的操作获取stub.再通过stub发送网络包进行远程请求调用。。而获取到的location都是从hbase server(zk)中返回的,它是集群中的域名或地址,生成stub的时候,是我们本地拿到这个location去请求server.
所以要保持win7的域名解析和集群中的域名解析要一致。学习过程中,我们还是好好地规范一下我们的环境吧,
小小的问题,大大的折腾。。。anyhow ,还是有一点点收获吧。

最新文章

  1. Java中private、protected、public和default的区别
  2. Unity4.0的使用
  3. 第二章 jQuery数组和字符串
  4. js函数的几个特殊点
  5. HDU 4913 Least common multiple(2014 Multi-University Training Contest 5)
  6. [转]Vim 复制粘贴探秘
  7. 数学(矩阵乘法):HDU 4565 So Easy!
  8. form里两个submit按钮,在onsubmit中判断哪个被点
  9. static方法与非static方法是否可以互相调用
  10. Kafka如何保证消息的顺序性
  11. ConditionalOnBean 与 ConditionalOnMissingBean 的正确玩法
  12. winform datagridview在添加全选checkbox时提示:不能设置 selected 或 selected 既不是表 Table 的 DataColumn 也不是 DataRelation。
  13. Yum安装时出现 The program yum-complete-transaction is found in the yum-utils package
  14. 2018年Java生态行业报告
  15. (转)Spring Cloud(一)
  16. qsort实现结构体数组排序
  17. setitimer函数
  18. 内置函数bytes()
  19. Android工具类 DateUtil,可以用它方便的进行日期的操作
  20. 2019.1.7 Russia temperature control demo

热门文章

  1. redis3.0.6安装配置
  2. PHP基础知识(二)
  3. 利用jspx解决jsp后缀被限制拿shell
  4. gcc编译选项汇集
  5. 解决安装完Ubuntu系统后启动项中没有Ubuntu的问题
  6. 复制VirtualBox中的虚拟机
  7. JavaWeb 获取ip地址
  8. javascript的基本类型剖析:
  9. 11-spring学习-表达式语言
  10. 【干货】电路设计师指导手册(已更新完毕)(转载EDN)