**:
————————————– 毫無理由的分割線 ———————————
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 =
new
rawlocalfilesystem();
fs.setconf(
new
configuration());
// block size = 1kb
hfile.writer hwriter =
new
hfile.writer(fs,
new
path(
"hfile"
),
1
, (compression.algorithm)
null
,
null
);
// create key & value, the value is 8kb, larger than 1kb
byte
key =
"www.data-works.org"
.getbytes();
byte
value =
new
byte
[
8
*
1024
];
for
(
int
i =
0
; i <
8
*
1024
; i++)
// add values to hfile
for
(
int
i =
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 =
new
rawlocalfilesystem();
fs.initialize(uri.create(
"file:///"
),
new
configuration());
fs.setconf(
new
configuration());
hfile.reader hreader =
new
hfile.reader(fs,
new
path(
"hfile"
),
null
,
false
);
// loadfileinfo
hreader.loadfileinfo();
hfilescanner hscanner = hreader.getscanner(
false
,
false
);
// seek to the start position of the hfile.
hscanner.seekto();
// print values.
int
index =
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...