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
  • 移動開發(一):使用.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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...