关闭

thrift介绍及应用(四)—hadoop的thrift接口

222人阅读 评论(0) 收藏 举报
分类:

原文:http://blog.csdn.net/guxch/article/details/12163519

-----------------------------------------------------------------------------------

一、概述

hadoop是目前使用比较多的分布式文件系统,由于hadoop是用Java写的,对非Java程序人员,不好直接使用它的接口,不过它提供了thrift接口服务器,因此也可以采用其他语言来编写hadoop的客户端,本文主要介绍的是它C++客户端的使用。
目前hadoop稳定版是1.2.1,thrift接口文件位于/src/contrib/thriftfs/if/hadoopfs.thrift,启动thrift服务的脚本位于/src/contrib/thriftfs/scripts/start_thrift_server.sh,C++语言文件位于/src/contrib/thriftfs/gen-cpp,包括
hadoopfs_constants.cpp/.h,hadoopfs_types.cpp/.h,ThriftHadoopFileSystem.cpp/.h和ThriftHadoopFileSystem_server.skeleton.cpp七个文件,其中最后一个文件没有用。
hadoopfs.thrift非常简单,包括4个结构,2个异常,19个service函数。以下将分别介绍结构和函数。

二、安装

Hadoop的thrift server是需要安装的。如果下载的是带bin的包,其中thrift server是没有编译到包中的,因此需要下载源代码重新编译。具体的编译过程,可以参考http://blog.csdn.net/jiangheng0535/article/details/12089023,大致要下载ant,ivy,m4,autoconf,automake,libtool,然后用ant来编译。采用文章中描述的步骤,基本上可以成功启动thrift server。开启thrift sever的脚本如下(当然,首先应启动hadoop):
[plain] view plain copy
  1. /src/contrib/thrifts/scripts/start_thrift_server.sh 端口号  
如果不写端口,则侦听端口是随机的,无论哪种情况,注意一下启动的输出,其中有端口号。

三、接口结构

接口结构比较少,如下:

  • ThriftHandle:这个东西相当于文件句柄
  • Pathname:文件路径
  • FileStatus :实际上是文件的各种属性,包括名称、长度、文件/目录、块复制数、块大小,权限属性等。
  • BlockLocation :文件块的属性,包括位置属性,该块在文件中的偏移量,大小等。

四、接口service函数

本文thrift采用的是0.9.1,此时hadoop自带的C++文件中,hadoopfs_types和ThriftHadoopFileSystem会发生编译错误,其中命名空间中的facebook应改为::apache,hadoopfs_types.h中包含文件reflection_limited_types.h应该改为TApplicationException.h,可以看出,此处生成的文件,采用的是老版本的thrift compiler。
  • setInactivityTimeoutPeriod:设置超时时间(s),如果超过此时间,服务器断开。
  • shutdown:断开与服务器的连接
  • create、createFile:这两个是创建文件,并输出文件句柄供写入,后一个函数提供了更多的文件属性参数来控制文件的创建。
  • open:以读写方式打开一个已存在的文件,输出文件句柄供操作。
  • append:以添加方式打开一个已存在的文件,输出为文件句柄。
  • write:向已打开的文件写入数据,返回是否成功。
  • read:向已打开的文件读取数据,与通常文件读取一样,需指定读取位置和读取大小。
  • close:关闭文件
  • rm:删除文件或目录,可以指定是否递归删除目录
  • rename:重新命名文件或目录
  • mkdirs:创建目录
  • exists:检查文件或目录是否存在
  • stat:获取文件或目录的属性,输出的是FileStatus结构。
  • listStatus:如果输入是一个目录,则输出是目录下所有文件的FileStatus结构(数组)
  • chmod:设置文件/目录的权限
  • chown:设置文件/目录的组和所有者
  • setReplication:设置文件的复制因子(多少份)
  • getFileBlockLocations:得到文件的块的信息,输出是BlockLocation数组。

以上这些接口除了具有复制因子、块等信息外,与通常的文件操作没有什么区别,因此对它们进行再次封装似乎没有必要,除非有特殊的要求。


【注】在写本文时,作者下载了hadoop 2.1.0-beta,从源码来看,2.0版的hadoop似乎不再支持thrift了,而换做了Protocol buffer,如果stable版真的如此,再一次暴露开源软件版本之间兼容的问题,太随意了,无语。

0
0
查看评论

thrift介绍及应用(四)—hadoop的thrift接口

一、概述 hadoop是目前使用比较多的分布式文件系统,由于hadoop是用Java写的,对非Java程序人员,不好直接使用它的接口,不过它提供了thrift接口服务器,因此也可以采用其他语言来编写hadoop的客户端,本文主要介绍的是它C++客户端的使用。 目前hadoop稳定版是1.2.1,th...
  • guxch
  • guxch
  • 2013-09-29 16:08
  • 9754

Thrift 接口描述语言说明

1. 本文档大部分内容翻译自文章:“Thrift:The missing Guide“。        Thrift 官方文档方面做得比较差. 我们将不定期更新此文档,  欢迎大家多提建议, 我们随时补充.   &...
  • z69183787
  • z69183787
  • 2016-09-21 11:31
  • 1798

Thrift入门及Java实例

一、概述 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, S...
  • LK10207160511
  • LK10207160511
  • 2016-01-03 11:15
  • 10717

Apache顶级项目介绍9-Thrift

年末最后一弹,我们来简单介绍一下Apache顶级项目Thrift并尝试了解其内部实现机制。 1. Thrift介绍 Thrift最初是由Facebook操刀实现的一个内部项目,主要用于Facebook内部各系统之间的RPC调用。2007年开源,2008年进入Apache孵化器,现在是Ap...
  • ErixHao
  • ErixHao
  • 2016-12-31 11:28
  • 1264

thrift远程调用示例

说明 thrift是apache hadoop的一个子项目,主要是完成跨语言,跨平台的序列化和远程调用。具体的可以参考官方文档: thrift.apache.org 安装 thrift和上次介绍的protobuf一样也需要安装对应的编译器,具体的安装这里不介绍了,可以参考: http://...
  • wutbiao
  • wutbiao
  • 2015-04-13 18:29
  • 3520

Python Thrift示例

Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。本文将从 Python开发人员角度简单介绍 Apache Thrift 的架构、开发和使用。
  • dutsoft
  • dutsoft
  • 2017-05-04 20:16
  • 3170

thrift使用(2):代码生成和接口调用

1. 编写接口thrift namespace java com.wzz.thrift.result struct Result { 1: string result, 2: map value } namespace java com.wzz.thrift...
  • wangzhanzheng
  • wangzhanzheng
  • 2017-04-21 15:12
  • 679

thrift框架简介

Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby...
  • zdxiq000
  • zdxiq000
  • 2015-08-08 10:45
  • 494

一个通过java的接口生成thrift文件的工具

一个通过java的接口生成thrift文件的工具
  • LoveTea99
  • LoveTea99
  • 2016-07-19 11:29
  • 957

Thrift对多接口服务的支持

Thrift对多接口服务的支持       Thrift在0.9.1版本之前,一直只提交了对单一接口服务的支持,即一个RPC服务器(对应一个端口)支持一个服务接口的实现。 但是很多时候,我们的服务不能实现在一个接口里,一是接口里的方法越来越多,不好管理和使用;...
  • hivon
  • hivon
  • 2013-09-14 14:43
  • 19223
    个人资料
    • 访问:554901次
    • 积分:9307
    • 等级:
    • 排名:第2348名
    • 原创:382篇
    • 转载:205篇
    • 译文:0篇
    • 评论:33条