用gcc编译基于avro的c程序
在《Hadoop权威指南》第4章有一个用avro来实现不同语言间的数据交换(互操作)(见该书的4.4.4节)。在这个过程中,会通过Python来生成一个avro文件,然后再用c语言来读取该文件的内容。下面分别介绍这两方面的内容。
一、用Python来生成一个avro文件
具体操作步骤如下:
(1)下载 http://apache.fayea.com/avro/stable/py/avro-1.7.7.tar.gz
(2) 将avro-1.7.7.tar.gz传到linux下,用下面的命令解压:
tar zxvf avro-1.7.7.tar.gz
(3) 进入解压的目录,并安装这个包
cd avro-1.7.7
python setup.py install
(4) 将该书提供的源代码write_pairs.py传到linux上,并执行
python write_pairs.py pairs.avro
用户可输入如下内容,并按ctrl+d退出
a,1
c,2
b,3
b,2
这样就会得到一个名为pairs.avro的二进制文件。可用下面的方式查看该二进制文件中的字符串:
strings pairs.avro
会得到如下结果:
avro.schema
{"fields": [{"type": "string", "name": "left"}, {"type": "string", "name": "right"}], "type": "record", "name": "StringPair", "doc": "A pair of strings."}
avro.codec
null
二、用c语言来读到pairs.avro
具体操作步骤如下:
(1)下载 http://apache.fayea.com/avro/stable/c/avro-c-1.7.7.tar.gz
(2) 将avro-c-1.7.7.tar.gz传到linux下,用下面的命令解压:
tar zxvf avro-c-1.7.7.tar.gz
(3) 由于编译时需要用到cmake,需先到https://cmake.org/files/v3.4/cmake-3.4.0-rc2.tar.gz。
然后解压
tar zxvf cmake-3.4.0-rc2.tar.gz
cmake解压即可,不需要安装。为了在任何目录下能使用cmake,可将cmake的执行路径加到~/.bash_profile中的PATH环境变量中,比如笔者的PATH环境变量增加了cmake的执行路径后为这样:
PATH=$PATH:$HOME/bin:/root/hadoop/cmake3.4/bin
(4) 进入avro-c-1.7.7目录,并安装这个包
cd avro-c-1.7.7
然后执行下面这个shell脚下本
./cmake_avrolib.sh
注意,正确执行需要保证安装了gcc。若Linux上没有安装Linux,可参照http://blog.csdn.net/vah101/article/details/17677451来进行安装。
(5)将书中提供的源码dump_pairs.c传到linux下,然后按下面的命令进行编译。
gcc -I /root/hadoop/avro-c-1.7.7/build/avrolib/include/ -L/root/hadoop/avro-c-1.7.7/build/avrolib/lib -lavro -o dump_pairs dump_pairs.c
注意,在笔者的机器上,avro-c的库是安装在/root/hadoop/avro-c-1.7.7/build/avrolib目录,在读者在编译时需根据自己的安装路径来修改相应库的路径。参数-l为要链接的库的名称,-lavro表示要链接-llibavro.so,前面的lib和后缀名都由gcc来自动加上,不应用由用户指定。
(6)执行生成的可执行文件 dump_pairs
./dump_pairs pairs.avro
其结果为:
a,1
c,2
b,3
b,2
浙公网安备 33010602011771号