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

2021-06-04 20:19:04 字數 3959 閱讀 8010

**:

————————————– 毫無理由的分割線 ———————————

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

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

這篇文章中介紹了以下五點內容:

hfile的作用。

hfile的格式。

hfile的效能。

hfile的使用注意事項。

hfile的程式設計介面。

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

於是有如下的測試**:?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

// create local file system

filesystem fs =newrawlocalfilesystem();

fs.setconf(newconfiguration());

// block size = 1kb

hfile.writer hwriter =newhfile.writer(fs,

newpath("hfile"),1, (compression.algorithm)null,null);

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

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

bytevalue =newbyte[8*1024];

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

// add values to hfile

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

// close hfile

hwriter.close();

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

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

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

這個hfile的讀取**如下:?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

// create local file system

filesystem fs =newrawlocalfilesystem();

fs.initialize(uri.create("file:///"),newconfiguration());

fs.setconf(newconfiguration());

hfile.reader hreader =newhfile.reader(fs,

newpath("hfile"),null,false);

// loadfileinfo

hreader.loadfileinfo();

hfilescanner hscanner = hreader.getscanner(false,false);

// seek to the start position of the hfile.

hscanner.seekto();

// print values.

intindex =1;

while(hscanner.next())

// close hfile.

hreader.close();

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

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

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

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

暫用過多記憶體

啟動載入時間緩慢

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

更多關於hbase方面的文章,請參考:

關於HFile的思考

0.90.x版本的hbase中的檔案是儲存在hfile中的。關於hfile檔案的詳細介紹,可以檢視這篇文章 hfile的作用。hfile的格式。hfile的效能。hfile的使用注意事項。hfile的程式設計介面。hfile中有乙個很重要的引數,那就是block size。如果我們寫入hfile中的...

json建立和解析

1.輸出多個物件功能的json game 2 輸出陣列功能的 json 例子如 1.如 解析陣列型別的 json public static void jiexijson throws jsonexception jsonarray jsonarray new jsonarray sjson int...

cJSON的構建和解析

一 cjson構建 define module num 3 int encode json cjson root cjson createobject 在根節點建立cjson物件 root cjson name list array cjson createarray 建立陣列物件 name lis...