Hadoop Sequence File 文件的读取和写入

本文介绍了Hadoop中SequenceFile的基本概念及其应用场景,并提供了写入和读取SequenceFile的具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File)。目前,也有不少人在该文件的基础之上提出了一些HDFS中小文件存储的解决方案,他们的基本思路就是将小文件进行合并成一个大文件,同时对这些小文件的位置信息构建索引。不过,这类解决方案还涉及到Hadoop的另一种文件格式——MapFile文件。SequenceFile文件并不保证其存储的key-value数据是按照key的某个顺序存储的,同时不支持append操作。在SequenceFile文件中,每一个key-value被看做是一条记录(Record),因此是基于Record的压缩策略.



写入代码

下面是写入了100条(key,value)的信息,其中以LongWriable为key,以Text作为value.

        Configuration config = new Configuration();
        FileSystem fs  = FileSystem.get(conf);
        int i = 0;
        Path path = new Path("/home/lake/hello.xml");
        SequenceFile.Writer writer = null;
        SequenceFile.Writer.Option optPath = SequenceFile.Writer.file(path);
        //定义key
        SequenceFile.Writer.Option optKey = SequenceFile.Writer.keyClass(LongWritable.class);
        //定义value
        SequenceFile.Writer.Option optVal = SequenceFile.Writer.valueClass(Text.class);

        writer = SequenceFile.createWriter(conf, optPath, optKey, optVal);
        //写入的数据可以根据你的情况来定,我这只是测试
        String value = "hello world";

        while(i < 100){
            writer.append(new LongWritable(i),new Text(value));
            i ++;
        }
        writer.close();
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

上面程序运行完成之后,就可以在指定的路径上看到产生的文件。

读取的代码
                Configuration config = new Configuration();
                FileSystem fs  = FileSystem.get(conf);
                Path path = new Path("/home/lake/hello.xml");
                SequenceFile.Reader reader = new SequenceFile.Reader(fs.getConf(), SequenceFile.Reader.file(path));
                List<Object> sampleValues = new ArrayList<Object>();
                Writable key = (Writable) ReflectionUtils.newInstance(reader.getKeyClass(), fs.getConf());
                Writable value = (Writable) ReflectionUtils.newInstance(reader.getValueClass(), fs.getConf());
                int count = 0;
                String keyName = "Key";
                String valueName = "Value";
                //change data to json format
                while (reader.next(key, value) && count < 12) {
sampleValues.add("{\"" + keyName + "\": \"" + key + "\", \"" + valueName + "\": \"" + value + "\"}");
                    count++;
                }
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值