【问题标题】:Connection to Hbase using python is failing使用 python 连接到 Hbase 失败
【发布时间】:2017-04-18 13:22:02
【问题描述】:

我正在尝试使用 python 连接到 Hbase 使用的示例代码

import happybase
connection = happybase.Connection(myhost,port, autoconnect=True)

# before first use:
connection.open()
print(connection.tables())

报错如下

打印(connection.tables()) 回溯(最近一次通话最后): 文件“”,第 1 行,在 表格中的文件“/usr/local/lib/python2.7/dist-packages/happybase/connection.py”,第 242 行 名称 = self.client.getTableNames() _req 中的文件“/usr/local/lib/python2.7/dist-packages/thriftpy/thrift.py”,第 198 行 返回 self._recv(_api) _recv 中的文件“/usr/local/lib/python2.7/dist-packages/thriftpy/thrift.py”,第 210 行 fname、mtype、rseqid = self._iprot.read_message_begin() 文件“thriftpy/protocol/cybin/cybin.pyx”,第 439 行,在 cybin.TCyBinaryProtocol.read_message_begin (thriftpy/protocol/cybin/cybin.c:6470) cybin.ProtocolError: 没有协议版本头

操作系统:Ubuntu 16.04 我正在使用 python 2.7 Hbase 1.1 版 帮助我理解这个问题。除了happybase之外,还有什么更好的方法可以连接到Hbase

谢谢

【问题讨论】:

    标签: python hadoop hbase happybase


    【解决方案1】:

    感谢您提出问题,我确实遇到了同样的问题,互联网上没有答案。不确定我们是不是唯一一个这样做的人。

    但这是我想出解决问题的方法,从错误中可以清楚地看出它与节俭有关,因此请检查以下内容

    /usr/hdp/current/hbase-master/bin/hbase-daemon.sh start thrift

    如果thrift 没有运行!你可能需要开始节俭了

    /usr/hdp/current/hbase-master/bin/hbase-daemon.sh start thrift -p 9090 --infoport 9091

    然后试试你的代码。

    import happybase
    
    c = happybase.Connection('127.0.0.1',9090, autoconnect=False)
    c.open()
    print(c.tables())
    

    自动连接到 hbase

    import happybase
    
    c = happybase.Connection('127.0.0.1',9090)
    print(c.tables())
    

    作为替代方案,您可以使用 starbase,但它不再处于活动状态,我相信您需要启动 rest API。 /usr/hdp/current/hbase-master/bin/hbase-daemon.sh start rest -p 8000 --inforport 8001 试试happybase,如果您遇到同样的问题,请告诉我们。

    顺便说一句,我的测试是在 HDP2.5 上完成的

    进一步参考: https://github.com/wbolster/happybase/issues/161

    除非你知道自己在做什么,否则我不建议这样做

    删除以下属性:从 hbase-site.xml [/etc/hbase/conf/hbase-site.xml]

    <property>
      <name>hbase.regionserver.thrift.http</name>
      <value>true</value>
    </property>
    <property>
      <name>hbase.thrift.support.proxyuser</name>
      <value>true/value>
    </property>
    

    希望这会有所帮助,
    阿莫德

    【讨论】:

      【解决方案2】:

      您要么使用autoconnect = True,要么使用connection.open() 显式启动它。你不必同时做这两件事。

      【讨论】:

        猜你喜欢
        • 2013-03-14
        • 2017-04-28
        • 1970-01-01
        • 1970-01-01
        • 2015-11-27
        • 1970-01-01
        • 2022-11-19
        • 1970-01-01
        • 2022-06-12
        相关资源
        最近更新 更多