说在文前
本文内容是基于 Centos 7、HDP 3.0.0、HBase 2.0.0、Python 2.7
环境下,其他环境的童鞋选择性进行参考。
Thrift 安装在 HBase 服务节点上即可。
HBase 实现了两套Thrift Server服务,有两种 Thrift IDL 文件,提供了两套数据结构:
- 第一套有 TCell, ColumnDescriptor,TRegionInfo 等,它的 API 比较全,它不仅有读写 API,同时也有创建删除等 API;
- 第二套有 TTimeRange, TColumn, TColumnValue 等,它更加接近 HBase Java API 的调用方式,但是它的 API 比较少,只有读写表的API),它们最后都是通过 HBase Client 的 Java API 来完成操作。
安装 Thrift
安装依赖包
1 | yum install -y automake libtool flex bison pkgconfig gcc-c++ libevent-devel zlib-devel python-devel ruby-devel openssl-devel |
安装 boost (CentOS 7 必做)
1 | wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz |
下载 Thrift
1 | wget https://archive.apache.org/dist/thrift/0.10.0/thrift-0.10.0.tar.gz |
0.10.0 版本之前的不支持 python 3.5
生成 hbase.thrift
HDP
下 HBase 相应的安装目录下本身就已经存在 hbase.thrift
文件了,所以我们不需要自行创建了。
生成指定语言的代码
1 | # hdp hbase.thrift 文件路径 |
执行完该命令之后,会生成一个 gen-py 目录,将该目录下 hbase 文件下载到本地项目中。(hbase-1 请忽略)
启动 Thrift 服务
1 | cd /usr/hdp/3.0.0.0-1634/hbase/bin/ |
日志路径为 /var/log/hbase/
使用 Thrift 2 模式
1 | ./hbase-daemon.sh start thrift2 -p 9090 --infoport 8086 |
Python 方式连接
Thrift_1 模式
1 | from thrift.transport.TSocket import TSocket |
hbase 源于 上文中 hbase 目录文件包
Thrift_2 模式
1 | from thrift.transport.TSocket import TSocket |
Kerberos On Thrift
服务配置
core-site.xml
1 | hadoop.proxyuser.hbase.groups=* |
hbase-site.xml
1 | hbase.thrift.security.qop=auth |
重启 HDFS 和 HBase
重启 Thrift 服务
1 | # 停止 |
示例
/var/log/hbase
Python 方式连接
Thrift_1 模式
1 | #!/usr/bin/env python |
Thrift_2 模式
1 | #!/usr/bin/env python |
问题
1、找不到libboost_unit_test_framework.a
使用源码本地编译 boos t安装;由于默认认为是 32 位,在 /usr/lib64/libboost_unit_test_framework.a
下是找不到的。可以通过 find libboost_unit_test_framework.a
定位文件真实路径,进行创建软连接。
1 | find / -name libboost_unit_test_framework.a |
2、kerberos.GSSError: ((‘ Miscellaneous failure (see text)’, 851968), (‘Error from KDC: UNKNOWN_SERVER’, -1765328377))
1 | # 日志信息 |
1 | thriftServer = "10.200.168.7" |
3、thrift.transport.TTransport.TTransportException: TSocket read 0 bytes
访问其实已经是通了,一直以为是客户端的问题,由于代码是通过 binary 方式访问,hbase.regionserver.thrift.http=false
应该设置为 false。
4、out 日志中查看到错误信息是认证的问题?
hbase.thrift.kerberos.principal
肯定是配置错误了
高级拓展
启动方式选择
Thrift服务启动有两种方式:
- 每个节点上启动thrift服务
1 | ./bin/hbase-daemon.sh start thrift |
- 仅在Master上启动线程池服务
1 | ./bin/hbase thrift start -threadpool |
由于系统Hbase集群节点数很多,第二种方式更简单些
优化配置项
Hbase-site.xml
1 | <property> |
相关文章
- HBase ThriftServer Kerberos认证
- Connecting HBase with Python Application using Thrift Server
- Python Access Secured Hadoop Cluster Through Thrift API - 程序园
- 使用 Python 和 Thrift 连接 HBase | 张吉的博客
- hbase-thrift-server-in-a-kerberised.html
- Start the HBase Thrift and REST Servers - Hortonworks Data Platform
- Python HBase Kerberos Example
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=u3ne6vwvzcx2