我是靠谱客的博主 朴素黑夜,最近开发中收集的这篇文章主要介绍CDH Hue连接Hbase报错TSocket read 0 bytes问题描述解决解决过程记录,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题描述

安装好CDH集群后,在Hue中查看HBase信息时,Hue界面报错如下:

Api 错误:TSocket read 0 bytes

Hue日志报错:

exceptions_renderable ERROR    Potential trace: [('/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hue/apps/hbase/src/hbase/api.py', 46, 'query', 'return getattr(self, action)(*args)'), ('/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hue/apps/hbase/src/hbase/api.py', 142, '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-6.3.2-1.cdh6.3.2.p0.1605554/lib/hue/desktop/core/src/desktop/lib/thrift_util.py', 420, 'wrapper', 'raise StructuredThriftTransportException(e, error_code=502)')]

HBase Thrift日志没有相关信息输出。

解决

启用安全

这里指启用TLS/SSL安全,thrift服务无法连接kerberos安全的hbase。

修改HBase配置如下:

配置
hbase.regionserver.thrift.httptrue
hbase.thrift.support.proxyusertrue

重启服务即可。

未启用安全

修改HBase配置如下:

配置
hbase.regionserver.thrift.httptrue
hbase.thrift.support.proxyuserfalse

重启服务即可。

解决过程记录

环境

服务版本
OSCentos7.8
Cloudera Manager6.3.1
CDH6.3.2

探索和分析

出了问题,没有头绪,于是开始在网上搜索解决方案。
在Cloudera社区找到了两个相关的问题及其解决方案,不过都没有解决问题。
这里贴出链接:
讨论一:https://community.cloudera.com/t5/Support-Questions/Hue-hbase-Api-Error-TSocket-read-0-bytes/td-p/21070
讨论二:https://community.cloudera.com/t5/Support-Questions/CDH-6-3-3-Hue-Hbase-Api-Error-TSocket-read-0-bytes/m-p/297091

另外也参考了Hue官方文档集成HBase的说明,主要内容如下:

Have HBase and Thrift Service 1 initiated (Thrift can be configured through Cloudera Manager or manually). Look at the HBase service configuration and check to see if the “Enable HBase Thrift Server Framed Transport” property is enabled. If it is, try unchecking it or set ‘thrift_transport=framed’ in the [hbase] section of the hue.ini.

在按照上述两个讨论和Hue官方文档分别操作之后,问题没有得到解决。
根据讨论一,发现Hue貌似只支持Thrift1,而不支持Thrift2,不过讨论一是2014年的,时间有点久远了。
Hue官方文档在2020年初更新过,但是也明确说了使用Thrift1。

CDH的HBase Thrift服务应该是Thrift1。

现在看来,这个问题貌似无解了,不过通过对这几个资料的仔细研读,我的注意力集中到以下两个配置上。

服务配置说明
HBaseEnable HBase Thrift Server Framed Transport (hbase.regionserver.thrift.framed)启用 HBase Thrift 服务器框架运输
Hue[hbase] thrift_transportHBase Thrift运输配置,默认值是buffered

通过理解这两个配置,我发现这两个配置应该是需要保持同步的,但是在讨论一和Hue文档中,所作的操作最终使这两个配置不同步了。于是我决定尝试使两个配置保持同步。

HBase保持原始配置不要动,我安装好的HBase有关Thrift的原始相关配置如下:

配置
hbase.regionserver.thrift.compacttrue
hbase.regionserver.thrift.framedtrue
hbase.regionserver.thrift.server.typeTThreadPoolServer

虽然我对这几个配置不是很了解,但是请保持这样配置。

Hue配置中,找到 hue_safety_valve.ini 的 Hue 服务高级配置代码段(安全阀),添加如下配置:

[hbase]
  thrift_transport=framed

保存配置后,重启Hue服务,再次在Hue中访问HBase,可以成功访问,HBase Thrift日志也出现相应的输出信息。

虽然可以解决了本文开篇提到的问题,但是Hue的配置检测结果提示:
在这里插入图片描述
这个提示说明,这样配置不对。

于是继续搜索解决方案,发现许多文章引用了一个Stack Overflow的讨论。
地址:https://stackoverflow.com/questions/20415493/api-error-tsocket-read-0-bytes-when-using-hue-with-hbase

按照这个尝试,完美解决了问题。

其实在上面谈到HBase Thrift日志没有输出信息时,我就该想到可能是thrift服务连接不上,通过恢复HBase和Hue配置,进行Hue配置检测,发现以下问题:
在这里插入图片描述
这里啰嗦了这么多,只是为了提供更多的相关的内容,毕竟有时候问题相同,原因确实不同。

最后

以上就是朴素黑夜为你收集整理的CDH Hue连接Hbase报错TSocket read 0 bytes问题描述解决解决过程记录的全部内容,希望文章能够帮你解决CDH Hue连接Hbase报错TSocket read 0 bytes问题描述解决解决过程记录所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部