使用happybase执行scan()报错RetriesExhaustedException解决

来源:互联网 发布:编程真好玩 dk出版社 编辑:程序博客网 时间:2024/06/08 00:22

python脚本

# encoding: utf-8import os, timeimport sysimport happybaseCURRENT_DIR = os.path.abspath(os.path.dirname(__file__))sys.path.insert(0, CURRENT_DIR + "/../")HBASE_HOST = "172.30.1.200"HBASE_HOST_2 = "172.30.1.201"try:    conn = happybase.Connection(HBASE_HOST, autoconnect=False)    conn.open()except:    conn = happybase.Connection(HBASE_HOST_2, autoconnect=False)    conn.open()    passtest_table = "test_namespace:test_table"table_name = conn.table(test_table)print connprint "TTTTTTTTTTTT TABLE:", table_nameprint "\n________________conn.tables():\n", conn.tables()end_time = time.time()print "未扫描操作,总耗时:%s sec\n" % (end_time - start_time)start_time2 = time.time()scan_obj = table_name.scan()end_num = 1for k,v in scan_obj:    print k, " || \n", v    end_num += 1    if end_num > 3:        breakend_time2 = time.time()print "\n扫描3行,总耗时:%s sec" % (end_time2 - start_time2)#conn.close()   # 无需手动关闭连接,否则报错Exception AttributeError: "'NoneType' object has no attribute 'sendall'" in <generator object scan at 0x7f96e9d7c730> ignored

执行Python脚本happybase_test_HbaseScan.py的输出————
TTTTTTTTTTTT TABLE: < happybase.table.Table name=’test_namespace:table_name’>
列出所有表

scan爆出异常

从输出结果和python脚本可知,问题出现在 table_name.scan() 这个方法。下面是排查过程————
【检查相关服务是否正常】
登入hbase web UI检查,各个HMaster正常运行,各个Region Server运行正常,各个相关进程都在;hdfs集群各个data node都运行正常。

【检查1】
根据上面爆出的日志(message=”org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:\nTue Dec 26 09:54:18 CST 2017, null, java.net.SocketTimeoutException: callTimeout=180000
原因可能是zookpeeper上的父节点不存在了,导致客户端连接尝试36次之后仍找不到zk的注册节点,超时断开。然后查看hbase-site.xml配置文件中的zookeeper.znode.parent
发现”/hbase-unsecure”是在的(配成/hbase-unsecure而不是/hbase-secure是因为我们的Enable Authentication未使用kerberos安全策略,只是使用Simple,如果使用了kerberos就需要把zookeeper.znode.parent配成/hbase-secure)。
所以这个原因排除掉。

【检查2】
既然报错信息中提到了java.net.SocketTimeoutException: callTimeout=180000,那么查看一下hbase-site.xml 中的hbase.client.scanner.timeout.period,发现是180000ms,即180秒,
这应该就是直接导致这种错误的原因了。

【检查3】
报错中有Failed after attempts=36,到Ambari查看客户端的Maximum Client Retries(客户端最大重试)次数为35

【解决】
要么增加hbase.client.scanner.timeout.period的值;
要么减少scan获取的记录数,因为扫描过多数量的记录会导致时间过长,一旦超过timeout的值就会出异常、断开连接。
建议:使用rowkey查询,而不要用scan() 。如果非要用scan也要用参数限定扫描范围,例如start_row、end_row、limit,可以减少查询时间。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 机敏的反义词 机敏的近义词 行政机构 组织机构 金融机构 机构 内设机构 机构设置 机构股票 机构英文 机构英语 机构投资者 什么是机构 发动机配气机构 考雅思培训机构 医疗机构管理条例 全国组织机构代码管理中心 机构信用代码 组织机构代码查询 曲柄连杆机构 三方检测机构 曲柄滑块机构 培训机构老师5年后出路 机构是什么意思 股票机构是什么 机构吃货是什么意思 枢怎么读 电枢平衡机 绿枢作品 枢木葵 玖兰枢 绿枢 叶宋苏宸南枢目录 枢木美栞 枢零 枢椎 户枢不蝼 鲜于枢 电枢 天下文枢