關於HFile的思考

2021-05-26 11:41:41 字數 2384 閱讀 5251

0.90.x版本的hbase中的檔案是儲存在hfile中的。

關於hfile檔案的詳細介紹,可以檢視這篇文章:

hfile的作用。

hfile的格式。

hfile的效能。

hfile的使用注意事項。

hfile的程式設計介面。

hfile中有乙個很重要的引數,那就是block size。如果我們寫入hfile中的某乙個value的值大於block size會怎麼樣?

於是有如下的測試**:

1:  

// create local file system

2:  filesystem fs = new rawlocalfilesystem();
3:  fs.setconf(new configuration());
4:
5:  

// block size = 1kb

6:  hfile.writer hwriter = new hfile.writer(fs,
7:  

new path("hfile"), 1, (compression.algorithm) null, null);

8:
9:  

// create key & value, the value is 8kb, larger than 1kb

10:  

byte key = "www.data-works.org".getbytes();

11:  

byte value = new

byte[8 * 1024];

12:  

for (int i = 0; i < 8 * 1024; i++)

15:
16:  

// add values to hfile

17:  

for (int i = 0; i < 10; i++)

20:
21:  

// close hfile

22:  hwriter.close();

上面的**可以看出來,每乙個value的值都是8kb,已經超過了hfile預設的1kb的block size。

實際的寫入情況是如果value大於block size,那麼就按照實際的情況來寫。

上面的測試用例執行完畢以後,整個hile檔案只有1個data block。

這個hfile的讀取**如下:

1:  

// create local file system

2:  filesystem fs = new rawlocalfilesystem();
3:  fs.initialize(uri.create("file:///"), new configuration());
4:  fs.setconf(new configuration());
5:  hfile.reader hreader = new hfile.reader(fs,
6:  

new path("hfile"), null, false);

7:
8:  

// loadfileinfo

9:  hreader.loadfileinfo();
10:
11:  hfilescanner hscanner = hreader.getscanner(false, false);
12:
13:  

// seek to the start position of the hfile.

14:  hscanner.seekto();
15:
16:  

// print values.

17:  

int index = 1;

18:  

while (hscanner.next())

23:
24:  

// close hfile.

25:  hreader.close();

上面的**將讀取hfile,並將這個檔案中的所有kv列印出來。

通過上面的測試可以看出:如果某乙個key有非常非常多的value,那麼查詢這些value就無法通過索引去快速查詢,而是需要通過遍歷進行。

另外,jira上面的hbase-3857也提出了一種新的hfile格式,hfile v2

他主要是針對現有hfile的兩個主要缺陷提出來的:

暫用過多記憶體

啟動載入時間緩慢

有興趣的朋友可以詳細了解一下。

關於HFile的思考 建立和解析HFile

毫無理由的分割線 0.90.x版本的hbase中的檔案是儲存在hfile中的。關於hfile檔案的詳細介紹,可以檢視這篇文章 這篇文章中介紹了以下五點內容 hfile的作用。hfile的格式。hfile的效能。hfile的使用注意事項。hfile的程式設計介面。hfile中有乙個很重要的引數,那就是...

關於博弈的思考

博弈,決策,永恆的主題 在博弈的過程中不要考慮是否公平,而是要考慮是否對你自己有利。這句話很值得思考。人生無時無刻不在博弈,無論是在微觀上,兩個人之間的談話 還是在巨集觀上每次人生抉擇的過程,博弈,總是在乙個恰當的視點上讓人設身處地的感受到。在博弈的過程中,公平與否,很多人都在抱怨 有的時候是與自己...

關於執行的思考

方 的實施,貫穿於軟體開發的整個過程。實施的關鍵在於執行,而執行由很多瑣碎的活動組成。在軟體開發實踐中,執行應該被放到乙個完整的體系環境中去考慮,單純強調執行本身,是無法解決執行問題的。在討論執行這個話題之前,我認為有必要先來看看東西方文化的差異。中國近代哲學史上有一種觀點,即地理環境決定了文化差異...