Hadoop中的資料編碼 解碼器

2021-06-04 08:00:00 字數 1283 閱讀 3934

在海量資料儲存系統中,好的壓縮演算法可以有效的降低儲存開銷,減輕運營成本。hadoop作為當前主流的海量資料儲存與計算平台,當然也不例外,再其內部實現了幾種經典的編碼/解碼演算法來提供給使用者選擇,以達到提高應用系統的效能。因此,本文將主要圍繞hadoop中的資料編碼/解碼器展開詳細地討論。

在 hadoop的實現中,資料編碼器和解碼器被抽象成了兩個介面:org.apache.hadoop.io.compress.compressor、org.apache.hadoop.io.compress.decompressor,所以在hadoop內部的編碼/解碼演算法實現都需要實現對應的介面。在實際的資料壓縮與解壓縮過程,hadoop為使用者提供了統一的i/o流處理模式,其過程如下:

與上圖描述的過程相對應的乙個類圖為:

從上面的類圖可以輕鬆的看出,每一種編碼器(compressor)/解碼器(decompressor)最後統一的交由編碼解碼器(compressioncodec)來管理,為了標識某一種編碼解碼器(compressioncodec),它設計了getdefaultextesion()方法來表示這種編譯碼演算法,對應的就是檔案的字尾副檔名了。當前在hadoop內部實現的編碼解碼器主要有:

對應的副檔名是:

當hadoop啟動之前,我們可以通過配置檔案來為hadoop集群配置任意多個

編碼解碼器(compressioncodec),這些

編碼解碼器(compressioncodec)既可以是hadoop內部實現的,也可以是使用者自定義的。對應的配置項為:io.compr

ession

.codec,

當然,如果沒有在配置檔案中指定一系列的編碼解碼器(compressioncodec)

的話,則採用預設的

編碼解碼器:gzipcodec和defaultcodec。最後所有的這些配置的

編碼解碼器(compressioncodec)

統一交由compressioncodecfactory來管理。當hadoop在處理乙個檔案時,它會根據這個檔案的字尾名從compressioncodecfactory獲取相應的

編碼解碼器進而對該檔案進行解碼處理。

所有的壓縮演算法顯現了乙個時間和空間的交易:更快的壓縮或者解壓就以得到很少的空間節約為代價。所有的在上圖中的壓縮給了一些控制對於在壓縮的時候時空的交易。不同的壓縮工具有不同的壓縮特徵。gzip和zip都是最常見的壓縮,出於中間的時間和空間交易比。bizp2壓縮比gzip和zip更加有效的,但是更慢。bzip2的壓縮速度比解壓速度快,但是它還是比其他別的壓縮方法慢。另一方面lzo速度比較快:它比gzip和zip快(或者其他別的壓縮和解壓方法),但是壓縮效果不高效。

PHP JSON 資料編碼和解碼

資料表乙個字段需要記錄多個資訊,如記錄關於使用者的其他資訊 資料傳輸,如 api介面返回值 ajax中實現非同步載入 配置檔案,如 composer.json 包管理配置檔案 json 使用最頻繁的兩個操作就是編碼和解析資料,php 官方提供了以下 2 個函式實現這兩個操作 json encode ...

JSON資料編碼 解碼框架

編碼 把資料寫成json結構過程 解碼 把資料從json文件中讀取的過程,就是將字串分析之後讀入到乙個集合物件中,這個集合物件的結構可能是陣列,也可能是字典。編碼 解碼框架 1 sbjson,比較老得json編碼 解碼框架,現在更新任然很頻繁,支援arc 2 touchjson,比較老得json編碼...

編碼器與解碼器

以protobufencoder為例子,protobufencoder繼承channeloutboundhandler,與我們自定義的出站處理器 outboundhandler 相似。出站時 即向channel寫資料 會呼叫這個handler對資料進行處理 編碼 同理,decoder則繼承chann...