1. 程式人生 > >Hadoop壓縮演算法snappy

Hadoop壓縮演算法snappy

Snappy的前身是Zippy。雖然只是一個數據壓縮庫,它卻被Google用於許多內部專案程,其中就包括BigTable,MapReduce和RPC。Google宣稱它在這個庫本身及其演算法做了資料處理速度上的優化,作為代價,並沒有考慮輸出大小以及和其他類似工具的相容性問題。Snappy已經被Google開源,作為一個壓縮庫,它可以利用單顆Intel Corei7處理器核心處理至少每秒250MB~500MB的資料流。Google極力讚揚Snappy的各種優點,Snappy從一開始就被“設計為即便遇到損壞或者惡意的輸入檔案都不會崩潰”,而且被Google在生產環境中用於壓縮PB級的資料。其健壯性和穩定程度可見一斑。

下載:http://code.google.com/p/snappy/downloads/list

配置:

        設定LD_LIBRARY_PATH環境變數或者java.library.path屬性

        hadoop native library: $HADOOP_HOME/lib/native/Linux-amd64-64/


測試:

String codecClassname = "org.apache.hadoop.io.compress.SnappyCodec";
Class codecClass = Class.forName(codecClassname);
Configuration conf = new Configuration();
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, conf);
String fileinName = args[0];
String fileoutName = fileinName + codec.getDefaultExtension();
FileOutputStream fileout = new FileOutputStream(fileoutName);
CompressionOutputStream out = codec.createOutputStream(fileout);
FileInputStream filein = new FileInputStream(fileinName);
IOUtils.copyBytes(filein,out,4096,false);
out.finish();
out.close();
filein.close();

INFO util.NativeCodeLoader: Loaded the native-hadoop library native hadoop loaded.
WARN snappy.LoadSnappy: Snappy native library is available
INFO snappy.LoadSnappy: Snappy native library loaded