zoukankan      html  css  js  c++  java
  • Hadoop的SequenceFile读实例

     1 package com.mengyao.hadoop.hdfs;
     2 
     3 import java.io.IOException;
     4 
     5 import org.apache.hadoop.conf.Configuration;
     6 import org.apache.hadoop.fs.Path;
     7 import org.apache.hadoop.io.IntWritable;
     8 import org.apache.hadoop.io.SequenceFile;
     9 import org.apache.hadoop.io.SequenceFile.Reader;
    10 import org.apache.hadoop.io.Text;
    11 
    12 /**
    13  * 读取HDFS上SequenceFile格式文件。
    14  *
    15  *
    16  * SequeceFile是 Hadoop API提供的一种二进制文件支持。这种二进制文件直接将<key, value>对序列化到文件中。一般对小文件可以使用这种文件合并,即将文件名作为key,文件内容作为value序列化到大文件中。这种文件格式 有以下好处:
    17  *         1)支持压缩,且可定制为基于Record或Block压缩(Block级压缩性能较优)
    18  *         2)本地化任务支持:因为文件可以被切分,因此MapReduce任务时数据的本地化情况应该是非常好的。
    19  *         3)难度低:因为是Hadoop框架提供的API,业务逻辑侧的修改比较简单。
    20  *         坏处是需要一个合并文件的过程,且合并后的文件将不方便查看。
    21 
    22  * SequenceFile 是一个由二进制序列化过的key/value的字节流组成的文本存储文件,它可以在map/reduce过程中的input/output 的format时被使用。在map/reduce过程中,map处理文件的临时输出就是使用SequenceFile处理过的。
    23  * SequenceFile分别提供了读、写、排序的操作类。SequenceFile的操作中有三种处理方式:
    24  *         1) 不压缩数据直接存储。 //enum.NONE
    25  *         2) 压缩value值不压缩key值存储的存储方式。//enum.RECORD
    26  *         3)key/value值都压缩的方式存储。//enum.BLOCK
    27  *
    28  * 注意:存储在SequenceFile中的key和value不一定Hadoop的Writable序列化类型,只要是能被Java的Serializable序列化和反序列化的任意类型都可以。
    29  *
    30  * @author mengyao
    31  *
    32  */
    33 public class SequenceFileReader {
    34 
    35     public static void main(String[] args) throws IOException {
    36         args = new String[]{"/mapreduces/seqfile/book1.txt"};
    37         Configuration conf = new Configuration();
    38         Path seqFilePath = new Path(args[0]);
    39         
    40         SequenceFile.Reader reader = new SequenceFile.Reader(conf,
    41                 Reader.file(seqFilePath));
    42         IntWritable key = new IntWritable();
    43         Text value = new Text();
    44         while (reader.next(key, value)) {
    45             System.out.println(key +"\t"+ value);
    46         }
    47         reader.close();
    48         
    49     }
    50 
    51 }
  • 相关阅读:
    BZOJ 3236: [Ahoi2013]作业
    BZOJ 3234: [Ahoi2013]立方体
    BZOJ 3235: [Ahoi2013]好方的蛇
    Hadoop 系列HDFS的Java API( Java API介绍)
    Hadoop 系列 HDFS 的JavaAPI Windows+IDEA+HDFS快速入门
    Hadoop 系列 HDFS:分布式文件系统(HDFS参数解读)
    Hadoop 系列 HDFS:分布式文件系统(HDFS集群模式)
    Hadoop 系列 HDFS:分布式文件系统(HDFS文件读写)
    Hadoop 系列 HDFS:分布式文件系统( HDFS概述)
    Hadoop中DataNode没有启动解决办法
  • 原文地址:https://www.cnblogs.com/mengyao/p/4869338.html
Copyright © 2011-2022 走看看