Hadoop-thrift介紹及應用

一、概述

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):
  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數組。

以上這些接口除了具有複製因子、塊等信息外,與通常的文件操作沒有什麼區別,因此對它們進行再次封裝似乎沒有必要,除非有特殊的要求。
發佈了108 篇原創文章 · 獲贊 57 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章