Thrift
From GeilThings
Thrift General Version 0.9.0 Stable 0.9.0 Function Remote procedure call framework Scripts
Links Website Thrift Wikipedia Thrift General
- Documentation is either very very sparse, or for the wrong version of Thrift, or whatever.
- Thrift Wiki: http://wiki.apache.org/thrift/FrontPage
- Thrift: The Missing Guide - Diwaker Gupta: http://diwakergupta.github.com/thrift-missing-guide/
- An intro to Thrift - Blog from Jayant Kumar: http://jayant7k.blogspot.com/2010/04/intro-to-thrift.html
- Apache Thrift - Quick Tutorial: http://www.thrift.pl/
- Apache Thrift: http://jnb.ociweb.com/jnb/jnbJun2009.html
- Version: thrift -version
- Response: Thrift version 0.6.1
- Community forums (Mailing lists): http://thrift.apache.org/mailing/
See also
- Google Protocol Buffers: http://code.google.com/p/protobuf/
Installing Thrift
Installing Thrift under CentOS
# CentOS 5 packages: # http://wiki.apache.org/thrift/GettingCentOS5Packages # automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel # ruby-devel was not installed since Ruby was built from source. # CentOS 5.6, 5.7: yum install gcc-c++ libevent libevent-devel zlib-devel glib2-devel yum install boost boost-devel automake libtool flex bison pkgconfig yum install perl-Bit-Vector # CentOS 6.2 has perl-Class-Accessor, CentOS 5.6 does not, see below. # Is perl-Class-Accessor really needed??? The Perl library can be built with Thrift 0.8.0 WITHOUT perl-Class-Accessor. # CentOS 6.2: yum install perl-Class-Accessor ### perl-Class-Accessor was not found in CentOS 5.6 repository, so # cpan # install Class::Accessor # exit # Not needed for CentOS 6.2 since CentOS 6.2 has boost 1.41.0: # CentOS 5.6 originally had boost 1.33.1, Thrift 0.6.1 required 1.34.0 for building all tests, so I used boost from source. cd /opt wget http://sourceforge.net/projects/boost/files/boost/1.48.0/boost_1_48_0.tar.gz/download tar -zxvf boost_1_48_0.tar.gz # Ant is needed for compiling against Java as of Thrift 0.8.0, CentOS 6.2, Java 1.6.31. RAWNEWVERSION=`curl -sd "action=ask&query=[[Thrift]]|%3FStable&format=json" http://www.geilthings.com/api.php` NEWVERSION=`echo "$RAWNEWVERSION" | grep -Po '^.*?\K(?<=Stable\":\[\").*?(?=\")'` echo $NEWVERSION cd /opt sudo wget http://apache.lehtivihrea.org/thrift/${NEWVERSION}/thrift-${NEWVERSION}.tar.gz sudo tar -zxvf thrift-${NEWVERSION}.tar.gz cd thrift-${NEWVERSION} # I could not compile it against Ruby since "make" gave errors. # CentOS 5.7: ./configure --with-boost=/opt/boost_1_48_0 --with-c_glib=yes --without-ruby # CentOS 6.2: ./configure --with-c_glib=yes --without-ruby # See below for errors. make make installInstalling Thrift under Ubuntu
- Ubuntu 12.04
- See official documentation: http://thrift.apache.org/docs/install/ubuntu/
sudo apt-get install git-core sudo apt-get install libevent-dev zlib-devel glib2-devel libssl-dev sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libtool pkg-config g++ sudo apt-get install ruby1.8-dev libcommons-lang-java php5-dev sudo apt-get install automake flex bison sudo apt-get install curl sudo apt-get install ruby ruby-full ruby-dev librspec-ruby rake rubygems libdaemons-ruby libgemplugin-ruby mongrel sudo apt-get install python-dev python-twisted sudo apt-get install libbit-vector-perl sudo apt-get install php5-dev php5-cli sudo apt-get install erlang-base erlang-eunit erlang-dev sudo apt-get install golang sudo apt-get install libglib2.0-dev sudo apt-get install ghc6 cabal-install libghc6-binary-dev libghc6-network-dev libghc6-http-dev sudo apt-get install ant RAWNEWVERSION=`curl -sd "action=ask&query=[[Thrift]]|%3FStable&format=json" http://www.geilthings.com/api.php` NEWVERSION=`echo "$RAWNEWVERSION" | grep -Po '^.*?\K(?<=Stable\":\[\").*?(?=\")'` echo $NEWVERSION cd /opt sudo wget http://apache.lehtivihrea.org/thrift/${NEWVERSION}/thrift-${NEWVERSION}.tar.gz sudo tar -zxvf thrift-${NEWVERSION}.tar.gz cd thrift-${NEWVERSION} sudo ./configure --with-c_glib=yes # The file /opt/thrift/config.log can be checked for errors and warnings after running ./configure. sudo make sudo make install sudo ln -s /opt/thrift-${NEWVERSION} /opt/thriftUpgrade Thrift
# Just in case, shut down any thrift-related servers. But this is (October 2012, current versions) actually not needed. # e.g. /opt/hbase/bin/hbase-daemon.sh stop thrift # Check the Requirements, they might have changed: # http://wiki.apache.org/thrift/ThriftRequirements APPNAME=thrift RAWVERSION=`thrift -version` OLDVERSION=${RAWVERSION:15} echo ${OLDVERSION} RAWNEWVERSION=`curl -sd "action=ask&query=[[Thrift]]|%3FStable&format=json" http://www.geilthings.com/api.php` NEWVERSION=`echo "$RAWNEWVERSION" | grep -Po '^.*?\K(?<=Stable\":\[\").*?(?=\")'` echo $NEWVERSION # Download Thrift. cd /opt wget http://apache.lehtivihrea.org/thrift/${NEWVERSION}/thrift-${NEWVERSION}.tar.gz tar -zxvf thrift-${NEWVERSION}.tar.gz cd thrift-${NEWVERSION} # Check that PYTHONHOME is set to the python version that came with the CentOS distribution. # Now configure it: # If the CentOS default "boost" is used, the option --with-boost=/opt/boost_1_48_0 is not needed. # CentOS 5.7: # thrift 0.8.0: # ./configure --with-boost=/opt/boost_1_48_0 --with-c_glib=yes --without-ruby # CentOS 6.2: # thrift 0.8.0: # ./configure --with-c_glib=yes --without-ruby # CentOS 6.3, Thrift 0.9.0, ruby < 1.9.3-p327 (e.g. 1.9.3-p286) ./configure --with-c_glib=yes --with-ruby=no # CentOS 6.3, Thrift 0.9.0, ruby >= 1.9.3-p327 # HURRA, Ruby working with thrift again!!!!!!!!!!!!!!!!!!!! ./configure --with-c_glib=yes # Always "make clean" after finding & correcting some errors in "make", and then "make" again after "make clean". make # make for Thrift 0.8.0 has more undocumented (December 2011) hidden dependencies than Thrift 0.61 or Thrift 0.7; see below for Errors. make install # Check. thrift -version rm -f /opt/thrift ln -s /opt/thrift-${NEWVERSION} /opt/thriftErrors Installing Thrift or Upgrading Thrift
This integer is too big: "9876543210987654321"
(Thrift 0.8.0, Erlang R15B, error after "make")
[WARNING:/opt/thrift-0.8.0/test/BrokenConstants.thrift:20] 64-bit constant "68719476736" may not work in all languages. [ERROR:/opt/thrift-0.8.0/test/BrokenConstants.thrift:21] (last token was '9876543210987654321') This integer is too big: "9876543210987654321"Rebar requires version {1,5} or higher of git to process ./rebar get-deps
(Thrift 0.8.0, Erlang R15B, error after "make")
Rebar requires version {1,5} or higher of git to process ./rebar get-deps ==> erl (get-deps) Pulling jsx from {git,"git://github.com/talentdeficit/jsx.git",{tag,"v0.9.0"}} ERROR: Rebar requires version {1,5} or higher of git to process {git, "git://github.com/talentdeficit/jsx.git", {tag, "v0.9.0"}}
- Solution for Errors 1 and 2: Install git; git x86_64 1.7.4.1 1.el5 can be found in the epel repository (December 2011).
- yum install git
- make clean
- make
Cannot load such file -- spec/rake/spectask
(Thrift 0.8.0, Ruby 1.9.3p0 or p125, error after "make")
cannot load such file -- spec/rake/spectask
- Solution: Found in http://mail-archives.apache.org/mod_mbox/thrift-user/201112.mbox/%3C711A2D82-3A2C-494D-8A9A-797D9115B7D5@apache.org%3E
- (gem install rspec will install rspec2 which does NOT solve the problem)
- gem install rspec -v 1.3.2
- make clean
- make
cannot load such file -- mongrel
(Thrift 0.8.0, Ruby 1.9.3p0 or p125, error after "make") (Thrift 0.9.0, Ruby 1.9.3p286)
/usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mongrel (LoadError)
- Solution: Found in http://mail-archives.apache.org/mod_mbox/thrift-user/201112.mbox/%3C711A2D82-3A2C-494D-8A9A-797D9115B7D5@apache.org%3E
- See also: http://stackoverflow.com/questions/1073841/gem-install-mongrel-fails-with-ruby-1-9-1
- gem install mongrel --pre
- make clean
- make
Can't locate ExtUtils/MakeMaker.pm in @INC
Can't locate ExtUtils/MakeMaker.pm in @INC
- Solution: yum install perl-ExtUtils-MakeMaker
javadoc Could not create the Java virtual machine
(Thrift 0.8.0, Java 1.6.0.30, error after "make install")
[javadoc] Generating Javadoc [javadoc] Javadoc execution [javadoc] Error occurred during initialization of VM [javadoc] Could not reserve enough space for object heap [javadoc] Could not create the Java virtual machine.
- Solution: Shut down some memory consuming services or databases and re-try.
Building Java Library ........ : no
Building Java Library ........ : no
- Solution: Check that the java jdk used is correct and the same as the java runtime environment. Choose the correct one using "sudo update-alternatives --config java". This error can also be seen checking the file /opt/thrift/config.log, the line appears: Exception in thread "main" java.lang.UnsupportedClassVersionError:
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers
(CentOS 6.3 includes 0.13.5)
- Solution: Install re2c (Tool for generating C-based recognizers from regular expressions)
yum install re2cBuilding Perl Library ........ : no
(CentOS 6.3; Solution only tried with perl 5.16.1)
- Solution: Install the perl module Bit::Vector
perlbrew switch perl-5.16.1 cpan install Bit::VectorMessages
0.9.0
thrift 0.9.0 Building C++ Library ......... : yes Building C (GLib) Library .... : yes Building Java Library ........ : yes Building C# Library .......... : no Building Python Library ...... : yes Building Ruby Library ........ : yes Building Haskell Library ..... : no Building Perl Library ........ : yes Building PHP Library ......... : yes Building Erlang Library ...... : yes Building Go Library .......... : no Building D Library ........... : no C++ Library: Build TZlibTransport ...... : yes Build TNonblockingServer .. : yes Build TQTcpServer (Qt) .... : no Java Library: Using javac ............... : javac Using java ................ : java Using ant ................. : /usr/bin/ant Python Library: Using Python .............. : /usr/bin/python PHP Library: Using php-config .......... : /usr/bin/php-config Ruby Library: Using Ruby ................ : /usr/local/bin/ruby Perl Library: Using Perl ................ : /root/perl5/perlbrew/perls/perl-5.16.1/bin/perl Erlang Library: Using erlc ................ : /usr/local/bin/erlc0.8.0
thrift 0.8.0 Building code generators ..... : Building C++ Library ......... : yes Building C (GLib) Library .... : yes Building Java Library ........ : yes Building C# Library .......... : no Building Python Library ...... : yes Building Ruby Library ........ : no Building Haskell Library ..... : no Building Perl Library ........ : yes Building PHP Library ......... : yes Building Erlang Library ...... : yes Building Go Library .......... : no Building TZlibTransport ...... : yes Building TNonblockingServer .. : yes Using javac .................. : javac Using java ................... : java Using ant .................... : /usr/bin/ant Using Python ................. : /usr/bin/python Using php-config ............. : /usr/bin/php-config Using Perl ................... : /usr/bin/perl Using erlc ................... : /usr/local/bin/erlcComments