Hbase王國游記之:Hbase客戶端API初體驗

来源:https://www.cnblogs.com/lixinjie/archive/2019/01/03/first-experience-of-java-client-api-for-hbase.html
-Advertisement-
Play Games

§歷史回顧 2018年歲末,李大胖朦朧中上了開往Hbase王國的車,伴著一聲長鳴,列出緩緩駛出站臺,奔向無垠的廣袤。 (圖片來自於網路) 如不熟悉劇情的,可觀看文章: 五分鐘輕鬆瞭解Hbase列式存儲 Hbase給初學者的“下馬威” §生逢其時 隨著改革開放的持續推進,移動互聯網的長足發展,以及物聯 ...


§歷史回顧

2018年歲末,李大胖朦朧中上了開往
Hbase王國的車,伴著一聲長鳴,列出緩緩駛出站臺,奔向無垠的廣袤


(圖片來自於網路)

如不熟悉劇情的,可觀看文章:

五分鐘輕鬆瞭解Hbase列式存儲

Hbase給初學者的“下馬威”


§生逢其時

隨著改革開放的持續推進,
移動互聯網的長足發展以及物聯網出現,舊有體制下的一些東西已經不能很好的適應發展的需要,無論是壁壘森嚴且高冷的Oracle,亦或是左右逢源並可愛的MySQL,都表現出了心有餘而力不足。

俗話說,一代天子一朝臣,代代都有追夢人。
Hbase無疑是當下最璀璨的星光之一,照耀著九州大地。

Hbase秉持的原則就是,
以時間為朋友,打不過別人,卻可以熬死對手,剩下來的就是歷史的王者,這就是所謂的“剩者為王”。依靠著這個戰略方針,Hbase漸漸地建立了自己的王國

§建國之初

Hbase王國雖然稚嫩,卻受上帝青睞。背靠高山,面朝大海,風光秀麗,易守難攻。兵家必爭之寶地,旅游度假的好去處。無奈國土初建,人煙稀少,
急需大量補充子民,大量開墾良田。

這可使國王Hbase有點犯愁,於是大臣們紛紛獻計獻策。其中
Zookeeper大臣道:雖然已經下發了鼓勵多生孩子的條文,但畢竟遠水不解近渴。依微臣之愚見,當下行之有效的方法就是游說其它國家的子民,把他們睡服,讓他們入伙。國王點了點頭道:那就依了愛卿吧。

§改革開放

Zookeeper大臣拿到國王的授權後,開始制定一系列
方案方針,並親自督導實施落地

國內方面,掀起一場學習熱潮,人人參與,集中講解,分組討論,逐個答疑,共同提高。

國際方面,24小時開門迎客,落地免簽,食宿優惠,門票免費。對於願意加入我們的,只要簡單審核即可發放綠卡。

此消息一齣,各國游人
蜂擁而至,當然也包括誤打誤撞的李大胖。

§墨守陳規

街上有很多來自各個國家的游客,邊走邊看。轉過一個路口,前面聚集了一些人,於是大家都跟著湊上去,一探究竟。

原來是一個Hbase王國老者準備給這些游客講解Hbase相關知識。老者穿著
運動鞋/牛仔褲/圓領T恤頭髮幾乎快沒了還戴著一副眼鏡。一看就是大神級別的大牛,就叫他道哥吧。道哥環顧四周,發現人已經很多了,於是開始了講解。

Hbase是使用Java寫的,所以自然提供了一套Java API來操作Hbase,今天就學習如何使用它。

以下是非常老套的流程(可跳過)

引入
Maven依賴

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-shaded-client</artifactId>
    <version>${hbase.version}</version>
</dependency>


獲取鏈接Connection)。此時需要配置一些參數,如IP/埠/超時時間等,一般都會有一個配置對象(HBaseConfiguration)來完成這個工作。由於鏈接的創建較為複雜,所以一般由鏈接工廠(ConnectionFactory)負責創建。由於鏈接的創建涉及網路操作較為耗時,頻繁創建並不經濟划算,所以一般都會緩存起來以便復用,此時就要求這個鏈接對象是線程安全的。這些都已經是套路了,大家儘管放心吧。

@Bean
public 
Connection connection() throws IOException {
    org.apache.hadoop.conf.
Configuration conf = HBaseConfiguration.create();
    conf.set("hbase.zookeeper.quorum", hbaseProperties.getZookeeper().getQuorum());
    conf.set("hbase.rpc.timeout", hbaseProperties.getRpc().getTimeout().toString());
    conf.set("hbase.rpc.read.timeout", hbaseProperties.getRpc().getReadTimeout().toString());
    conf.set("hbase.rpc.write.timeout", hbaseProperties.getRpc().getWriteTimeout().toString());
    conf.set("hbase.client.operation.timeout", hbaseProperties.getClient().getOperationTimeout().toString());
    conf.set("hbase.client.scanner.timeout.period", hbaseProperties.getClient().getScannerTimeoutPeriod().toString());
    return 
ConnectionFactory.createConnection(conf);
}


DDL相關操作。此時需要從Connection里獲取一個Admin對象,來執行一些和表相關的操作。這個Admin自然是非線程安全的,不能緩存,且使用完要記得關閉(close)。

DML相關操作。此時需要從Connection里獲取一個Table對象,來執行一些和數據相關的操作,很顯然,Table的特點和Admin是一樣的。

眾人看完後,不由得感慨,這果然已經是一個非常標準的分散式軟體客戶端的套路模板了。

§命名空間

道哥繼續道,Hbase引入了
命名空間的概念,與我們在其它地方見到的命名空間其實大概意思差不多。
它表示
若幹個相似表的一個邏輯分組。基於它可以實現一些面向多租戶的特性,如:
1、
配額管理,限制一個命名空間可以使用的資源量
2、
安全管理,為租戶提供另一個級別的安全管理
3、
物理伺服器分組,可以把一個命名空間需要的資源固定在若幹個指定伺服器上,保證一個粗粒度級別的隔離

道哥補充道,其實命名空間就相當於一個群組,便於從不同的方面進行管理。

每個系統都會預留一些東西供自己使用,或在特殊情況下使用。當然,這也是套路了,最明顯的如編程語言中的
關鍵字。Hbase也不例外,它有兩個預定義的特殊命名空間:
hbase,系統命名空間,用來包含Hbase內部使用的表
default,預設命名空間,用來在沒有顯式指定命名空間時使用

最後,瀏覽一下關於命名空間的API:

//列出所有
admin.listNamespaceDescriptors();
//查詢
admin.getNamespaceDescriptor(name);
//創建
admin.createNamespace(namespaceDescriptor);
//修改
admin.modifyNamespace(namespaceDescriptor);
//刪除
admin.deleteNamespace(name);


命名空間

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 登陸及查看: 常用數據類型: ...
  • 一、先到Oracle網站下載Instant Client 下載地址:http://www.oracle.com/technetwork/cn/database/features/instant client/index 092699 zhs.html 根據你的操作系統選擇不同的Instant Cli ...
  • 關鍵字的個數等於路的個數減1。 一個二叉樹節點可以存儲4kb大小的數據,假如關鍵字是整型的一個關鍵字占用4byte,其他數據冗餘4個位元組 4 kb = 4*1024 byte = 4096 byte。 4096/8 = 512 也就是說一個節點中可以存儲512個關鍵字。 多路平衡查找樹如何保證絕對的 ...
  • 一、創建表空間 在導入 dmp 文件之前,你要在資料庫裡面給它分配一片存儲它的地方(表空間)。 如果我們知道需要導入的資料庫的表空間直接創建就可以,如果不不知道,也沒有關係,我們可以用 txt 打開 dmp 文件,使用快捷鍵 Ctrl+F,查找 tablespace,就可以找到這個 dmp 文件所對 ...
  • MYSQL的優化一個很棘手的問題,也是一個公司最想處理得當的問題. 那麼今天,本人為大家帶來幾點優化資料庫的方法: 1.選取最適用的欄位屬性 一般來說,資料庫的的表越小,在其上面執行的查詢也會越快.因此,我們在設計表的時候可以將表中的寬度設的儘可能的小. 對於欄位來說,,我們儘量和值為NOT NUL ...
  • 一、中文寫入亂碼問題 我輸入的中文編碼是 urf8 的,建的庫是 urf8 的,但是插入MySQL總是亂碼,一堆"???????????????????????"。可以使用以下的方式試試決解: 原url地址是 改為 就OK了。 二、Incorrect string value: '\xF0\x9F. ...
  • 因為重度嫌棄Mysql 8.0.xxx的各種妖魔鬼怪,所以想卸載了。但是,百度了很多文章,日期也是近幾個月,但是卻並不適用。所以特寫此文記錄一下。 按照百度萬金油通用第一步,就是要停止MySQL的服務。 網上給的方法是,net stop mysql,但是我發現到我這裡就變成無法識別的指令了。在排除了... ...
  • 1、LIKE 通常與 % 一同使用,類似於一個元字元的搜索。若substr不在str中,則返回0。 SELECT 'test' LIKE '%e%' as `ret`; # 1 SELECT 'test' LIKE '%a%' as `ret`; # 0 2、INSTR(str,substr) 返回... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...