日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop SequnceFile.Writer 压缩模式及压缩库浅析

發(fā)布時間:2025/6/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop SequnceFile.Writer 压缩模式及压缩库浅析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

先說明SequnceFile的壓縮類型(Compression Type)分為三種NONE,RECORD,BLOCK,通過配置項io.seqfile.compression.type指定:

? ? ? ? ? ? NONE, Do not compress records ?即不壓縮

? ? ? ? ? ? RECORD, Compress values only, each separately. ? 每條記錄都對value進(jìn)行一次壓縮

? ? ? ? ? ? BLOCK, Compress sequences of records together in blocks. ? 塊壓縮,當(dāng)緩存的key和value字節(jié)大小達(dá)到指定的閾值,則進(jìn)行壓縮,閾值由配置項io.seqfile.compress.blocksize指定,默認(rèn)值為1000000字節(jié)


????RECORD,BLOCK使用的壓縮算法是由創(chuàng)建SequnceFile.Writer 時指定的CompressionOption決定的,?CompressionOption中CompressionCodec codec屬性即為壓縮編碼器, ?不指定時默認(rèn)為org.apache.hadoop.io.compress.DefaultCodec 對應(yīng)的底層壓縮庫為zlib, 除了DefaultCodec還有幾個其他的CompressionCodec:GzipCodec ?Lz4Codec ?SnappyCodec ? BZip2Codec 這里不做比較

????DefaultCodec在實現(xiàn)zlib壓縮的時候,可以指定使用libhadoop.so(hadoop 框架提供的native庫)或java.util.zip庫。下面了解下如何開啟hadoop native庫或java zip庫:


????SequnceFile 默認(rèn)使用的是org.apache.hadoop.io.compress.DefaultCodec 壓縮方式,使用的是Deflate的壓縮算法

????DefaultCodec在創(chuàng)建壓縮器時會執(zhí)行類ZlibFactory.getZlibCompressor(conf)方法,實現(xiàn)代碼片段:

????return?(isNativeZlibLoaded(conf))??new?ZlibCompressor(conf)?:new?BuiltInZlibDeflater(ZlibFactory.getCompressionLevel(conf).compressionLevel());

????當(dāng)加載本地Zlib庫時,使用的是ZlibCompressor壓縮器類,否則使用BuiltInZlibDeflater類,BuiltInZlibDeflater類是調(diào)用java的java.util.zip.Inflater類實現(xiàn);


????其中isNativeZlibLoaded是根據(jù)NativeCodeLoader類是否已經(jīng)加載hadoop native庫來判斷的,代碼如下:

//?Try?to?load?native?hadoop?library?and?set?fallback?flag?appropriatelyif(LOG.isDebugEnabled())?{LOG.debug("Trying?to?load?the?custom-built?native-hadoop?library...");}try?{System.loadLibrary("hadoop");LOG.debug("Loaded?the?native-hadoop?library");nativeCodeLoaded?=?true;}?catch?(Throwable?t)?{//?Ignore?failure?to?loadif(LOG.isDebugEnabled())?{LOG.debug("Failed?to?load?native-hadoop?with?error:?"?+?t);LOG.debug("java.library.path="?+System.getProperty("java.library.path"));}}if?(!nativeCodeLoaded)?{LOG.warn("Unable?to?load?native-hadoop?library?for?your?platform...?"?+"using?builtin-java?classes?where?applicable");}

????其中System.loadLibrary("hadoop"); 在linux上查找的就是libhadoop.so。

????總結(jié):當(dāng)無法加載本地的hadoop庫,hadoop會使用java.util.zip.Inflater類來對SequnceFile進(jìn)行壓縮;當(dāng)可以加載到本地hadoop庫,則使用本地的庫。


下面來比較實用native hadoop庫和不使用native hadoop的性能區(qū)別。


不使用native hadoop即在jvm運行參數(shù)java.library.path中不包含native庫的路徑:

java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

使用則在后面加上hadoop的native庫路徑:

java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib:$HADOOP_HOME/lib/native

虛擬機集群:

50w 數(shù)據(jù),sequnceFile壓縮模式為RECORD, key為隨機的10字節(jié),value為隨機200字節(jié):

? ? native lib disabled: ? ?32689ms ? ? ? ? after compression?114.07 MB?

? ? native lib enabled: ? 30625ms ? ? ? ?after compression?114.07 MB

50w 數(shù)據(jù),sequnceFile壓縮模式為BLOCK, key為隨機的10字節(jié),value為隨機200字節(jié):

? ? native lib?disabled: ? 11354ms ? ? ??after compression?101.17 MB

? ? native lib?enabled: ? ?10699ms?? ? ??after compression?101.17?MB

物理機集群:

50w 數(shù)據(jù),sequnceFile壓縮模式為RECORD, key為隨機的10字節(jié),value為隨機200字節(jié):

? ? native lib disabled: ? ?21953ms ? ? ? ? after compression?114.07 MB?

? ? native lib enabled: ? 24742ms ? ? ? ?after compression?114.07 MB


100w 數(shù)據(jù),sequnceFile壓縮模式為RECORD, key為隨機的10字節(jié),value為隨機200字節(jié):

? ? native lib disabled: ? ?48555ms ? ? ? ? after compression?228.14 MB

? ? native lib enabled: ? 45770ms ? ? ? ?after compression?228.14 MB

100w 數(shù)據(jù),sequnceFile壓縮模式為RECORD, key為隨機的10字節(jié),value為隨機200字節(jié), 設(shè)置zlib壓縮級別為BEST_SPEED:

? ? native lib disabled: ? ?44872ms ? ? ? ? after compression?228.14 MB

? ? native lib enabled: ?51582ms ? ? ? ?after compression?228.14 MB

100w 數(shù)據(jù),sequnceFile壓縮模式為BLOCK, key為隨機的10字節(jié),value為隨機200字節(jié), 設(shè)置zlib壓縮級別為BEST_SPEED:

? ? native lib disabled: ? ?14374ms ? ? ? ? after compression ?203.54 MB

? ? native lib enabled: ?14639ms ? ? ? ?after compression ??203.54 MB


100w 數(shù)據(jù),sequnceFile壓縮模式為BLOCK, key為隨機的10字節(jié),value為隨機200字節(jié), 設(shè)置zlib壓縮級別為DEFAULT_COMPRESSION:

? ? native lib disabled: ? ?15397ms ? ? ? ? after compression ?203.54 MB

? ? native lib enabled: ?13669ms ? ? ? ?after compression ??203.54 MB

分析測試結(jié)果,總結(jié)如下:

當(dāng)在不同的壓縮模式,或不同的數(shù)據(jù)量,以及不同的zlib壓縮級別時,使用hadoop native庫壓縮和使用java zip庫之間沒有太大差別

后續(xù)再嘗試其他的native壓縮編碼方式: GzipCodec ?Lz4Codec ?SnappyCodec ? BZip2Codec?




轉(zhuǎn)載于:https://my.oschina.net/shipley/blog/498712

總結(jié)

以上是生活随笔為你收集整理的Hadoop SequnceFile.Writer 压缩模式及压缩库浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。