设为首页 收藏本站
查看: 3224|回复: 0

[经验分享] hadoop,hive启用lzo压缩和创建lzo索引

[复制链接]

尚未签到

发表于 2018-11-1 06:10:09 | 显示全部楼层 |阅读模式
  启用lzo压缩对于小规模集群还是很有用的,压缩比率大概能达到原始日志大小的1/3。同时解压缩速度也比较快,Hadoop原生是支持gzip和bzip2压缩的,这两种压缩虽然压缩比率比lzo更大,但是在做map reduce解压缩的时候,慢的不能忍,所以通常不会用gzip或者bzip2。相同数据量,gzip的mr速度大概是lzo的1.5-2倍,而bzip2是lzo的3-4倍。
  不过lzo不比gzip和bzip2是linux系统原生支持的,需要下载软件包并安装。这里至少涉及三个软件包。lzo,lzop和hadoop-gpl-packaging。我们是使用hadoop-gpl-packaging,或者也可以使用一个叫kevinweil的包。
  gpl-packaging的作用主要是对压缩的lzo文件创建索引,否则的话,无论你的压缩文件是否大于HDFS的block大小,都只会按默认启动2个map操作,这是我们不愿意看到的事情。
  当然,要启用lzo,以下这些操作每个节点都是需要做的。
  下载编译lzo和lzop,这个就configure,make,make install就行了。
  然后 http://code.google.com/p/hadoop-gpl-packing/downloads/list 下载最新的rpm包,并安装,安装完成会创建/opt/hadoopgpl文件夹。
  接下来是具体步骤:
  1. 将/opt/hadoopgpl/lib下的所有文件复制到/usr/lib和/usr/lib64。
  2. 将/opt/hadoopgpl/native下的所有文件复制到/usr/share/hadoop/native,如果是tar包安装的hadoop,就复制到$HADOOP_HOME/lib下。
  理论上是不需要这步的,但是在使用过程中发现省略了会在mr的过程中报错,通常就是报找不到lzo的jar包。
  然后开始设置hadoop:
  core-site.xml
  



  •   io.compression.codecs
  •   org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec


  •   io.compression.codec.lzo.class
  •   com.hadoop.compression.lzo.LzoCodec

  

  使用lzo,lzop,gzip,bzip2压缩作为io压缩的编解码器,并指定lzo的类
  mapred-site.xml
  



  •   mapred.compress.map.output
  •   true


  •   mapred.map.output.compression.codec
  •   com.hadoop.compression.lzo.LzoCodec


  •   mapred.child.java.opts
  •   -Djava.library.path=/opt/hadoopgpl/native/Linux-amd64-64

  

  map结果采用压缩输出,可以降低网络带宽的使用,并指定map输出所使用的lzo的类。以及指定编解码器所在位置。
  创建lzo索引:
  


  • hadoop jar /opt/hadoopgpl/lib/hadoop-lzo.jar com.hadoop.compression.lzo.LzoIndexer /data/rawlog/your_log_file.lzo
  

  在streaming中使用lzo:
  


  • hadoop jar /usr/share/hadoop/contrib/streaming/hadoop-streaming-1.0.3.jar \
  • -file map.py \
  • -file red.py \
  • -mapper map.py \
  • -reducer red.py \
  • -inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat \
  • -input /data/rawlog/test/20130325 -output /tmp/test_20130325
  

  ----------------------------------------------------------
  以及在hive中指定压缩编解码器:
  hadoop集群启用了压缩,就需要在Hive建表的时候指定压缩时所使用的编解码器,否则Hive无法正确读取数据。
  Gzip和Bzip2由于是hadoop默认支持的,所以无需指定特殊的编解码器,只要指定Text类型即可。
  


  • CREATE EXTERNAL TABLE adpv_20130325(
  •   stat_date string,
  •   stat_hour string,
  •   ip string,
  •   logdate string,
  •   uid string,
  •   ver string,
  •   pid string,
  •   chid string,
  •   json string,
  •   country string,
  •   province string,
  •   city string,
  •   isp string)
  • ROW FORMAT DELIMITED
  •   FIELDS TERMINATED BY '\t'
  • STORED AS TEXTFILE
  • LOCATION
  •   'hdfs://hadoopmaster:9000/data/dw/adpv/20130325'
  

  而LZO是外挂的第三方库,所以要指定输入和输出的编解码器。
  


  • CREATE EXTERNAL TABLE adpv_20130325(
  •   stat_date string,
  •   stat_hour string,
  •   ip string,
  •   logdate string,
  •   uid string,
  •   ver string,
  •   pid string,
  •   chid string,
  •   json string,
  •   country string,
  •   province string,
  •   city string,
  •   isp string)
  • ROW FORMAT DELIMITED
  •   FIELDS TERMINATED BY '\t'
  • STORED AS INPUTFORMAT
  •   'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
  • OUTPUTFORMAT
  •   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
  • LOCATION
  •   'hdfs://hadoopmaster:9000/data/dw/adpv/20130325'
  

  至于你的日志,就用lzop在本地压缩好了,直接丢到hdfs上就可以了。
  另外,在做数据清洗的时候,假如源日志是lzo压缩的,输出的时候也希望使用lzo压缩。则在数据清洗的脚本中对hadoop的jobconf做一个指定。这样就可以做到,输入是lzo,输出也可以lzo。或者输入是text,输出是lzo。
  


  • -inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat -jobconf mapred.output.compress=true -jobconf mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec
  

  最后对清洗过的日志做Indexer就可以了,这样无论是Hive还是做MR,都可以把大文件分成多个map来并行计算。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629067-1-1.html 上篇帖子: 配置hadoop 下篇帖子: Hadoop之zookeeper快速安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表