日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Hadoop集群上使用Lzo壓縮

系統(tǒng) 3217 0

轉(zhuǎn)自: http://www.tech126.com/hadoop-lzo/

自從Hadoop集群搭建以來(lái),我們一直使用的是Gzip進(jìn)行壓縮

當(dāng)時(shí),我對(duì)gzip壓縮過(guò)的文件和原始的log文件分別跑MapReduce測(cè)試,最終執(zhí)行速度基本差不多

而且Hadoop原生支持Gzip解壓,所以,當(dāng)時(shí)就直接采用了Gzip壓縮的方式

關(guān)于Lzo壓縮,twitter有一篇文章,介紹的比較詳細(xì),見(jiàn) 這里

Lzo壓縮相比Gzip壓縮,有如下特點(diǎn):

  1. 壓縮解壓的速度很快
  2. Lzo壓縮是基于Block分塊的,這樣,一個(gè)大的文件(在Hadoop上可能會(huì)占用多個(gè)Block塊),就可以由多個(gè)MapReduce并行來(lái)進(jìn)行處理

雖然Lzo的壓縮比沒(méi)有Gzip高,不過(guò)由于其前2個(gè)特性,在Hadoop上使用Lzo還是能整體提升集群的性能的

我測(cè)試了12個(gè)log文件,總大小為8.4G,以下是Gzip和Lzo壓縮的結(jié)果:

  1. Gzip壓縮,耗時(shí)480s,Gunzip解壓,耗時(shí)180s,壓縮后大小為2.5G
  2. Lzo壓縮,耗時(shí)160s,Lzop解壓,耗時(shí)110s,壓縮后大小為4G

以下為在Hadoop集群上使用Lzo的步驟:

1. 在集群的所有節(jié)點(diǎn)上安裝Lzo庫(kù),可從 這里 下載

cd /opt/ysz/src/lzo-2.04

./configure –enable-shared

make

make install

#編輯/etc/ld.so.conf,加入/usr/local/lib/后,執(zhí)行/sbin/ldconfig

或者cp /usr/local/lib/liblzo2.* /usr/lib64/

#如果沒(méi)有這一步,最終會(huì)導(dǎo)致以下錯(cuò)誤:

lzo.LzoCompressor: java.lang.UnsatisfiedLinkError: Cannot load liblzo2.so.2 (liblzo2.so.2: cannot open shared object file: No such file or directory)!

2. 編譯安裝Hadoop Lzo本地庫(kù)以及Jar包,從 這里 下載

?? ?export CFLAGS=-m64

?? ?export CXXFLAGS=-m64

?? ?ant compile-native tar

?? ?#將本地庫(kù)以及Jar包拷貝到hadoop對(duì)應(yīng)的目錄下,并分發(fā)到各節(jié)點(diǎn)上

?? ?cp lib/native/Linux-amd64-64/* /opt/sohuhadoop/hadoop/lib/native/Linux-amd64-64/

?? ?cp hadoop-lzo-0.4.10.jar /opt/sohuhadoop/hadoop/lib/

3. 設(shè)置Hadoop,啟用Lzo壓縮

vi core-site.xml

<property> ? ??

<name>io.compression.codecs</name> ? ??

<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.BZip2Codec</value>

</property>

<property> ? ??

<name>io.compression.codec.lzo.class</name> ? ??

<value>com.hadoop.compression.lzo.LzoCodec</value>

</property>

?

vi mapred-site.xml

<property>

<name>mapred.compress.map.output</name> ? ??

<value>true</value> ??

</property> ??

<property> ? ??

<name>mapred.map.output.compression.codec</name> ? ? ?

<value>com.hadoop.compression.lzo.LzoCodec</value> ??

</property>

4. 安裝lzop,從 這里 下載

?

下面就是使用lzop壓縮log文件,并上傳到Hadoop上,執(zhí)行MapReduce操作,測(cè)試的Hadoop是由3個(gè)節(jié)點(diǎn)組成集群

lzop -v 2011041309.log

hadoop fs -put *.lzo /user/pvlog

#給Lzo文件建立Index

hadoop jar /opt/sohuhadoop/hadoop/lib/hadoop-lzo-0.4.10.jar com.hadoop.compression.lzo.LzoIndexer /user/pvlog/

寫(xiě)一個(gè)簡(jiǎn)單的MapReduce來(lái)測(cè)試,需要指定InputForamt為L(zhǎng)zo格式,否則對(duì)單個(gè)Lzo文件仍不能進(jìn)行Map的并行處理

job.setInputFormatClass(com.hadoop.mapreduce.LzoTextInputFormat.class);

可以通過(guò)下面的代碼來(lái)設(shè)置Reduce的數(shù)目:

job.setNumReduceTasks(8);

最終,12個(gè)文件被切分成了36個(gè)Map任務(wù)來(lái)并行處理,執(zhí)行時(shí)間為52s,如下圖:

Hadoop集群上使用Lzo壓縮

我們配置Hadoop默認(rèn)的Block大小是128M,如果我們想切分成更多的Map任務(wù),可以通過(guò)設(shè)置其最大的SplitSize來(lái)完成:

FileInputFormat.setMaxInputSplitSize(job, 64 *1024 * 1024);

最終,12個(gè)文件被切分成了72個(gè)Map來(lái)處理,但處理時(shí)間反而長(zhǎng)了,為59s,如下圖:

Hadoop集群上使用Lzo壓縮

而對(duì)于Gzip壓縮的文件,即使我們?cè)O(shè)置了setMaxInputSplitSize,最終的Map數(shù)仍然是輸入文件的數(shù)目12,執(zhí)行時(shí)間為78s,如下圖:

Hadoop集群上使用Lzo壓縮

從以上的簡(jiǎn)單測(cè)試可以看出,使用Lzo壓縮,性能確實(shí)比Gzip壓縮要好不少

Hadoop集群上使用Lzo壓縮


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 张掖市| 故城县| 濮阳市| 白沙| 永春县| 东方市| 茶陵县| 上林县| 星座| 军事| 永兴县| 自治县| 平安县| 黑水县| 慈溪市| 江孜县| 兰溪市| 甘泉县| 松溪县| 子长县| 苏州市| 大理市| 凤山县| 宜君县| 密云县| 寿光市| 祁阳县| 泸州市| 施秉县| 紫云| 怀仁县| 平潭县| 祁阳县| 闵行区| 土默特右旗| 广平县| 屯门区| 道孚县| 新河县| 当雄县| 钟祥市|