原文: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 plaincopy
  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接口相关推荐

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

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

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

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

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

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

  4. 由浅入深了解Thrift(一)——Thrift介绍与用法

    相关示例代码见:http://download.csdn.net/detail/hjx_1000/8374829 一.  Thrift简单介绍 1.1.  Thrift是什么?能做什么? Thrift ...

  5. Thrift介绍以及Java中使用Thrift实现RPC示例

    场景 Thrift Thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++, Java, Python,PHP, Ruby, Erlang,Perl ...

  6. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25

    Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...

  7. Hbase教程(四) Hbase数据库JavaAPI接口

    Hbase教程(四) Hbase数据库JavaAPI接口 Hbase是一个分布式的.面向列的开源数据库,HDFS文件操作常有两种方式,一种是命令行方式,即Hbase提供了一套与Linux文件命令类似的 ...

  8. lambda表达式的五种写法 四大内置函数式接口

    /*Lambda表达式作用: 简化匿名内部类对象使用前提: 函数式接口函数式接口: 只有一个必须被重写的抽象方法的接口称为函数式接口检查函数式接口注解: @FunctionalInterface 强制 ...

  9. Apache Thrift 介绍

    一 点睛 Thrift 是一歀基于 CS 架构的 RPC 框架,最初由 Facebook 研发,2008 年转入 Apache 组织.开发人员可以使用 Thrift 提供的 IDL(接口定义语言)来定 ...

最新文章

  1. JS跨域访问(ajax跨域)
  2. SQL---JDBC基础6步
  3. python列表元组字典相互转化_python中字典元组和列表的互相转化
  4. 帮助别人是一种快乐!
  5. myeclipse开发代码颜色搭配保护视力
  6. aba问题mysql_面试题总结:可能是全网最好的MySQL重要知识点
  7. 【今日CV 视觉论文速览】15 Nov 2018
  8. CVPR 2021 | 超越卷积,自注意力模型HaloNet
  9. vue基础----用vue来展示表格数据
  10. android百度经纬度转gps坐标,GPS经纬度怎么转百度经纬度
  11. linux live下载地址,Clonezilla Live 2.4.5-20 发布下载
  12. 【Java】文件管理器
  13. wx.createSelectorQuery() 获取节点信息 获取不到解决方法
  14. 谷歌退出中国声明全文(中英对照版)A new approach to China
  15. Android 学习论坛博客及网站推荐 1
  16. 能上QQ但不能上网问题精解
  17. vscode实用快捷键查找和替换
  18. 深度学习图像视频压缩技术
  19. 随机过程 Brown 运动(上)
  20. win7 系统增加自定义分辨率_【文献转载】GT5000便携式多参数土壤呼吸测量系统用于冬小麦田间土壤氧化亚氮释放量的测量...

热门文章

  1. 数据中心 PUE 优化模型生成服务:AI 浪潮下的数据中心的省钱攻略,就用这几招
  2. CMake常用命令整理
  3. 阴阳师师徒系统不同服务器,阴阳师体服师徒系统未收录改为随机SSR
  4. java++记录+运行_记录java+testng运行selenium(三)---xml、ini、excel、日志等配置
  5. 大整数算术求值 c语言 栈,用C语言实现 多位整数的四则运算,用栈,例如56*(12+20)-102/2...
  6. java 签名 ecdsa_Java实现ECDSA签名算法
  7. viewpage 去掉左右切换效果_ViewPager实现多页面切换以及动画效果
  8. Being a Good Boy in Spring Festival【博弈】
  9. accept和select的区别
  10. Insql 1.8.2 发布,轻量级 .NET ORM 类库