2011年4月

Hadoop集群上使用Lzo压缩

自从Hadoop集群搭建以来,我们一直使用的是Gzip进行压缩

当时,我对gzip压缩过的文件和原始的log文件分别跑MapReduce测试,最终执行速度基本差不多

而且Hadoop原生支持Gzip解压,所以,当时就直接采用了Gzip压缩的方式

关于Lzo压缩,twitter有一篇文章,介绍的比较详细,见这里

Lzo压缩相比Gzip压缩,有如下特点:

  1. 压缩解压的速度很快
  2. Lzo压缩是基于Block分块的,这样,一个大的文件(在Hadoop上可能会占用多个Block块),就可以由多个MapReduce并行来进行处理

虽然Lzo的压缩比没有Gzip高,不过由于其前2个特性,在Hadoop上使用Lzo还是能整体提升集群的性能的

我测试了12个log文件,总大小为8.4G,以下是Gzip和Lzo压缩的结果:

  1. Gzip压缩,耗时480s,Gunzip解压,耗时180s,压缩后大小为2.5G
  2. Lzo压缩,耗时160s,Lzop解压,耗时110s,压缩后大小为4G

以下为在Hadoop集群上使用Lzo的步骤:

1. 在集群的所有节点上安装Lzo库,可从这里下载

cd /opt/ysz/src/lzo-2.04

./configure --enable-shared

make

make install

#编辑/etc/ld.so.conf,加入/usr/local/lib/后,执行/sbin/ldconfig

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

#如果没有这一步,最终会导致以下错误:

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本地库以及Jar包,从这里下载

    export CFLAGS=-m64

    export CXXFLAGS=-m64

    ant compile-native tar

    #将本地库以及Jar包拷贝到hadoop对应的目录下,并分发到各节点上

    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. 设置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上,执行MapReduce操作,测试的Hadoop是由3个节点组成集群

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/

写一个简单的MapReduce来测试,需要指定InputForamt为Lzo格式,否则对单个Lzo文件仍不能进行Map的并行处理

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

可以通过下面的代码来设置Reduce的数目:

job.setNumReduceTasks(8);

最终,12个文件被切分成了36个Map任务来并行处理,执行时间为52s,如下图:

我们配置Hadoop默认的Block大小是128M,如果我们想切分成更多的Map任务,可以通过设置其最大的SplitSize来完成:

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

最终,12个文件被切分成了72个Map来处理,但处理时间反而长了,为59s,如下图:

而对于Gzip压缩的文件,即使我们设置了setMaxInputSplitSize,最终的Map数仍然是输入文件的数目12,执行时间为78s,如下图:

从以上的简单测试可以看出,使用Lzo压缩,性能确实比Gzip压缩要好不少

厦门福州5日游

趁着我最近在福州出差,同时又赶上了清明小长假

昕昕妈和昕昕分别各请了3天假,和昕昕奶奶一起来厦门福州玩了几天

以下是这几天的流水账:

1. 4月3日,我先在网上查了厦门旅游的一些攻略,并订了2天的宾馆,鼓浪屿联票和船游金门的票

2. 4月4日,3人乘坐海南航空航班HU7771,直接从北京飞抵厦门,我则从福州乘坐动车到了厦门

  • 中午11点多到了住宿的宾馆,安置好后,在附近吃了午餐
  • 乘坐公交车,到了南普陀寺,昕昕上车后没多久就睡着了,下车后还没有睡醒,我只好抱着他坐在台阶上。等这小子睡醒后,就去了寺里转了转,上了一柱香,又买了2盒南普陀寺产的素饼,品尝了一下,确实不错。由于时间比较紧,就没有爬寺后面的那个小山。
  • 接着从南普陀寺直接到了厦大,果然名不虚传,校园的风景很漂亮,绿化很好,还有一个小湖,“谈情说爱在厦大"......
  • 穿过厦大后,就直接到了海滩边,昕昕见到了那么多的沙子和大海,很是开心,就一直沿着海边的沙子上边走边玩
  • 等到了胡里山炮台那,正打算买票进去时,售票员说5点半关门,再一看时间已经5点了,所以后来也就没有进去
  • 晚上,坐车到了中山路步行街,排了好长的对去买了有名的糍粑,然后在“巷口鱼丸”那品尝了鱼丸汤,海蛎饼...

3. 4月5日,主玩鼓浪屿

  • 早上坐车到了轮渡站,乘坐免费渡船,登上了传说的鼓浪屿
  • 刚开始跟着其它的旅游团瞎走了一通,看了一堆的领事馆,监狱,还有其它的一些特色建筑,并参观了毓园
  • 之后,到了日光岩的正门取票,日光岩还是不错的,在里面参观了郑成功纪念馆,昕昕在几个大炮那里玩了好久,然后爬上了日光岩的顶峰,还是挺吓人的,一块大石头矗立在上面,大家都通过狭窄的栏杆爬上去
  • 接着,坐了索道从日光岩直达百鸟园,听到了很多清脆悦耳的鸟叫声,里面有好多美丽的孔雀,有几个还现场开屏了
  • 中午,在海滩边的一个海鲜店吃的饭,价格很贵,点了4个螃蟹,结果里面也没啥东西,基本上就能从腿上吃点肉,吃完饭后,昕昕又开始午睡了......
  • 接着又去了菽庄花园,原是地方名绅林尔嘉的私人别墅,里面有四十四桥,观鱼台,渡月亭,钢琴博物馆,十二洞天
  • 之后又到了皓月园附近的沙滩,海风有些大,不过昕昕玩沙子的热情还是很高,最后怎么叫都不愿意走
  • 最后去了皓月园,看到了高15米的郑成功石雕像
  • 晚上,坐车去了“小眼睛大排档”,人果然居多,在外面排号,等了15分钟后,终于有座位了,它的海鲜做的确实不错,价格又不贵,难怪有那么多的人,我们还喝了一大瓶的芒果汁,很给力,昕昕妈还以为这个是免费送的呢,结账时才知道一瓶42元,虽然贵点,但还是挺值的

4. 4月6日,活动比较多

  • 早上,先到了轮渡那边,坐上了游船,开往金门岛附近。整个船的商业气息太浓了,船上靠窗的作为都是要喝茶才能坐的,不过后来大家也都没管那么多了,也直接坐那了。在距离金门岛100多米的地方,船停了大概10分钟,大家在“三民主义统一中国”的标语前照相后,就原路返回了
  • 之后,坐公交车又到了厦大附近的海滩,一家3口脱了鞋子,光着脚丫子在沙滩上玩,晒着暖暖的太阳,吹着海风,那种感觉真是不错......
  • 中午,在沙滩附近的海滨参观吃饭
  • 接着,就乘公交车到海那边的集美学村,昕昕在公交上睡了一路,下车后已经2点多了,就沿着小路,经过了“集美学村”,到了“龙舟池”,可惜里面水都干涸了,转了一圈后,就赶紧又坐上公交,赶赴火车站
  • 下午6点13分,坐上了到福州的动车,厦门之旅就这样结束了...

5. 4月7日:我上班了,他们3人去了鼓山,据他们说该山挺普通的,然后每人花了40元进去了涌泉寺。晚上,带着昕昕去了温泉公园,好多人在跳舞和唱歌(福州人的生活过的还是挺滋润的),昕昕在广场里看了会喷泉,又玩了半天的滑梯。这小子第二天早上醒来时说了句“玩的我都不想回去了”,呵呵

6. 4月8日:他们3人上午去了马尾那边的船政博物馆,好像也没什么意思,中午就回来了,下午昕昕妈带着昕昕去泡温泉了,小家伙据说泡的也还挺开心的

7. 4月9日:

  • 上午,一起去了西湖公园,公园还是不错的,逛了一圈后,又带着昕昕去了儿童乐园,玩了一次“激流涌进”,往回走的路上,他自己边走边说“真开心”
  • 下午,送他们去火车站,坐上了Z60,离开了福州

这次玩的还是挺好的,尤其是昕昕,整个这几天就一直跟着大家走,爬山,玩沙子,逛公园,基本没让人抱过...

厦门还是很值得去玩的,尤其是鼓浪屿,可惜的是,现在温度比较低,没能下海,要是夏天过去的话,就更爽了...

最新文章

最近回复

  • feifei435:这两个URI实际是不一样的
  • zsy: git push origin 分支 -f 给力!
  • 冼敏兵:简单易懂,good fit
  • Jack:无需改配置文件,看着累! # gluster volume se...
  • Mr.j:按照你的方法凑效了,折腾死了。。。。
  • zheyemaster:补充一句:我的网站路径:D:\wamp\www ~~菜鸟站长, ...
  • zheyemaster:wamp2.5(apache2.4.9)下局域网访问403错误的...
  • Git中pull对比fetch和merge | 炼似春秋:[…] 首先,我搜索了git pull和git fe...
  • higkoo:总结一下吧, 性能调优示例: gluster volume s...
  • knowaeap:请问一下博主,你维护的openyoudao支持opensuse吗

分类

归档

其它