内容简介:1问题重现1.RedHat7.4
1
问题重现
-
测试环境:
1.RedHat7.4
2.CDH5.16.1
3.使用root进行操作
4.集群已启用Kerberos
1.登录Hue并选择HBase模块。
界面上报错“API Error:timed out”,无法访问HBase中的表。
2.查看Hue的log有以下报错:
[root@ip-172-31-13-38 hue]#vim /var/log/hue/runcpserver.log
[19/May/2019 07:07:07 -0700] thrift_util WARNING Not retrying thrift call getTableNames due to socket timeout
[19/May/2019 07:07:07 -0700] thrift_util INFO Thrift saw a socket error: timed out
[19/May/2019 07:07:07 -0700] exceptions_renderable ERROR Potential trace: [('/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hue/apps/hbase/src/hbase/api.py', 46, 'query', 'return getattr(self, action)(*args)'), ('/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hue/apps/hbase/src/hbase/api.py', 141, 'getTableList', "return [{'name': name, 'enabled': client.isTableEnabled(name, doas=self.user.username)} for name in client.getTableNames(doas=self.user.username)]"), ('/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hue/desktop/core/src/desktop/lib/thrift_util.py', 385, 'wrapper', "raise StructuredException('THRIFTSOCKET', str(e), data=None, error_code=502)")]
[19/May/2019 07:07:07 -0700] middleware INFO Processing exception: Api Error: timed out: Traceback (most recent call last):
File "/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hue/build/env/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/core/handlers/base.py", line 112, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hue/build/env/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/db/transaction.py", line 371, in inner
return func(*args, **kwargs)
File "/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hue/apps/hbase/src/hbase/views.py", line 79, in api_router
return api_dump(HbaseApi(request.user).query(*url_params))
File "/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hue/apps/hbase/src/hbase/api.py", line 54, in query
raise PopupException(_("Api Error: %s") % error_msg)
PopupException: Api Error: timed out
2
异常分析
1.首先我们查看Hue配置中关于HBase Thrift的默认配置:
[root@ip-172-31-13-38 hue]#vim /opt/cloudera/parcels/CDH/lib/hue/apps/hbase/src/hbase/conf.py
THRIFT_TRANSPORT = Config(
key="thrift_transport",
default="framed",
help=_t("'framed' is used to chunk up responses, which is useful when used in conjunction with the nonblocking server in Thrift."
"'buffered' used to be the default of the HBase Thrift Server."),
type=str
)
可以看到Hue中使用默认的模式framed。
2.回到Cloudera Manager上点击HBase服务,然后进入Thrift的配置页。
可以看到HBase Thrift的framed模式并未勾选,说明HBase Thrift使用的是buffered模式,这与Hue的默认模式是不匹配的。所以导致通过Hue访问HBase服务异常报错API Error。
注意:查看上图hbase.regionserver.thrift.server.type该参数的服务类型,一共三项,根据CM对hbase.regionserver.thrift.framed的解释“使用 THsHaServer 或 TNonblockingServer 时,无论此配置值如何,始终使用framed传输。”而hbase.regionserver.thrift.server.type该参数的默认值是TThreadPoolServer恰好使用的不是framed。
3
问题解决
1.在Hue的配置 hue_safety_valve.ini 的 Hue 服务高级配置代码段(安全阀) 中增加以下配置:
[hbase]
thrift_transport=buffered
2.保存更改,然后回到Cloudera Manager主页重启Hue服务,该过程省略。
3.重新登录Hue并访问HBase。
已经可以正常访问HBase,问题解决。
4
问题总结
1.从CDH5.15开始Hue的默认配置中 THRIFT_TRANSPORT 为 framed ,而HBase Thrift中的默认配置却为 buffered ,所以导致Hue访问HBase服务失败。
2.使用以下三种方法中任意一种可以解决该问题:
a)在hue_safety_valve.ini中增加以下内容:
[hbase]
thrift_transport=buffered
这也是本文使用的方法。
b)修改
/opt/cloudera/parcels/CDH/lib/hue/apps/hbase/src/hbase/conf.py
中的THRIFT_TRANSPORT的默认配置为buffered。
c)通过Cloudera Manager将HBase Thrift的配置项 hbase.regionserver.thrift.server.type 修改为 TNonblockingServer ,这样HBase会使用 framed 的方式进行传输,可以与Hue中的默认配置保持一致。
参考:
https://github.com/cloudera/hue/issues/702
https://clairvoyant.zendesk.com/hc/en-us/articles/360016421713-Hue-to-Hbase-not-working
https://yq.aliyun.com/ask/238832
大家工作学习遇到HBase技术问题,把问题发布到HBase技术社区论坛http://hbase.group,欢迎大家论坛上面提问留言讨论。想了解更多HBase技术关注HBase技术社区公众号(微信号:hbasegroup),非常欢迎大家积极投稿。
技术社群
【HBase生态+Spark社区大群】
群福利:群内每周进行群直播技术分享及问答
加入方式1:https://dwz.cn/Fvqv066s?spm=a2c4e.11153940.blogcont688191.19.1fcd1351nOOPvI
加入方式2:钉钉扫码加入
以上所述就是小编给大家介绍的《HBase实践 | Hue集成HBase出现Api Error异常分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。