精品乱码一区内射人妻无码-亚洲中文AⅤ中文字幕在线-免费不卡国产福利在线观看-国产综合无码一区二区色蜜蜜

          您現(xiàn)在的位置:智能制造網>技術中心>技術干貨|說說KUDU的小秘密

          直播推薦

          更多>

          企業(yè)動態(tài)

          更多>

          推薦展會

          更多>

          技術干貨|說說KUDU的小秘密

          2022年02月23日 12:09:52人氣:28來源:上海派拉軟件股份有限公司

          上一篇文章討論了HDFS的架構,特點以及存儲規(guī)劃。本篇文章將談一下Hadoop存儲家族的二當家KUDU。我們之前也談到KUDU有和HDFS一樣的水平擴展能力以及近似HBase的高效讀寫能力,那么會為什么會這樣呢,本文中將給出解答。本文將會從KUDU的架構和內部機制,KUDU數據存儲方式,KUDU與HDFS和HBase的對比幾方面進行討論。


          KUDU的架構和內部機制




          KUDU是一個分布式主從架構的存儲系統(tǒng),這意味者它有Master-Slave的架構,不過實際上,它的Slave組件叫做Tablet Server,存儲著KUDU中的數據。KUDU的架構圖如下:



          KUDU整體是高可用的,無論是Master還是Tablet Server都有多臺,它們內部采用Raft選舉機制來保障誰是Leader,誰是Follower。


          對于KUDU Master來說,它主要存儲Catalog Table, Tablet Server以及Tablets的元數據信息。Catalog Table存儲KUDU中Table的Metadata信息。KUDU Master使用采用Raft機制,為保證選舉的成功性,通常Master需要為奇數個,一般是3個,在集群規(guī)模比較大時可設置為5個。


          對于Tablet Server, 它主要存儲Tablets以及向外部Client提供服務。


          Tablet的不同副本會存儲在不同的Tablet Server上,它們也通過Raft機制保障誰是Leader,誰是Follower。對于一個特定的Tablet, 只有Leader可以被寫入,而Follower只能被讀取。這樣大大提升了讀的效率。然而當數據寫入過大時,如果有Leader Tablet所在的Tablet Server宕機,那將會造成大量的寫失敗,而在Raft機制中,Leader只允許提交當前時間片的數據,因為當新的Leader選舉產生后,之前寫失敗的數據也不會再次寫入,只能繼續(xù)寫當前時間片以后的新數據。這也是為什么Tablet Server節(jié)點宕機后,有可能造成數據一致性的問題。


          KUDU數據存儲方式




          那么對于一個特定的數據表, KUDU里是怎么存儲的呢?參見下圖:




          對于一個表,KUDU中會將其若干個Tablet, 每個Tablet又包含Metadata以及RowSet。其中Metadata存放Tablets的元數據信息,RowSet存儲具體的數據。


          RowSet是把Tablet切片成更小的單元。RowSet分為兩種,一種在內存里,叫MemRowSet,一種flush落地到磁盤上,叫DiskRowSet。


          這兩種RowSet有些區(qū)別,首先,一個表只有一個MemRowSet,但是會有很多個DiskRowSet。當MemRowSet達到大小時(一般是32M),才會刷新到磁盤上形成DiskRowSet。因為32M的大小并不大,所以不會造成HBase中Major Compaction的性能問題。

          另外,MemRowSet中數據是行式存儲,實現(xiàn)形式是B+tree,它的存儲樣式為:



          而DiskRowSet為列式存儲,它的存儲樣式為:



          對于每一個DiskRowSet,它包含六個部分:BloomFile,AdhocIndex,UndoFile,RedoFile,BaseData,DeltaMem。


          BloomFile是根據主鍵生成的一個Bloom Filter,用于模糊定位數據是否在DiskRowSet存在;

          AdhocIndex則是主鍵的索引,用于定位主鍵在DiskRowSet的偏移量;

          BaseData是上次Flush到磁盤的數據;

          RedoFile是上次Flush到磁盤以后發(fā)生的數據變化;

          UndoFile是上次Flush到磁盤之前的數據;

          DeltaMem則是RedoFile生成之前的在內存和磁盤交互時的存儲格式。


          DiskRowSet在磁盤上具體存儲為一個個的CFile文件, 需要注意的是,DiskRowSet這六部分并不是存在一個CFile中,而是獨立在多個CFile中的,每一部分都會形成單獨的CFile。


          但實際上,無論是在KUDU Master還是KUDU Tablet Server上,我們見到實際存儲的都是都是.metadata文件和.data文件,像這種:



          CFile文件在哪?和.data還有.metadata文件有什么關系?他們的關系像這樣:



          .metadata文件記錄的是一個DiskRowSet中幾部分對應CFile的位置以及映射關系,而大量的CFile又被Container合并寫到一個.data文件中,因此對于一個DiskRowSet的正常讀寫,.metadata文件和.data文件缺一不可。


          KUDU與HDFS以及HBase的對比




          對于HDFS來說,無論讀還是寫,實際操作的是底層一個個數據文件,由于設計之初并不對文件中的內容做要求,因此只支持整個數據文件的新增,刪除或者向其中追加新的數據。而無法實現(xiàn)單條數據的更新和刪除,因為HDFS根本沒有辦法定位這條數據在哪里,而即便定位了,也需要把整個數據文件刪掉再重建才能把操作完成,這個代價太過昂貴。而如果是離線分析,HDFS倒是很有優(yōu)勢,雖然它不知道某條數據在哪里,但是它知道分析用到的整張表在哪里存儲并進行快速定位。


          對于HBase來說,它底層仍然依賴于HDFS的文件塊存儲,但是它需要實現(xiàn)快速數據快速插入,更新和刪除。那它怎么實現(xiàn)呢?和KUDU一樣,HBase借用了內存來進行處理,在內存中有MemStore,所有寫入HBase的數據都變成一個Key-Value的鍵值對,當然這個Key不只是一個字段,而是Rowkey+Column Family+Column Qualifier+Timestamp+Type的組成,而Value是Column Qualifier所對應的值。當MemStore到達一定大小后,會Flush到磁盤行程HFile,而HFile對應一個個HDFS的BLOCK文件,MemStore以及HFile中要求Key必須是高度有序的,因此可以快速定位數據,HBase對表的所有的插入和更新都轉換成對HDFS的HFile文件的創(chuàng)建。這樣一來數據更新和刪除的問題解決了,但是要做離線分析就復雜了,因為除了Key以外的其他數據無法定位,而且將HDFS數據文件經過一次轉換,在最差情況下可能需要SCAN全表才能找到分析需要的數據。


          KUDU的數據處理流程和HBase有些類似,但是為了滿足更高要求的數據一致性以及數據分析能力,KUDU的數據寫入過程比HBase更加復雜,因此KUDU的隨機讀寫效率是要比HBase差一些的。但是它又一些新的特性比HBase更優(yōu)秀,例如:


          ● KUDU的數據分區(qū)方式多樣化,而HBase單一化;

          ● KUDU底層采用本地文件系統(tǒng),而HBase底層采用HDFS;

          ● KUDU本身就有Catalog Table的機制,因此和Impala集成時運作效率很高,而HBase這點基本上;

          ● KUDU的Compaction產生的IO量非常小,不會產生性能問題,而HBase大表的Major Compaction很容易誘發(fā)性能問題。


          KUDU與HDFS相比,它雖然實現(xiàn)了數據的快速更新,刪除等需求,但是它也有以下不足的地方


          ● KUDU的穩(wěn)定性較差,節(jié)點故障或者磁盤損壞都會導致數據一致性風險;

          ● KUDU Compaction的文件小但是數量多,因此系統(tǒng)的打開文件數限制需要設置的比較大;

          ● KUDU運行時需要較多的內存。


          KUDU目前版本已經發(fā)展到1.11.1。除上述情況外,仍然存在一些使用上的限制:


          ◆ 表創(chuàng)建后,主鍵不能修改;

          ◆ 主鍵列大小不能大于16K,且必須在非主鍵列之前;

          ◆ KUDU中的表只能支持300列;

          ◆ 不能使用Alter Table改變現(xiàn)有列的類型和屬性;

          ◆ 副本數在建表時,后續(xù)無法修改;

          ◆ 表名和列名必須為有效的UTF-8字符串,256字符,且不支持其他編碼類型;

          ◆ 刪除部分數據不會立刻釋放存儲空間,必須等待KUDU內部執(zhí)行Compaction后才會釋放,但如果刪除整張表,存儲空間會立即釋放。


          總之,HDFS,HBase, KUDU都是優(yōu)秀的Hadoop技術組件,各有優(yōu)勢也都還存在不之處。具體使用什么組件存儲數據最合適,還是需要根據業(yè)務場景來確定。

          關鍵詞:CAN
          全年征稿/資訊合作 聯(lián)系郵箱:1271141964@qq.com

          免責聲明

          • 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://www.tzhjjxc.com。違反者本網將追究相關法律責任。
          • 企業(yè)發(fā)布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔責任,本網有權刪除內容并追溯責任。
          • 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
          • 如涉及作品內容、版權等問題,請在作品發(fā)表之日起一周內與本網聯(lián)系,否則視為放棄相關權利。

          <
          更多 >

          工控網機器人儀器儀表物聯(lián)網3D打印工業(yè)軟件金屬加工機械包裝機械印刷機械農業(yè)機械食品加工設備制藥設備倉儲物流環(huán)保設備造紙機械工程機械紡織機械化工設備電子加工設備水泥設備海洋水利裝備礦冶設備新能源設備服裝機械印染機械制鞋機械玻璃機械陶瓷設備橡塑設備船舶設備電子元器件電氣設備


          我要投稿
          • 投稿請發(fā)送郵件至:(郵件標題請備注“投稿”)1271141964.qq.com
          • 聯(lián)系電話0571-89719789
          工業(yè)4.0時代智能制造領域“互聯(lián)網+”服務平臺
          智能制造網APP

          功能豐富 實時交流

          智能制造網小程序

          訂閱獲取更多服務

          微信公眾號

          關注我們

          抖音

          智能制造網

          抖音號:gkzhan

          打開抖音 搜索頁掃一掃

          視頻號

          智能制造網

          公眾號:智能制造網

          打開微信掃碼關注視頻號

          快手

          智能制造網

          快手ID:gkzhan2006

          打開快手 掃一掃關注
          意見反饋
          關閉
          企業(yè)未開通此功能
          詳詢客服 : 0571-87858618