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

转载 2016年08月28日 17:03:04

原文: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版真的如此,再一次暴露开源软件版本之间兼容的问题,太随意了,无语。

相关文章推荐

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

一、概述 hadoop是目前使用比较多的分布式文件系统,由于hadoop是用Java写的,对非Java程序人员,不好直接使用它的接口,不过它提供了thrift接口服务器,因此也可以采用其他语言来编写h...
  • guxch
  • guxch
  • 2013年09月29日 16:08
  • 9457

Hadoop-thrift介绍及应用

一、概述 hadoop是目前使用比较多的分布式文件系统,由于hadoop是用Java写的,对非Java程序人员,不好直接使用它的接口,不过它提供了thrift接口服务器,因此也可以采用其他语言来编写...

thrift介绍及应用(一)—介绍

一、概述         Thrift是Apache下的一个子项目,最早是Facebook的项目,后来Facebook提供给Apache作为开源项目,在官网上,Thrift被描述为“Scalable ...
  • guxch
  • guxch
  • 2013年09月29日 14:30
  • 12347

thrift介绍及应用(一)—介绍

原文:http://blog.csdn.net/guxch/article/details/12157151 一、概述         Thrift是Apache下的一个子项目,最早是Facebo...

thrift介绍及应用(一)—介绍

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

thrift介绍及应用(二)—简单应用

原文:http://blog.csdn.net/guxch/article/details/12162131 六、一个最简单的实例 Thrift文件(demo.thirft,来自官网)如下...

Thrift介绍与应用(三)—hbase的thrift接口

一、概述 Hbase是目前比较火的列存储数据库,由于Hbase是用Java写的,因此它原生地提供了Java接口,对非Java程序人员,怎么办呢?幸好它提供了thrift接口服务器,因此也可以采用其他...
  • guxch
  • guxch
  • 2013年09月29日 14:43
  • 35721

thrift介绍及应用(二)—简单应用

【接上文“thrift介绍及应用(一)—介绍”】 六、一个最简单的实例 Thrift文件(demo.thirft,来自官网)如下: struct UserProfile { 1:i32 ...
  • guxch
  • guxch
  • 2013年09月29日 14:30
  • 4011

Thrift应用实践—基本篇

Thrift作为一个RPC框架,很好的解决了跨语言调用问题,并提供灵活高效的传输方式和Server模式。在实际应用中,个人认为Thrift更多的是用于系统的解耦,负责模块间的通信,使各模块可以独立开发...

微服务框架Finagle介绍 Part3: 在Finagle中开发基于Thrift协议的应用

原文地址:http://skaka.me/blog/2016/05/02/finagle3/ 在上篇文章中我们开发了一个基于Http协议的echo服务端和客户端. 这篇文章我们将开发一个基于Thr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:thrift介绍及应用(四)—hadoop的thrift接口
举报原因:
原因补充:

(最多只允许输入30个字)