2011-06-20 50 views
0

感謝您對我的問題感興趣。 在開始之前,我想告訴你,我對Hadoop & HBase很陌生。到目前爲止,我發現Hadoop非常有趣,並希望在未來貢獻更多。HBase鍵值壓縮?

我主要對提高HBase的性能感興趣。爲此,我修改了HBase的/io/hfile/Hfile.java中的Writer方法,使其能夠進行高速緩衝數據彙編,然後直接寫入Hadoop,以便稍後由HBase加載。

現在,我試圖想出一種方法來壓縮鍵值對,以便可以節省帶寬。我已經做了大量的研究來弄清楚如何;然後意識到HBase具有內置的壓縮​​庫。

我正在查看SequenceFile (1); setCompressMapOutput (2)(已棄用);和類壓縮(3)。我還在Apache的MapReduce上找到了一個tutorial

有人可以解釋一下「SequenceFile」是什麼,以及我如何實現這些壓縮庫和算法?這些不同的課程和文件對我來說非常混亂。

我真誠感謝您的幫助。

-

超鏈接:

(1):hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/SequenceFile.html

( 2):hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapred/JobConf.html#setCompressMapOutput%28boolean%29

(3):www.apache.org/dist/ hbase/docs/apidocs/org/apache/hadoop/hbase/io/hfile/Compression.html

回答

0

SequenceFile是Hadoop使用的鍵/值對的流。你可以閱讀更多關於它on the Hadoop wiki

4

SequenceFile是在Hadoop中實現的鍵/值對文件格式。儘管在HBase中用於存儲預寫日誌,但SequenceFile的塊壓縮實現不是。

Compression類是Hadoop壓縮框架的一部分,因此用於HBase的HFile塊壓縮。

的HBase已經內置了以下類型的壓縮,磁盤

  • HFILE塊壓縮。這使用Hadoop的編解碼器框架並支持壓縮算法,如LZO,GZIP和SNAPPY。此類型的壓縮僅適用於存儲在磁盤上的HFile塊,因爲需要對整個塊進行解壓縮以檢索鍵/值對。
  • 緩存中鍵緩存(在HBase術語中稱爲「數據塊編碼」) - 參見HBASE-4218。實現的編碼算法包括各種類型的前綴和增量編碼,並且在編寫本文時(HBASE-4676)正在實施編碼。數據塊編碼算法充分利用HFile塊中排序後的鍵之間的冗餘性,並僅存儲連續鍵之間的差異。這些算法目前不涉及值,因此對於小值(相對於密鑰大小)的情況來說最爲有用,例如,計數器。由於這些數據塊編碼算法的輕量性質,可以僅對塊的必要部分進行有效解碼以檢索所請求的密鑰或前進到下一個密鑰。這就是爲什麼這些編碼算法對於提高緩存效率有好處。然而,在一些真實世界的數據集上,增量編碼還允許在LZO壓縮之上節省多達50%(例如,應用增量編碼,然後僅使用LZO與LZO),因此也實現了磁盤的顯着節省。
  • HBASE-4608中實現了基於自定義字典的預寫日誌壓縮方法。注意:即使SequenceFile用於HBase中的預寫日誌存儲,SequenceFile的內置塊壓縮也不能用於預寫日誌,因爲用於塊壓縮的緩存鍵/值對會導致數據丟失。

HBase RPC壓縮是一項正在進行的工作。正如您所提到的,壓縮客戶端和HBase之間傳遞的鍵/值對可以節省帶寬並提高HBase性能。這已經在Facebook的HBase版本0.89-fb(HBASE-5355)中實現,但尚未移植到官方的Apache HBase中繼。 HBase 0.89-fb支持的RPC壓縮算法與Hadoop壓縮框架(例如GZIP和LZO)支持的算法相同。

setCompressedMapOutput方法是一種map-reduce配置方法,與HBase壓縮無關。

+1

+1 - 應該爲大量用戶提供信息 –