我是靠谱客的博主 老迟到宝贝,最近开发中收集的这篇文章主要介绍spark下读写lzo文件(java),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、编译安装hadoop-lzo

这个网上已经说的很详细了,具体可以参考这个链接:

hadoop使用LZO压缩

http://running.iteye.com/blog/969800


2、具体如何配置lzo,上面的文档已经有了,但是为了讨论问题,这里再复制一下:

a、修改hadoop配置文件core-site.xml 

Xml代码 
  1. <property>  
  2.     <name>io.compression.codecs</name>  
  3.     <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,org.apache.hadoop.io.compress.BZip2Codec</value>  
  4.   </property>  
  5.   <property>  
  6.     <name>io.compression.codec.lzo.class</name>  
  7.     <value>com.hadoop.compression.lzo.LzoCodec</value>  
  8.   </property>  
b、 修改hadoop配置文件mapred-site.xml 

Xml代码 
  1. <property>  
  2.     <name>mapred.compress.map.output</name>  
  3.     <value>true</value>  
  4.   </property>  
  5.   <property>  
  6.     <name>mapred.map.output.compression.codec</name>  
  7.     <value>com.hadoop.compression.lzo.LzoCodec</value>  
  8.   </property>  

看到了吧,这两个地方最终压缩的编码格式都是com.hadoop.compression.lzo.LzoCodec


3、然后往hadoop写入相关文件,我用的是lzop格式,同时生成索引文件(java实现)

4、然后在spark中读取

	SparkConf conf = new SparkConf().setAppName("test");        
        JavaSparkContext sc = new JavaSparkContext(conf);
        Configuration configuration = new Configuration();
        configuration.set("mapred.output.compress", "true");
        configuration.set("mapred.output.compression.codec", "com.hadoop.compression.lzo.LzopCodec");
        String fileName = "hdfs://ip:port//data/.../.../*/info_credit_card.lzo";
        JavaPairRDD<LongWritable, Text> pairRDD =
            sc.newAPIHadoopFile(fileName,
                         LzoTextInputFormat.class,
                         LongWritable.class,
                         Text.class,
                         configuration);
pairRDD通过flatMap转为行,将会得到正确的值,并且已经做过分片;


疑惑:

1、在配置文件core-site.xml和mapred-site.xml都是lzoCodec,但是在读写的时候却必须用lzopCodec, 我试图直接用lzoCodec,却总是失败,而网上的例子都是lzopCodec ? 


2、当然,用lzo的Stream方式直接读写hdfs文件是没有问题的,但这样就无法使用JavaSparkContext的newAPIHadoopFile方法了,该方法可以直接按照规则匹配文件,生成分布式的rdd


最后

以上就是老迟到宝贝为你收集整理的spark下读写lzo文件(java)的全部内容,希望文章能够帮你解决spark下读写lzo文件(java)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部