天天看點

如何了解Hadoop-Hbase原理與應用小結

1 我們常說HBase是“資料即日志”的資料庫,它是怎樣修改和删除資料的?和Oracle這類傳統的RDBMS有什麼差別?

答:首先Hbase中的一個“元素”是由行鍵、列族名、限定符、時間戳唯一辨別的并且行鍵作為資料行在表裡的唯一辨別,我們隻有通過行鍵來通路列族别無他法。

修改資料:我們先找到要修改的行鍵把新的資料記錄追加到對應的列族中并打上一個新時間戳代表最新版本。

删除資料:插入帶有删除标記的行進入,相當于把整個行鍵所在的行删了。

小結:hbase中所有修改和删除都是用insert方式來完成的,這是由底層HDFS檔案系統特性決定的,HDFS中的檔案隻能一次性寫入不能修改可以删除在寫回。是以hbase是天生面向時間查詢的資料庫。例如 查詢最近一段時間一個人釋出的部落格、釋出簽名、釋出照片so on。

hbase特點

(1)适合大量插入同時key-value查詢,例如可以輸入一個key查詢一個value,還可以輸入一組key查詢一組value。

(2)瓶頸是硬碟的傳輸速度,因為有大量的插入操作和讀出操作,使用SSD SCSI IDE不同的硬碟效率是不同的。

(3)适合資料分析。

(4)列式資料庫會把相同列的資料都放在一塊即列為機關存儲。當我們查詢某一列的時候隻需要調出相應的塊即可,這樣還可以減少很多I/O。

(5)如果資料元素間的相似性很高的話可以進行大幅度的壓縮,相似度越高壓縮比越大,甚至可以壓縮到原來十幾分之一、上百分之一。即節約了空間又減少了I/O,進而提高性能。

(6)hbase隻有主鍵索引,它使用的是LSM(Log Structure Merge)索引,因為hbase所有的修改都是使用追加方式完成的,從資料流上看按照順序方式寫入與日志寫入的方式相同,我們又可以認為資料和日志一體化,這又節約了很多空間。

oracle特點

(1)适合小事務短時間片密集型OLTP系統,例如線上交易系統。

(2)瓶頸是硬碟的尋道時間(磁頭移動時間),因為oracle随機寫随機修改塊,首先要找到塊這個過程就是尋道時間,而尋道時間又由硬碟轉速決定的,5400 7200 15000轉/秒 不同的轉速效率也是不同的。

(3)适合做SQL統計。

(4)行式資料庫會按照資料行順序集中存放即行為機關存儲。當我們查詢某一列的時候必須把表裡所有的行讀完才能抽取我們所要的行,這樣很不劃算,還要付出很大的I/O資源。

(5)那麼從結構上講oracle的壓縮性能就要略遜一籌。

(6)oracle常用的是B+樹索引,比較大小來查找記錄,小的走左邊大的走右邊,如果列中的相似度較高的話性能較差。

2 HBase合并storefile的原因是什麼?在合并的過程中會做什麼操作?如果在合并過程中恰好有涉及到有關storefile的查詢發生,會發生什麼情況!

答:首先我們介紹一下Hbase資料存儲的實體結構

一個實體節點隻能跑一個HRegionserver

一個HRegionServer可以包括很多個Region執行個體,可以是不同表Region

一個Region包含一個hlog和多個store(一個store就是一個列族,因為同列族元素在實體上存放在同一個地方,不同列族在實體上是分離的)

一個store包含一個memstore和多個storefile

當我們在處理資料的時候,首先把資料加載到memstore,資料越來越多直到memstore占滿,再寫入硬碟storefile中,每次寫入形成一個單獨storefile,當storefile達到一定的數量後,就會開始把小storefile合并成大storefile,因為hadoop不擅長處理小檔案,檔案越大性能越好。

在合并的過程中會抛棄删除辨別的行和版本過舊的行(hbase版本抛棄方式(1)我們可以預先定義版本的個數,超過這個值就抛棄(2)還可以預先定義版本的時間長短,超過這個時間就抛棄),合并完後形成更大的storefile,當達到數量再次合并,直到storefile容量超過一定閥值後會把目前的Region進行分裂為2個并由Hmaster(hbase資料庫主要節點)配置設定到不同的HRegionServer伺服器處理實作負載均衡。

如果在合并過程中恰好有涉及到有關storefile的查詢發生的話,我們先是把小storefile加載到記憶體中進行合并此時如有使用者通路可以在記憶體中檢索相關資料傳回給使用者,我們可以想象在

QQ号碼出售

記憶體中做一個獨立鏡像備份專門提供被查詢需求,另一個主體在另一塊記憶體空間裡進行合并,當合并完成後釋放備份的記憶體空間,傳回到原來的狀态。

3 Hbase具有怎麼樣的一緻性水準

答:hbase是最終一緻性的系統,因為hbase是架構在hadoop之上的資料庫,“錯誤是常态”是hadoop座右銘,在cap理論中hbase為了滿足可用性和分區容錯性犧牲了一部分的資料一緻性。

舉例:我們要進行電信的名額彙總,并且把彙總結果備援三份分布在3個datanode中,我們可以設定閥值隻要有2份結果儲存了我們就可以繼續做下面的操作,在一定時間範圍内允許第3份結果稍後一緻性同步,這就是最終一緻性。是以說hbase是适用于AP理論的系統,最終一緻性也滿足分布式叢集的特點。