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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迟到的年度总结,我们应该收放自如

现在已经2018年3月了,这篇2017的年度总结显得晚了一点,但意义非凡,让我有了更多的反省和思考,我相信大家读完一定会有收获。好了,废话不多说进入主题。别用学习来逃避成长这话说的简直是屁话,不是学习才会成…

测试fps游戏反应速度软件,FPS反应速度提速

静谧无声,生死一瞬,说的就是FPS游戏,没有哪一个种类的游戏可以比拟我们FPS玩家对于反应速度的追求,更快更准哪怕提速只是1毫秒,无数高手之所以为高手就是因为他们可以打出我们看起来不可能完成的击杀,特别是…

html5中单选框被选中把值传给后台_HTML5的表单设计

使用过Delphi的程序员,对Form这个词应该比较熟悉。在Delphi中,Form被翻译为“界面、窗口”,作用是:为用户提供界面,供用户输入信息,向用户展示处理结果。HTML5中也有Form,功能与Delphi中的Form差…

python科赫曲线绘制正方形_Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图...

目录 Python数据处理从零开始----第四章(可视化)①③多变量绘图 Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图 seaborn.heatmapHeat maps显示数字表格数据,其中单元格根据…

Hive的系统架构

一、架构图 二、各组件 用户接口:包括 CLI(控制台命令),JDBC/ODBC,WebUI。 CLI,即Shell命令行 JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似 WebGUI是通过浏览器访问 Hive --…

8266获取网络时间

8266获取网络时间 今天第一次用阿里的博客写点东西感受一下....sntp.sync("ntp1.aliyun.com",function()print("sync succeeded")end,function(index)print("failed : "..index)end)用的SNTP 然后打印时间 time rtctime.epoch2cal(rtctime.get(…

重庆高考计算机分数线,重庆高考历年分数线

2019年一、普通文理类(一) 文史类本科第一批 545分本科第二批 458分高职专科批 180分(二) 理工类本科第一批 525分本科第二批 435分高职专科批 180分二、艺术类(一)本科批1.美术类 336分2.音乐类(1)音乐学 359分(2)音乐表演(声乐、钢琴、器乐) 275分3.编导类 430分4.影视类(1)表…

坐标不显示_Simpack不显示坐标轴方向的解决方法

经常有用户咨询Simpack软件打开模型时,不能显示坐标轴的x、y、z方向,这个问题对建模有很大的影响。本文是兰州交通大学陈龙同学提供的解决方法,供大家参考。使用Simpack软件建模时,会遇到这种情况:比如要创建标记点时&…

th:text为null报错_为vue3.0的学习TS解读高级类型

知识点摘要本节课主要关键词为: 自动类型推断 / 类型断言 / 类型别名(type) / 映射类型(Pick/Record等...) / 条件类型(extends) / 类型推断(infer)自动类型推断(不用你标类型了,ts自己猜)大家现在写ts的时候一定会在每个变量后面都加上类型吧? 但是?现在告诉大家有些情况下你…

Hive与Hadoop的调用关系

一、调用图 二、步骤解析 1、提交sql 交给驱动 2、驱动编译:解析相关的字段表信息 3、去metastore查询相关的信息 返回字段表信息 4、编译返回信息 发给驱动 5、驱动发送一个执行计划 交给执行引擎 6、执行计划 6.1、DDLs 对数据库表的操作的 直接和metastore交互 …

shell发送邮件函数

#发送邮件函数function send_mail(){ #定义邮件发送列表 maillist( zhengwei.liuxxx xiaogang.yangxxx sundy.shexxx ) #根据不同的函数参数,发送不同的邮件 if [ "$1" "gateway" ];thenfor mail in ${maillist[*]};doecho "无法ping通网…

列主元消去法例题详解_高斯列主元消元法解方程组的步骤

高斯列主元消元法求解线性方程组AXb的简要步骤nnnnnnnnbbbxxxaaaaaaaaa2121212222111211方法说明(以4阶为例):第1步消元——在增广矩阵(A,b)第一列中…

Hive的使用之控制台

启动方式 1、如果将hive的bin(/home/hive2.1/bin)配置了环境变量,则输入:hive。 2、 #hive --service cli 启动 退出方式 1、hive>quit; 2、ctrlc 实例 ---------hivesql兼容大部分sql------- hive>show tables; hiv…

简述计算机文件的命名办法,如何进行文件命名-如何进行文件管理

如何进行文件命名-如何进行文件管理电脑的管理事实上就是文件和文件夹的管理。想要我们的电脑干净整齐,就需要我们正确的进行文件管理。我们知道了文件和文件夹的概念之后,现在我们再来看看单独的文件,认识一下文件的构成以及文件命名和命名规…

网页加载出现没有合适的负载均衡器_分布式必知必会-七层负载和四层负载到底是什么?...

背景我们在使用负载均衡器的时候,往往会听到七层负载或四层负载这两个名词,许多负载均衡软件提供的方式也不同,那么七层和四层区别在哪呢?为什么有的支持有的不支持呢?负载均衡简介负载均衡建立在现有网络结构之上&…

博弈论 斯坦福game theory stanford week 3.2_

title: 博弈论 斯坦福game theory stanford week 3-1 tags: note notebook: 6- 英文课程-15-game theory --- 博弈论 斯坦福game theory stanford week 3-1 习题 第 1 个问题 We say that a game is dominance solvable, if iterative deletion of strictly dominated strategi…

redis 值字符串前面部分乱码_redis key乱码

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":9,"count":9}]},"card":[{"des":"兼容Redis协议标准的、提供持久化的内存数据…

Hive的使用之脚本文件

好处 在实际开发中,遇到复杂的hivesql,在文件里先写好再执行,比直接在控制台写更高效,纠错,修改更方便,也易于后期维护。 [hadoophello110 ~]$ 模式 在hive没有启动的时候,非hive内&#xff0c…

nestjs swagger文档调用需要鉴权的接口

目标 nestjs经常需要设置一些鉴权(登录后)才能访问的接口,但是生成的swagger文档可以发起接口请求,文档发起的请求默认是不携带登录token的,所以需要移除swagger文档发起请求的守卫拦截。 nestjs守卫拦截设置见另一篇…

ajax预加载html seo,前端性能优化 — JS预加载和懒加载

JS预加载需求:有时我们需要实现例如快速快速切换页面、图片之类的功能时,能尽快的加载出我们所需的图片会极大提升用户体验,这时用预加载将图片先缓存到浏览器,用户使用需显示图片时无疑会顺畅很多。核心:当一个图片在…