Hadoop(四)C#操作Hbase

来源:https://www.cnblogs.com/chenyishi/archive/2022/05/02/16216585.html
-Advertisement-
Play Games

Hbase Hbase是一種NoSql模式的資料庫,採用了列式存儲。而採用了列存儲天然具備以下優勢: 可只查涉及的列,且列可作為索引,相對高效 針對某一列的聚合及其方便 同一列的數據類型一致,方便壓縮 同時由於列式存儲將不同列分開存儲,也造成了讀取多列效率不高的問題 LSM Tree 說到HBase ...


Hbase

Hbase是一種NoSql模式的資料庫,採用了列式存儲。而採用了列存儲天然具備以下優勢:

  1. 可只查涉及的列,且列可作為索引,相對高效
  2. 針對某一列的聚合及其方便
  3. 同一列的數據類型一致,方便壓縮

同時由於列式存儲將不同列分開存儲,也造成了讀取多列效率不高的問題

LSM Tree

說到HBase,我們不得不說其採用的LSM Tree。我們都知道關係資料庫中常用的B+Tree,葉子節點有序,但寫入時可能存在大量隨機寫入,因此形成了其讀快寫慢的特點。

而HBase採用了LSM Tree,在讀寫之間尋找了平衡,損失了部分讀取的性能,實現了快速的寫入。LSM具體實現如下:

  1. 寫入WAL日誌中(防止數據丟失),同時數據寫入記憶體中,記憶體中構建一個有順序的樹,HBase採用跳錶結構。
  2. 隨著記憶體中數據逐漸增大,記憶體中flush到磁碟,形成一個個小樹。
  3. 磁碟中的小樹存在數據冗餘,且查詢時遍歷多個小樹效率低,LSM定期合併,實現數據合併,而合併的時候,會對數據重新排序,優化讀取性能。

HBase架構

HBase中三個核心的Server形成其分散式存儲架構。

  1. RegionServer:負責客戶端讀寫請求,客戶端直接與其通信
  2. HBaseMaser:負責維護RegionServer;表結構的維護
  3. Zookeeper:維護集群狀態

HBase讀寫操作步驟

  1. 客戶端從zookeeper獲取哪台RegionServer存儲MetaTable(一張特殊表,存儲了所有region信息)。
  2. 客戶端查詢MetaTable所在的RegionServer,獲取哪台RegionServer應負責此次操作的rowKey
  3. 客戶端訪問對應的RegionServer實現數據讀取

RegionServer的組成

  1. WAL:Write Ahead Log,用於存儲寫操作的日誌,用於故障恢復
  2. BlockCache:讀緩存,用於緩存最常訪問數據
  3. MemStore:寫緩存,會定期flush到磁碟
  4. HFile:在HDFS上存儲數據,以有序keyvalue形式存儲

HBase存儲機制

  1. 表是行的集合。
  2. 行是列家族的集合。
  3. 列家族是列的集合。
  4. 列是鍵值對的集合。

HBase安裝

1.下載Hbase2.4.11

https://hbase.apache.org/downloads.html

2.解壓

tar -zxvf hbase-2.4.11-bin.tar.gz

3.修改環境變數

cat conf/hbase-env.sh
export JAVA_HOME=/usr/local/java18/jdk1.8.0_331/

4.修改hbase存儲位置

cat conf/hbase-site.xml
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
<property>
   <name>hbase.rootdir</name>
   <value>hdfs://localhost:9000/hbase</value>
</property>

5.啟動Hbase

./bin/start-hbase.sh 

6.驗證Hbase

http://192.168.43.50:16010/master-status

7.停止Hbase

./bin/stop-hbase.sh

HBase Shell訪問HBase

官方文檔:https://hbase.apache.org/book.html#shell

1.進入shell

./bin/hbase shell

2.查看表

hbase:001:0> list

3.創建表

#create ‘<table name>’,’<column family>’

hbase:001:0> create 'emp', 'personal data', 'professional data'
Created table emp
Took 3.4810 seconds
=> Hbase::Table - emp

4.創建/更新數據

#put ‘table name’,’row ’,'Column family:column name',’new value’

hbase:001:0> put 'emp','1','personal data:name','raju'
Took 1.1807 seconds

5.查看數據

hbase:001:0> scan 'emp'
ROW                                                    COLUMN+CELL
 1                                                     column=personal data:name, timestamp=2022-05-02T09:55:38.861, value=raju
1 row(s)
Took 1.1758 seconds

 

#get ’<table name>’,’row1’


hbase:002:0>  get 'emp', '1'
COLUMN                                                 CELL
 personal data:name                                    timestamp=2022-05-02T09:55:38.861, value=raju
1 row(s)
Took 1.3090 seconds

6.刪除數據

#delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’

hbase:001:0> deleteall 'emp','1'
Took 0.9424 seconds

C#訪問Hbase

C#訪問Hbase可以根據thrift文件自己生成響應rpc client代碼,通過rpc方式訪問。

https://github.com/apache/hbase/tree/master/hbase-thrift/src/main/resources/org/apache/hadoop/hbase

也可以啟動rest server通過微軟的Microsoft.Hbase.Client訪問,我們這次使用rest方式訪問。

 

1.啟動與關閉rest server

./bin/hbase-daemon.sh start rest
./bin/hbase-daemon.sh stop rest

可通過訪問http://192.168.43.50:8080/version/cluster驗證rest是否啟動成功

2.新增console項目,引入Microsoft.Hbase.Client包

https://github.com/hdinsight/hbase-sdk-for-net

 

3.編寫測試demo

using Microsoft.HBase.Client;
using Microsoft.HBase.Client.LoadBalancing;
using org.apache.hadoop.hbase.rest.protobuf.generated;

var scanOptions = RequestOptions.GetDefaultOptions();
scanOptions.Port = 8080;
scanOptions.AlternativeEndpoint = "/";
var nodeIPs = new List<string>();
nodeIPs.Add("192.168.43.50");
var client = new HBaseClient(null, scanOptions, new LoadBalancerRoundRobin(nodeIPs));
var version = client.GetVersionAsync().Result;
Console.WriteLine(version);

var testTableSchema = new TableSchema();
testTableSchema.name = "mytablename";
testTableSchema.columns.Add(new ColumnSchema() { name = "d" });
testTableSchema.columns.Add(new ColumnSchema() { name = "f" });
client.CreateTableAsync(testTableSchema).Wait();

通過hbase shell驗證表是mytablename否創建成功

hbase:001:0> list
TABLE
emp
mytablename

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

-Advertisement-
Play Games
更多相關文章
  • 1.在pom.xml加入SpringSecurity的依賴 <!-- SpringSecurity對Web應用進行許可權管理 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-secu ...
  • 使用Metalama為VisualStudio "重構"\ LiveTemplate 菜單中動態添加功能 ...
  • C#自定義配置文件教程,C#App.Config自定義配置文件教程,C#web.Config自定義配置節點 ...
  • 我前面幾篇隨筆介紹了關於幾篇關於SqlSugar的基礎封裝,已經可以直接應用在Winform項目開發上,並且基礎介面也通過了單元測試,同時測試通過了一些Winform功能頁面;本篇隨筆繼續深化應用開發,著手在在.net6框架的Web API上開發應用,也就是基於.net core的Web API應用... ...
  • 本文講講 Ubuntu 18 及以上版本配置 IP 的方法,為什麼它值得一講,因為以 Ubuntu 16 為首的版本的配置方法已經不適用了,如果你還不知道,那本文正好 get 一個新技能。 Ubuntu 18 之後版本配置方法 需要使用 netplan 工具。 對應配置文件: /etc/netpla ...
  • 文件和目錄 1. 文件系統 我們可以把一個磁碟分成一個或多個分區,每個分區包含一個文件系統,這個文件系統由很多柱面組成,而柱面中有一個非常重要的概念叫做 i 節點。 i 節點包含了文件的大部分信息,如文件類型,文件訪問許可權位,文件大小和指向文件數據的指針等,大多數信息都存在st_mode成員中,有兩 ...
  • MySQL學習(第一節自習課) 一. 軟體下載、安裝 下載地址:https://dev.mysql.com/downloads/installer/ 位置:mysql->installer->community1 離線安裝版本,不要選帶web路徑的是離線安裝版本。 安裝省略 進程名稱:mysqld. ...
  • 聲明 個人原創, 轉載需註明來源 https://www.cnblogs.com/milton/p/16216347.html 數據類產品 最近的項目需要接觸大數據處理相關的產品, 涉及了ETL, 數據挖掘和統計, 數據可視化等功能, 因此瞭解了一下這個行業的產品和工具. 最近看的產品主要是 Qua ...
一周排行
    -Advertisement-
    Play Games
  • 一:背景 準備開個系列來聊一下 PerfView 這款工具,熟悉我的朋友都知道我喜歡用 WinDbg,這東西雖然很牛,但也不是萬能的,也有一些場景他解決不了或者很難解決,這時候藉助一些其他的工具來輔助,是一個很不錯的主意。 很多朋友喜歡在項目中以記錄日誌的方式來監控項目的流轉情況,其實 CoreCL ...
  • 本來閑來無事,準備看看Dapper擴展的源碼學習學習其中的編程思想,同時整理一下自己代碼的單元測試,為以後的進一步改進打下基礎。 突然就發現問題了,源碼也不看了,開始改代碼,改了好久。 測試Dapper.LiteSql數據批量插入的時候,耗時20秒,感覺不正常,於是我測試了非Dapper版的Lite ...
  • 需求如下,在DEV框架項目中,需要在表格中增加一列顯示圖片,並且能編輯該列圖片,然後進行保存等操作,最終效果如下 這裡使用的是PictureEdit控制項來實現,打開DEV GridControl設計器,在ColumnEdit選擇PictureEdit: 綁定圖片代碼如下: DataTable dtO ...
  • 前兩天微軟偷偷更新了Visual Studio 2022 正式版版本 17.3 發佈,發佈摘要: MAUI 工作負荷 GA 生成 MAUI/Blazor CSS 熱重載支持 現在,你將能夠使用我們的新增功能在 Visual Studio 中使用每個更新試用一系列新功能。 選擇每個功能以瞭解有關特定功 ...
  • 航天和軍工領域的數字化轉型和建設正在積極推進,在與航天二院、航天三院、航天六院、航天九院、無線電廠、兵工廠等單位交流的過程中,用戶更聚焦試驗和生產過程中的痛點,迫切需要解決軟體平臺統一監測和控制設備及軟體與設備協同的問題。 ...
  • .NET 項目預設情況下 日誌是使用的 ILogger 介面,預設提供一下四種日誌記錄程式: 控制台 調試 EventSource EventLog 這四種記錄程式都是預設包含在 .NET 運行時庫中。關於這四種記錄程式的詳細介紹可以直接查看微軟的官方文檔 https://docs.microsof ...
  • 一:背景 上一篇我們聊到瞭如何去找 熱點函數,這一篇我們來看下當你的程式出現了 非托管記憶體泄漏 時如何去尋找可疑的代碼源頭,其實思路很簡單,就是在 HeapAlloc 或者 VirtualAlloc 時做 Hook 攔截,記錄它的調用棧以及分配的記憶體量, PerfView 會將這個 分配量 做成一個 ...
  • 背景 在 CI/CD 流程當中,測試是 CI 中很重要的部分。跟開發人員關係最大的就是單元測試,單元測試編寫完成之後,我們可以使用 IDE 或者 dot cover 等工具獲得單元測試對於業務代碼的覆蓋率。不過我們需要一個獨立的 CLI 工具,這樣我們才能夠在 Jenkins 的 CI 流程集成。 ...
  • 一、應用場景 大家在使用Mybatis進行開發的時候,經常會遇到一種情況:按照月份month將數據放在不同的表裡面,查詢數據的時候需要跟不同的月份month去查詢不同的表。 但是我們都知道,Mybatis是ORM持久層框架,即:實體關係映射,實體Object與資料庫表之間是存在一一對應的映射關係。比 ...
  • 我國目前並未出台專門針對網路爬蟲技術的法律規範,但在司法實踐中,相關判決已屢見不鮮,K 哥特設了“K哥爬蟲普法”專欄,本欄目通過對真實案例的分析,旨在提高廣大爬蟲工程師的法律意識,知曉如何合法合規利用爬蟲技術,警鐘長鳴,做一個守法、護法、有原則的技術人員。 案情介紹 深圳市快鴿互聯網科技有限公司 2 ...