JAVA 读取lzo压缩文件
今天犯了一个愚蠢的问题,用lzo做过压缩的数据,用lzop去读,但疼痛了好一会儿。
lzopcode和lzocode的做个简单介绍:
1.lzocode压缩过的文件都是以.lzo_deflate结尾,相应的加载类:(com.hadoop.compression.lzo.LzoCodec)
2.zopcode压缩过的文件都以.lzo结尾(com.hadoop.compression.lzo.LzopCodec)
读取lzocode文件
private static Configuration conf = new Configuration(true);
private static FileSystem hdfs;
private static Class<?> codecClass ;
private static CompressionCodec codec;
static {
String path = "/usr/local/webserver/hadoop/etc/hadoop/";
conf.addResource(new Path(path + "core-site.xml"));
conf.addResource(new Path(path + "hdfs-site.xml"));
//加载解压lzo的class,对应的还有lzop的class
codecClass = Class.forName("com.hadoop.compression.lzo.LzoCodec");
codec = (CompressionCodec)ReflectionUtils.newInstance(codecClass, conf);
}
public List<String> readFile(String dir) {
InputStream input = null;
List<String> list = new LinkedList<String>();
try {
Path path = new Path(dir);
FileSystem hdfs = FileSystem.get(URI.create(dir),conf);
//获取hdsf上文件夹下面的文件
FileStatus[] fileStatus = hdfs.listStatus(path);
//遍历文件,逐一读取内容
for (int i = 0; i < fileStatus.length; i++) {
input = hdfs.open(new Path(fileStatus[i].getPath().toString()));
//解压缩流
input = codec.createInputStream(input);
list.addAll(IOUtils.readLines(input,"utf8"));
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(input != null)
input.close();
hdfs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
分享到:
相关推荐
Lzo压缩速度快,但解压缩速度较慢,通常在需要快速写入数据而不太关心读取性能的场景下使用。 压缩算法的选择取决于具体的应用需求,如压缩效率、解压速度以及对压缩比的需求。在实际应用中,可能还需要考虑其他...
在Spark作业执行时,它会自动加载此JAR包,为Pyspark提供读取和写入LZO压缩文件的能力。确保将此文件放到`spark\jars`目录后,Spark的配置应该能够识别并使用其中的类。 在Pyspark中读取LZO压缩的文件,可以使用...
2. 数据压缩:Hadoop LZO提供了一种名为`LZOFileFormat`的文件格式,可以用来创建和读取LZO压缩的文件。通过设置`mapreduce.output.fileoutputformat.class`属性为`com.hadoop.compression.lzo.LZOFileOutputFormat`...
在HBase中,LZO压缩可以减少磁盘空间的占用,加快数据的读取和写入速度。 接下来,我们来探讨如何在HBase环境中安装和编译LZO: 1. **下载源码**:首先,你需要从官方网站或者GitHub上下载`hadoop-lzo`的源代码,...
Hadoop-LZO项目可能包含了Hadoop与LZO之间的集成代码,使用户能够方便地在Hadoop作业中读写LZO压缩的数据。`hadoop-lzo-master.zip`很可能是该项目的源码仓库,包含了编译和配置Hadoop-LZO所需的所有文件。 ...
在Hadoop的类路径中添加这个JAR文件后,就可以在MapReduce任务或者HDFS操作中使用LZO压缩功能。 3. `hadoop-lzo-0.4.21-SNAPSHOT-sources.jar`:这个文件包含了Hadoop-LZO的源代码,对于开发者来说非常有用,因为...
6. 更新Hadoop配置文件(如`core-site.xml`),添加对LZO压缩的支持,指定相关的压缩格式和编码器。 7. 重启Hadoop服务,使新的配置生效。 完成上述步骤后,Hadoop集群就可以使用LZO压缩功能了。在HDFS上存储数据时...
在LZO压缩算法中,数据流可以被连续读取、压缩和写入,而无需预先加载整个文件到内存中,这使得LZO适用于处理大文件和实时数据。 **内容详解:** LZO算法的核心在于查找重复的字节序列,并用较短的编码表示这些...
`hadoop-lzo`是Hadoop与LZO集成的库,包含了Hadoop读写LZOP压缩文件所需的Java类。在Hadoop集群上部署`hadoop-lzo`库,确保所有节点都能访问到。通常,你可以在所有节点上执行以下步骤: 1. 将`hadoop-lzo`的jar包...
`InputFormat`会解析压缩文件,将压缩块转化为可以被Map任务处理的记录。`OutputFormat`则会在Reduce阶段结束后,将结果数据压缩后再写入到HDFS。 此外,为了使程序能正确运行,还需要正确配置Hadoop的环境变量,...
2. **压缩**:Parquet支持多种压缩算法,如Snappy、Gzip和LZO,这可以显著减少存储空间。 3. **多级编码**:Parquet采用不同的编码技术(如RLE、Delta、Bit-Packing)对数据进行编码,进一步提升读取效率。 4. **跨...
例如,对于Huffman压缩,可以创建自定义的数据结构来存储字符频率和构建哈夫曼树,同时编写读写文件的函数来处理编码和解码过程。而对于LZ系列算法,可能需要实现滑动窗口机制,并设计匹配算法来寻找重复模式。 ...
4. **Java读取Parquet文件** - 使用`ParquetFileReader`和`ParquetRecordReader`可以逐行读取Parquet文件中的数据。 - 示例代码: ```java ParquetFileReader reader = ParquetFileReader.open(HadoopInputFile....
而Snappy则是一种高效的压缩和解压缩算法,最初由Google开发,主要用于提高数据读写速度,尤其是在大数据处理环境中。Hadoop与Snappy的结合,旨在优化Hadoop集群的数据传输效率。 在Hadoop中集成Snappy,可以显著...
5. **Bzip2和Lzo压缩库**:Hadoop支持数据压缩,其中Bzip2和Lzo是两种常见的压缩算法,这些压缩库在本地环境下可以提供更快的压缩和解压缩速度。 6. **SSL和加密库**:为了实现安全的数据传输,Hadoop使用了OpenSSL...
例如,在`HbaseCommons.java`这个文件中,可能包含了HBase操作的一些常见方法,如连接HBase集群、创建表、写入数据、读取数据等。通过阅读源码,我们可以了解这些操作的具体实现,这对于调试和优化HBase应用非常有...
Lzo压缩由`LzoCodec`处理,它使用了Lzop工具的压缩格式,通过JNI(Java Native Interface)调用C++的LZO库进行高效压缩。SnappyCodec,用于Google的Snappy压缩算法,同样通过JNI与C++库交互,以提供快速的压缩和解...
5. **LZO** 和 **Snappy**:是两种高效的压缩算法,Hadoop支持这两种压缩格式,以提高数据读写速度。 6. **JVM Bindings**:这些库使Hadoop能够与Java虚拟机(JVM)进行通信,实现如垃圾回收、线程管理等操作。 当...
3. **直接操作**:用户还可以在编程时(如使用Java API)指定使用Snappy压缩和解压缩数据。 在大数据分析和处理的场景下,虚拟机(VM)经常被用来运行Hadoop集群,因为它们可以方便地部署、扩展和隔离资源。在下载...
LZO压缩后的文件可拆分,适合文本文件压缩。Gzip提供较高的压缩比,但写入速度较慢,读取性能接近Snappy,通常与特定文件格式结合使用。bzip2压缩性能最优,但解压速度慢,适用于空间有限的场景。 【HDFS优化】 ...