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.pswp.cn/news/539261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539261.shtml
英文地址,請注明出處:http://en.pswp.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預加載需求:有時我們需要實現例如快速快速切換頁面、圖片之類的功能時,能盡快的加載出我們所需的圖片會極大提升用戶體驗,這時用預加載將圖片先緩存到瀏覽器,用戶使用需顯示圖片時無疑會順暢很多。核心:當一個圖片在…