Thrift介紹與應用(三)—hbase的thrift接口

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

-----------------------------------------------------------------------------------

一、概述

Hbase是目前比較火的列存儲數據庫,由于Hbase是用Java寫的,因此它原生地提供了Java接口,對非Java程序人員,怎么辦呢?幸好它提供了thrift接口服務器,因此也可以采用其他語言來編寫Hbase的客戶端,本文即是Hbase C++接口的介紹。
目前的Hbase(0.94.11,本文即基于此版本)有兩套thrift接口(可以叫thrift1和thrift2),它們并不兼容(隨意性太強,這可能是所有開源軟件都具有的問題)。根據官方文檔,thrift1很可能被拋棄,但網上的文章基本是介紹thrift1的,本文則主要介紹thrift2。
要使用Hbase的thrift接口,必須將它的服務啟動,命令行為:
[plain]?view plaincopy
  1. hbase-deamon.sh?start?thrift2??
thrift默認的監聽端口是9090,可以用netstat -nl | grep 9090看看該端口是否有服務。

二、thrift1與thrift2的簡單比較

兩個版本的thrift文件位于如下位置,
[plain]?view plaincopy
  1. src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift??
  2. src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift??

thrift1的文件有24K左右,而thrift2只有12K左右,看來新版做了大量的簡化。
命名空間上,新版都將thrift改為thrift2,以示區別。下表是thrift和thrift2的區別,可以看出,二者真的差別挺大,特別是服務中的方法,thrift2做了簡化與合成,并把DDL有關的內容去掉了,關于這些結構、服務的具體意義,請參閱thrift文件中的注釋,下文將詳細列出。

?

Thrift

Thrift2

結構

struct TCell

struct ColumnDescriptor

struct TRegionInfo

struct Mutation

struct BatchMutation

struct TIncrement

struct TColumn

struct TRowResult

struct TScan

struct TTimeRange

struct TColumn

struct TColumnValue

struct TColumnIncrement

struct TResult

struct TGet

struct TPut

struct TDelete

struct TIncrement

struct TScan

struct TRowMutations

異常

exception IOError

exception IllegalArgument

exception AlreadyExists

exception TIOError

exception TIllegalArgument

其他

?

union TMutation

enum TDeleteType

enum TDurability

服務

名稱為:Hbase

void enableTable()

void disableTable()

bool isTableEnabled()

void compact()

void majorCompact()

list<Text> getTableNames()

map<Text,ColumnDescriptor> getColumnDescriptors()

list<TRegionInfo> getTableRegions()

void createTable()

void deleteTable()

list<TCell> get()

list<TCell> getVer()

list<TCell> getVerTs()

list<TRowResult> getRow()

list<TRowResult> getRowWithColumns()

list<TRowResult> getRowTs()

list<TRowResult> getRowWithColumnsTs()

list<TRowResult> getRows()

list<TRowResult> getRowsWithColumns()

list<TRowResult> getRowsTs()

list<TRowResult> getRowsWithColumnsTs()

void mutateRow()

void mutateRowTs()

void mutateRows()

void mutateRowsTs()

i64 atomicIncrement()

void deleteAll()

void deleteAllTs()

void deleteAllRow()

void increment()

void incrementRows()

void deleteAllRowTs()

ScannerID scannerOpenWithScan()

ScannerID scannerOpen()

ScannerID scannerOpenWithStop()

ScannerID scannerOpenWithPrefix()

ScannerID scannerOpenTs()

ScannerID scannerOpenWithStopTs()

list<TRowResult> scannerGet()

list<TRowResult> scannerGetList()

void scannerClose()

list<TCell> getRowOrBefore()

TRegionInfo getRegionInfo()

名稱為:THBaseService

bool exists(...)

TResult get(...)

list<TResult> getMultiple(...)

void put(...)

bool checkAndPut(...)

void putMultiple(...)

void deleteSingle(...)

list<TDelete> deleteMultiple(...)

bool checkAndDelete(...)

TResult increment(...)

i32 openScanner(...)

list<TResult> getScannerRows(...)

void closeScanner(...)

void mutateRow(...)

list<TResult> getScannerResults(...)


三、thrift2接口客戶端生成文件

包含6個文件hbase_constants.cpp/.h、 hbase_types.cpp/.h、THBaseService.cpp/.h,結構的定義都在hbase_types中,服務方法的實現在THBaseService中(關于這幾個文件的詳細說明,見作者其他博文)。由于我們通常關心數據的查、增、刪(對Hbase來說,改是增加一個新“版本”),因此下面的討論只圍繞這些操作展開。

四、thrift2接口主要結構


以下是主要涉及的結構及其意義。

  • TColumn 對列的封裝
  • TColumnValue? 對列及其值的封裝
  • TResult? 對單行(Row)及其查詢結果(若干colunmvalue)的封裝
  • TGet? 對查詢一行(row)的封裝,可以設置行內的查詢條件
  • TPut? 與TGet一樣,只是它是寫入若干“列”
  • TDelete? 與TGet一樣,只是它是刪除若干“列”
  • TScan 對查詢多行和多列的封裝,有點類似于“cursor”
  • TRowMutations 實際上是若干個TDelete和TPut的集合,完成對一行內數據的“原子”操作

五、thrift2接口service函數

1.?? ?查數據

Service中有關查數據的函數如下:

  • get:對某一行內的查詢,輸入是表名、TGet結構,輸出是TResult
  • getMultiple:實際上是對get的擴展,輸入是表名、TGet數組,輸出是TResult數組
  • openScanner、getScannerRows、closeScanner:這三個連在一起使用,類似于”cursor”,由openScanner打開一個scanner,getScannerRows從這個打開的scanner順序得到若干行(也就是一個TResult數組,行數可指定),得不到數據行后可認為已讀完,最后用closeScanner關閉這個scanner。查詢的條件由TScan封裝,在打開時傳入。需要注意的是每次取數據的行數要合適,否則有效率問題。

2.?? ?增數據

Service中有關添加數據的函數如下:

  • put:對某一行內增加若干列,輸入是表名,TPut結構
  • putMultiple:對put的擴展,一次增加若干行內的若個列,輸入是表名、TPut數組
  • checkAndPut:這個函數比較有意思,它提供了一種“原子”操作的概念,當傳入的(表名+列族名+列名+數據)都存在于數據庫時,才做操作,返回true,否則不做任何操作而返回false。可以看出,Hbase內部實現這個操作時肯定是加鎖的。它使用的場合如下:某時刻一個用戶取得了某個值,以后只有在確保沒有其他人操作該值的情況下才能進行更新。

3.?? ?刪數據

Service中有關刪除數據的函數如下:deleteSingle,deleteMultiple,checkAndDelete,這三個與上面的put函數類似,不再論述。

4.?? ?其他

Service中其他的函數如下:

  • exists:檢查表內是否存在某行或某行內某些列,輸入是表名、TGet,輸出是bool
  • mutateRow:將某行內若干put和delete操作集合起來,形成一個“原子”操作。輸入是表名、TRowMutations結構。
  • increment:增加一行內某些列的值,這個操作比較特別,是專門用于計數的,也保證了“原子”操作特性。


需要注意的是,以上大部分函數都是void,如果操作發生錯誤,thrift的做法是拋出異常,因此進行操作時應有異常捕獲處理。


thrift2接口比較簡單明了,當然,實際使用時,會進行或多或少的再次封裝,以適應自己的應用需要,對該接口的再次封裝,這里不在討論。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539266.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux/Unix 新手和專家教程

你正在找一些高質量的Linux 和 UNIX 的教程嗎&#xff1f;如果是&#xff0c;這篇文章會告訴你到哪去找到這些教程。這里我們將給出超過30個相當的不錯的 Linux 和 UNIX 在線的教程。 需要大家注意的是&#xff0c;他們都是英文的&#xff0c;也許有一些也經被翻譯到了中文社區…

自動ip的計算機共享打印,局域網內自動獲取ip地址怎么設置打印機共享文件夾...

在局域網環境中,為了盡可能地節省辦公成本,很多用戶都會選擇在局域網中架設、部署共享打印機,以便在單位的任何角落處都能方便、自如地進行打印操作。下面是學習啦小編為大家整理的關于局域網內自動獲取ip地址怎么設置打印機共享文件夾&#xff0c;一起來看看吧!局域網內自動獲…

高級數據分析1代碼_用Python進行數據分析,讓你一看就會

本書詳細介紹利用Python進行操作、處理、清洗和規整數據等方面的具體細節和基本要點。雖然本書的標題是“數據分析”&#xff0c;重點卻是Python編程、庫&#xff0c;以及用于數據分析的工具。第1章 準備工作第2章 Python語法基礎&#xff0c;IPython和Jupyter Notebooks第3章 …

工期日歷天計算器_天津實地告訴你:房建項目是怎樣保節點,搶工期的?

工程概況天津實地薔薇花園住宅地塊項目共計由24棟單體住宅、2棟配建及地下人防車庫組成&#xff0c;其中12層小高層4棟、13層小高層1棟、19棟7層洋房。總建建筑面積為139348.62㎡&#xff0c;地上99348㎡&#xff0c;地下40000㎡&#xff0c;人防面積為14236㎡。工期目標項目施…

thrift介紹及應用(四)—hadoop的thrift接口

原文&#xff1a;http://blog.csdn.net/guxch/article/details/12163519 ----------------------------------------------------------------------------------- 一、概述 hadoop是目前使用比較多的分布式文件系統&#xff0c;由于hadoop是用Java寫的&#xff0c;對非Java程…

遲到的年度總結,我們應該收放自如

現在已經2018年3月了&#xff0c;這篇2017的年度總結顯得晚了一點&#xff0c;但意義非凡&#xff0c;讓我有了更多的反省和思考&#xff0c;我相信大家讀完一定會有收獲。好了&#xff0c;廢話不多說進入主題。別用學習來逃避成長這話說的簡直是屁話&#xff0c;不是學習才會成…

測試fps游戲反應速度軟件,FPS反應速度提速

靜謐無聲&#xff0c;生死一瞬&#xff0c;說的就是FPS游戲&#xff0c;沒有哪一個種類的游戲可以比擬我們FPS玩家對于反應速度的追求&#xff0c;更快更準哪怕提速只是1毫秒&#xff0c;無數高手之所以為高手就是因為他們可以打出我們看起來不可能完成的擊殺&#xff0c;特別是…

html5中單選框被選中把值傳給后臺_HTML5的表單設計

使用過Delphi的程序員&#xff0c;對Form這個詞應該比較熟悉。在Delphi中&#xff0c;Form被翻譯為“界面、窗口”&#xff0c;作用是&#xff1a;為用戶提供界面&#xff0c;供用戶輸入信息&#xff0c;向用戶展示處理結果。HTML5中也有Form&#xff0c;功能與Delphi中的Form差…

python科赫曲線繪制正方形_Python數據處理從零開始----第四章(可視化)(14)使用seaborn繪制熱圖...

目錄 Python數據處理從零開始----第四章&#xff08;可視化&#xff09;①③多變量繪圖 Python數據處理從零開始----第四章&#xff08;可視化&#xff09;&#xff08;14&#xff09;使用seaborn繪制熱圖 seaborn.heatmapHeat maps顯示數字表格數據&#xff0c;其中單元格根據…

Hive的系統架構

一、架構圖 二、各組件 用戶接口&#xff1a;包括 CLI&#xff08;控制臺命令&#xff09;&#xff0c;JDBC/ODBC&#xff0c;WebUI。 CLI&#xff0c;即Shell命令行 JDBC/ODBC 是 Hive 的Java&#xff0c;與使用傳統數據庫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軟件打開模型時&#xff0c;不能顯示坐標軸的x、y、z方向&#xff0c;這個問題對建模有很大的影響。本文是蘭州交通大學陳龍同學提供的解決方法&#xff0c;供大家參考。使用Simpack軟件建模時&#xff0c;會遇到這種情況&#xff1a;比如要創建標記點時&…

th:text為null報錯_為vue3.0的學習TS解讀高級類型

知識點摘要本節課主要關鍵詞為: 自動類型推斷 / 類型斷言 / 類型別名(type) / 映射類型(Pick/Record等...) / 條件類型(extends) / 類型推斷(infer)自動類型推斷(不用你標類型了,ts自己猜)大家現在寫ts的時候一定會在每個變量后面都加上類型吧? 但是?現在告訴大家有些情況下你…

Hive與Hadoop的調用關系

一、調用圖 二、步驟解析 1、提交sql 交給驅動 2、驅動編譯&#xff1a;解析相關的字段表信息 3、去metastore查詢相關的信息 返回字段表信息 4、編譯返回信息 發給驅動 5、驅動發送一個執行計劃 交給執行引擎 6、執行計劃 6.1、DDLs 對數據庫表的操作的 直接和metastore交互 …

shell發送郵件函數

#發送郵件函數function send_mail(){ #定義郵件發送列表 maillist( zhengwei.liuxxx xiaogang.yangxxx sundy.shexxx ) #根據不同的函數參數&#xff0c;發送不同的郵件 if [ "$1" "gateway" ];thenfor mail in ${maillist[*]};doecho "無法ping通網…

列主元消去法例題詳解_高斯列主元消元法解方程組的步驟

高斯列主元消元法求解線性方程組AXb的簡要步驟??????????????????????????????????????nnnnnnnnbbbxxxaaaaaaaaa?????????2121212222111211方法說明(以4階為例)&#xff1a;?第1步消元——在增廣矩陣(A&#xff0c;b)第一列中…

Hive的使用之控制臺

啟動方式 1、如果將hive的bin&#xff08;/home/hive2.1/bin&#xff09;配置了環境變量&#xff0c;則輸入&#xff1a;hive。 2、 #hive --service cli 啟動 退出方式 1、hive>quit; 2、ctrlc 實例 ---------hivesql兼容大部分sql------- hive>show tables; hiv…

簡述計算機文件的命名辦法,如何進行文件命名-如何進行文件管理

如何進行文件命名-如何進行文件管理電腦的管理事實上就是文件和文件夾的管理。想要我們的電腦干凈整齊&#xff0c;就需要我們正確的進行文件管理。我們知道了文件和文件夾的概念之后&#xff0c;現在我們再來看看單獨的文件&#xff0c;認識一下文件的構成以及文件命名和命名規…

網頁加載出現沒有合適的負載均衡器_分布式必知必會-七層負載和四層負載到底是什么?...

背景我們在使用負載均衡器的時候&#xff0c;往往會聽到七層負載或四層負載這兩個名詞&#xff0c;許多負載均衡軟件提供的方式也不同&#xff0c;那么七層和四層區別在哪呢&#xff1f;為什么有的支持有的不支持呢&#xff1f;負載均衡簡介負載均衡建立在現有網絡結構之上&…