1,无力吐槽
第一次用hbase,也是第一次用python连接hbase(时间:20190711),菜鸟一个。连接过程中出现了以下两个问题,各种百度还是没能够解决。最后寻求公司大佬出面解决。真是难者不会,会着不难。针对不熟悉的东西会出现各种莫名其妙的错误。借此,详述我的坎坷经历以及怎么连接上hbase的。
- 报错一:
- 报错二:
2,原因分析
2.1 网上的坑
百度了各种方法,网上都说是客户端happybase.Connection()中的参数transport和protocol的值和服务器上设置的值不一样,从而导致上述错误。
happybase.Connection(host=‘localhost’, port=9090, timeout=None, autoconnect=True, table_prefix=None, table_prefix_separator=b’_’, compat=‘0.98’, transport=‘buffered’, protocol=‘binary’)
可能有这样的原因吧,但是不适合我,因为我的python程序就在服务器上,所以不存在这样的问题。那我的问题到底出在哪里??(原因之一是我太菜)
2.2 解决办法+经验分享
- 问题的原因(只针对我的问题,可能不适合大家)
其实我遇到问题的原因很简单,没有网上说的那么复杂。询问公司大佬后,发现我出现问题的原因是:连接hbase之前,没有检查公司服务器上的thrift服务是否已经开启(心里一万只***奔腾而过)。 - 解决办法
(1)在连接hbase之前,一定要先检查一下服务器是否已经开启了thrift服务。(在此我默认大家的hbase、happybase、thrif已经安装好。因为我所在公司服务器上已经有了,不需要我安装,所以没有安装的请自行百度,资料超多)。检查方法是,通过linux的jps命令查看服务器上是否已经开启了thrift。如果出现了ThriftServer,说明已经该服务已经开启了,否则该服务没有开始,那么就需要启动thrift服务,命令是:hbase thrift start -port:9090。启动完后再用jps检查确认一下thrift服务是否已经开启。
(2)python连接hbase
连接其实很简单了,代码如下。在此真诚的建议各位,如果你是直接在服务器上通过python连接hbase,当你使用happybase.Connection()方法时,不要自己指定过多的参数,可能会出错。就要像我下面的代码一样,越简单越好。出现问题了,再一个参数一个参数去试一试。
# _*_ coding:utf-8 _*_
import happybase
connection = happybase.Connection('localhost', autoconnect=False)
connection.open()
print(connection.tables())#查看hbase现有的所有表名
connection.close()