Building Apache Thrift on CentOS7

安装步骤

1. 安装平台开发工具

yum -y groupinstall "Development Tools"

2. 安装autoconf

wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr/local
make
make install

3.安装automake

wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
tar xvf automake-1.14.tar.gz
cd automake-1.14
./configure --prefix=/usr/local
make
make install

4. 安装bison

wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
tar xvf bison-2.5.1.tar.gz
cd bison-2.5.1
./configure --prefix=/usr/local
make
make install

5. 安装C++库依赖相关的开发包

yum -y install libevent-devel zlib-devel openssl-devel
yum install gcc gcc-c++ bzip2 bzip2-devel bzip2-libs python-devel -y

  • 第二个如果不装后面的boost安装会报错

6.安装libevent

  • 由于在自己make thrift时报错,网上教程也报错,需要安装libevent,所以提到前面写,避免make thrift时间太长,到报错的时候在查询浪费太多时间。
wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
./configure --prefix=/usr/local
make
make install
  • 在某一个报错需要在event.c中添加头#include time.c
  • 添加time.c

7. 安装boost

wget https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.gz
tar xvf boost_1_67_0.tar.gz
cd boost_1_67_0
./bootstrap.sh
./b2

8.安装thrift

  • 按照网上传遍大江南北的做法,教程失败了,我也失败了,这个网上千篇一律的版本是这么干的:
git clone https://git-wip-us.apache.org/repos/asf/thrift.git
cd thrift
./bootstrap.sh
./configure --with-lua=no
make
make install
  • .configure的时候失败了
  • 网上正确的操作
wget http://apache.fayea.com/thrift/0.9.3/thrift-0.9.3.tar.gz
./configure --prefix=/usr/local
make
make install
thrift --version
  • 在 make 这一步会发生一个错误 g++: error: /usr/lib64/libboost_unit_test_framework.a: No such file or directory,
    错误原因是:./configure 的时候是默认编译32位的,不会在 /usr/lib64/ 下产生文件
    修改方法:先查找文件 find / -name libboost_unit_test_framework.a,比如在 /usr/local/lib/libboost_unit_test_framework.a,就可以做如下操作,sudo ln -s /usr/local/lib/libboost_unit_test_framework.a /usr/lib64/libboost_unit_test_framework.a,然后重新执行 make。
    链接:https://www.jianshu.com/p/08c5d24656ae
  • 安装成功

thrift version

python测试

sudo pip install thrift

  • 启动thrift服务
cd /usr/local/hbase
./bin/hbase-daemon.sh start thrift
jps

thrift jps

  • create_table.py
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol

from hbase import Hbase
from hbase.ttypes import *

transport = TSocket.TSocket('localhost', 9090);

transport = TTransport.TBufferedTransport(transport)

protocol = TBinaryProtocol.TBinaryProtocol(transport);

client = Hbase.Client(protocol)
transport.open()


contents = ColumnDescriptor(name='cf:', maxVersions=1)
client.createTable('jiayu', [contents])

print client.getTableNames()

建表前
建表前
建表后
建表前
建表前

  • 如果建表出错
    IOError(message='org.apache.hadoop.hbase.TableExistsException但是list,没有这个表很可能是更新Hbase的时,zookeeper还保留着上一次的Hbase设置,所以造成了冲突。

出错

  • 解决方案:

1)切换到zookeeper的bin目录;
2)执行$sh zkCli.sh
3)输入 ls /
4)输入rm /hbase

5)退出重启zookeeper、hbase即可