spark下读写lzo文件(java)
2015-10-15 16:52
579 查看
1、编译安装hadoop-lzo
这个网上已经说的很详细了,具体可以参考这个链接:
http://running.iteye.com/blog/969800
2、具体如何配置lzo,上面的文档已经有了,但是为了讨论问题,这里再复制一下:
a、修改hadoop配置文件core-site.xml
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,org.apache.hadoop.io.compress.BZip2Codec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
b、修改hadoop配置文件mapred-site.xml
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>
看到了吧,这两个地方最终压缩的编码格式都是com.hadoop.compression.lzo.LzoCodec
3、然后往hadoop写入相关文件,我用的是lzop格式,同时生成索引文件(java实现)
4、然后在spark中读取
疑惑:
1、在配置文件core-site.xml和mapred-site.xml都是lzoCodec,但是在读写的时候却必须用lzopCodec, 我试图直接用lzoCodec,却总是失败,而网上的例子都是lzopCodec
?
2、当然,用lzo的Stream方式直接读写hdfs文件是没有问题的,但这样就无法使用JavaSparkContext的newAPIHadoopFile方法了,该方法可以直接按照规则匹配文件,生成分布式的rdd
这个网上已经说的很详细了,具体可以参考这个链接:
hadoop使用LZO压缩
http://running.iteye.com/blog/9698002、具体如何配置lzo,上面的文档已经有了,但是为了讨论问题,这里再复制一下:
a、修改hadoop配置文件core-site.xml
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,org.apache.hadoop.io.compress.BZip2Codec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
b、修改hadoop配置文件mapred-site.xml
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>
看到了吧,这两个地方最终压缩的编码格式都是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
相关文章推荐
- java 代理 进程ID
- java socket 客户端和服务端通信
- Java 读取txt文件,读取结果保存到数据库
- java 读取文件 乱码
- java线程同步(生产者消费者应用-模拟叫号系统)
- 浅谈java异常[Exception]
- Java指定编码格式读写文件
- Java String 常用方法
- jdk环境变量配置
- Java NIO2:NIO概述
- Java NIO:浅析I/O模型
- Java FileInputStream与FileReader的区别
- java.lang.OutOfMemoryError处理
- Spring@Autowired注解与自动装配
- Java 动态代理
- javax.naming.NamingException: Cannot create resource instance
- java开源验证框架OVAL帮助文档
- Spring Boot实践之Hello World
- JavaWeb中文乱码问题
- java--通过JDBC方式读取xml文件简单实例