kudu基礎 讀寫操作

2021-10-11 18:07:41 字數 1554 閱讀 9953

kafka

kudu

結構化資料:

靜態資料集:儲存在hdfs中(高吞吐量 )

半結構化資料:儲存在hbase和cassandra。可適應於低延遲的記錄級讀寫,但是在對ml和基於sql的分析等應用上連續讀吞吐量上遠遠落後於靜態檔案格式

為什麼需要kudu?

hdfs :吞吐量高,列式儲存,不支援record-level操作,隨機讀寫性差

hbase: 高效隨機讀寫,獲取大批量資料時效能差,不適用於資料分析

kudu同時擁有 hdfs的掃瞄效能和hbase的隨機讀寫效能

table: 包含schema和primary key

tablet:段,是在一張table連續的segment。存在副本機制

乙個table->n個tablet->m*n個metadata資訊+rowset資訊

rowset=乙個memrowset和0到多個diskrowset

ps: 區別每條資料之間的唯一標識

acid: 原子性,一致性,隔離性,永續性

主要角色:master和tserver

master:管理元資料資訊,監聽server,當server宕機之後負責tablet的重分配

tserver: tablet的儲存與資料的增刪改查

讀流程client連線到tmaster(獲取表的相關資訊),找到需要讀取資料的tablet所在的tserver(把資訊傳送給master的過程)

master校驗後返回元資料給client(把tserver資訊返回),client和tserver建立連線,並記錄timestamp(若沒有顯式指定則使用當前時間)

記憶體:從memrowset和deltamemstore中讀取資料,根據timestamp找到對應的mutation鍊錶

磁碟:通過metadata找到資料所在的rowset。(先載入記憶體裡面的資料再載入磁碟裡面的資料),最後把資料返回給client

插入流程(寫流程)

client連線tmaster獲取元資料資訊(tablet資訊),

找到並連線tserver,

kudu在所有的rowset中進行查詢(在memrowset和diskrowset中是否存在相同的primary key)。若存在,則返回錯誤。若不存在,則把待插入的資料寫入wal 日誌(預寫日誌),並根據raft一致性演算法獲得追隨節點同意之後,才會插入到其中乙個tablet的記憶體中(寫入的是tablet的memrowset)

在memrowset中的資料達到一定大小時,memrowset會將資料落盤然後生成乙個diskrowset用於持久化資料,並生成乙個memrowset來繼續接收新資料請求

更新流程

client連線tmaster獲取元資料(tablet),再連線tserver。

根據資料位置不同,執行不同的操作

ps: wal日誌會在真正操作之前把這件事記錄下來並持久化到可靠儲存中。所以出錯的時候很容易就可以通過該日誌檢查並重做。

參考:如何評價kudu?

kudu和kafka對比的blog

kudu的一篇**

kudu架構原理(我寫完之後才發現這一篇,說實話寫的比我的全面很多,推薦看看)

kudu之維護操作

維護操作 maintenance operations 作為本文闡述的物件,是在kudu正常執行的過程中,執行在後台的程序。為了保證kudu系統操作的流暢,維護管理器 maintenancemanager 必須要明智的排程維護操作。某種程度上說,這是在當前效能和未來效能之間的權衡。比如說,做comp...

scala通過jdbc操作kudu

val driver com.cloudera.impala.jdbc41.driver val url jdbc impala class.forname driver val client drivermanager.getconnection url 注意 sql語句後面新增分號,估計是imp...

nand flash基礎 讀寫擦操作

當對乙個cell進行讀操作時,對相應的wordline施加vread電壓,對其他wordline施加vpass電壓,如上圖所示。狀態為 0 的cell 被program的cell 的vth均大於0,狀態為 1 的cell 被erase的cell 的vth均小於1,且所有cell的vth有乙個上限,所...