存储文件:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;
public class SequenceFileWrite {
public static void main(String[] args) throws IOException {
String src = "E:\\test\\spring3_MVC.docx";
InputStream in = new BufferedInputStream(new FileInputStream(src));
String uri = "hdfs://localhost:9000/home/hdfs/spring.seq";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);
Path path = new Path(uri);
Text key = new Text();
Text value = new Text();
SequenceFile.Writer writer = null;
try {
//返回一个SequenceFile.Writer实例 需要数据流和path对象 将数据写入了path对象
writer = SequenceFile.createWriter(fs, conf, path,key.getClass(), value.getClass());
int len = 0;
byte[] buff = new byte[1024];
key.set("spring.docx");
while ((len = in.read(buff))!= -1) {
value.set(buff,0,len);
writer.append(key, value);//将每条记录追加到SequenceFile.Writer实例的末尾
value.clear();
}
} finally {
IOUtils.closeStream(writer);
IOUtils.closeStream(in);
}
}
}
读取文件:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.util.ReflectionUtils;
public class SequenceFileReader {
public static void main(String[] args) throws IOException {
String uri = "hdfs://localhost:9000/home/hdfs/spring.seq";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);
Path path = new Path(uri);
SequenceFile.Reader reader = null;
String dst = "e:\\test\\spring.docx";
OutputStream out = null;
try {
reader = new SequenceFile.Reader(fs, path, conf);
//返回 SequenceFile.Reader 对象 getKeyClass()获得Sequence中使用的类型
Writable key = (Writable) ReflectionUtils.newInstance(reader.getKeyClass(), conf);
out =new FileOutputStream(dst);
Text value = new Text();
while (reader.next(key, value)) { //next()方法迭代读取记录 直到读完返回false
System.out.println(key);
out.write(value.getBytes(),0,value.getLength());//这个长度一定要添加,否则不兼容office2007
value.clear(); //记着清除一下,不然可能会出现多余的输出
}
out.flush();
} finally {
IOUtils.closeStream(reader);
IOUtils.closeStream(out);
}
}
}
分享到:
相关推荐
SequenceFile的优点是可以高效地存储和读取大量小文件,同时也可以对小文件进行排序、压缩和加密等操作。 SequenceFile的基本结构由三部分组成:文件头、记录和文件尾。文件头中存储了SequenceFile的元数据,记录...
索引文件包含一小部分键及其对应的偏移量,使得可以快速定位到数据。这对于那些需要随机访问数据而不是顺序扫描的场景非常有用。 `TestMapFile.java`可能包含了创建MapFile,使用索引进行查找,以及读取MapFile中...
在Hadoop大数据处理环境中,SequenceFile和MapFile都是常见的数据存储格式。SequenceFile是一种二进制文件格式,常用于存储键值对数据,适合大规模数据的处理和传输。MapFile则是SequenceFile的一种优化形式,它增加...
二是HDFS设计上的局限,其优化面向的是大文件的流式访问,而非频繁的小文件操作。小文件的读取往往需要多次磁盘寻道和数据跳跃,效率低下。 在MapReduce中,小文件问题更为突出。默认情况下,每个Map Task处理一个...
2. **SequenceFile封装**:接下来,使用Hadoop的SequenceFile API将这些小文件封装成一个单一的SequenceFile。SequenceFile允许高效地存储和检索键值对,且支持压缩,可以显著提高数据存储和传输的效率。在实验中,...
SequenceFile是Hadoop最基本的存储格式之一,它是二进制的键值对文件。SequenceFile支持各种类型的键值对,通过序列化和反序列化进行数据的读写。在上述代码示例中,`WriteSeqFileMapper`类展示了如何使用MapReduce...
- SequenceFile Writer:使用Hadoop的`SequenceFile.Writer`类来写入键值对到SequenceFile中,需要配置正确的键和值类型,以及文件路径。 4. **META-INF目录**: 这个目录通常包含关于软件包的信息,比如类库的元...
在Hadoop中,我们主要关注与文件操作相关的`FSDataInputStream`和`FSDataOutputStream`,它们分别代表了HDFS的输入流和输出流。这两个类继承自Java的`InputStream`和`OutputStream`,并增加了对HDFS操作的支持。 1....
(2) 使用Hadoop的SequenceFile、Avro或Parquet等格式,这些格式能更高效地处理小文件;(3) 使用HBase等NoSQL数据库进行数据存储,它们更适用于大量小键值对。 5. **NCDC数据应用**:NCDC的气候数据可以用于多种分析...
3. **创建SequenceFile**:Hadoop的SequenceFile是一种高效的数据存储格式,适合用于合并小文件。创建一个新的SequenceFile,作为合并后的大文件的目标。 4. **读取和写入数据**:遍历获取的文件列表,使用`...
归档(Archiving)在Hadoop中通常指的是将大量的小文件进行合并,以提高HDFS(Hadoop Distributed File System)的存储效率和MapReduce操作的性能。在"hadop 归档源代码"中,我们可以深入理解Hadoop如何实现这一功能...
- **文件基数据结构**:Hadoop 支持多种文件基数据结构,如 SequenceFile 和 MapFile,这些结构有助于更高效地访问和处理大数据集。 #### 5. 进阶MapReduce主题 - **排序和连接数据**:MapReduce 可以用来对大型...
4. **数据存储与序列化**:Hadoop使用`org.apache.hadoop.io`包处理数据的存储和序列化,包括各种基本类型(如IntWritable、Text等)和复杂的可序列化对象(如SequenceFile、Avro等)。 5. **配置管理**:`org....
Hadoop文件系统 接口 Java接口 从Hadoop URL中读取数据 通过FileSystem API读取数据 写入数据 目录 查询文件系统 删除数据 数据流 文件读取剖析 文件写入剖析 一致模型 通过 distcp并行...
在处理大量小文件时,Sequence File可以作为合并工具,将多个小文件合并成大文件,减少HDFS中的小文件数量,提高存储效率和读取性能。通过编写MapReduce作业,可以批量合并HDFS上的Sequence Files。 总之,...
Hadoop文件系统 接口 Java接口 从Hadoop URL中读取数据 通过FileSystem API读取数据 写入数据 目录 查询文件系统 删除数据 数据流 文件读取剖析 文件写入剖析 一致模型 通过 distcp并行拷贝 保持 HDFS 集群的均衡 ...
- 使用特定的技术手段如SequenceFile或CombineFile等,将多个小文件打包成一个较大的文件进行存储。 #### 四、Hadoop学习路径 - **知识点概述**:针对初学者,推荐从实践中学习Hadoop技术,包括搭建Hadoop环境、...
7. **数据分桶与合并**:在Hadoop中,数据分桶是一种提高I/O效率的方法,它将小文件合并到大文件中,减少磁盘寻道次数。`SequenceFile`和`Avro`等格式支持高效的分桶处理。 8. **YARN(Yet Another Resource ...
Spark-SequenceFile 及 MapFile 是 Hadoop 的两个重要组件,分别用于解决小文件处理效率低下的问题和提供高效的数据存储方式。下面将详细介绍这两个组件的概念、特点和应用。 一、SequenceFile SequenceFile 是一...