HDFS文本格式转化为Sequenfile

//这里使用SequenceFile的原因是有同步点,希望不会出现一条记录跨数据块的情况,我处理比较方便.
但是好像这个也会出现此类情况。。。。 只有改Writer了
package examples;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.SequenceFile.*;
import org.apache.hama.bsp.LineRecordReader;
import org.apache.hama.bsp.RecordReader;

public class FileFormatConvert {
	
	 public static void write2SequenceFile(Path inputFile, Path outputFile) {  
		    //读取输入文件的所有记录,依次转化为SequenceFile格式输出
		    FileSystem hdfs;
	        RecordReader<LongWritable, Text> reader ;
	        Writer writer = null ;
	        conf.set("fs.default.name", "hdfs://localhost:9000/");
	        try {  
	           	hdfs = (DistributedFileSystem) FileSystem.get(conf);
		        writer = SequenceFile.createWriter(hdfs, conf, outputFile,  
	            		Text.class, Text.class,,CompressionType.NONE); 
		        
		        FSDataInputStream dis = hdfs.open(inputFile);
		        reader  = new LineRecordReader(dis,0,  hdfs.getFileStatus(inputFile).getLen() , conf) ;
		        LongWritable key = reader.createKey();
		        Text value = reader.createValue();
		        while(reader.next(key, value))
		        {
		        	String[] keyValue = value.toString().split(" ") ;
		        	writer.append(new Text(keyValue[0]), new Text(keyValue[1])); 
		        }
	        } catch (IOException e) {  
	            e.printStackTrace();  
	        } finally {  
	            IOUtils.closeStream(writer);  
	        }  
	    }  
	
	public static void main(String[] args) {
		Path inputFile = new Path("hdfs://localhost:9000/test/test.txt") ;
		Path outputFile = new Path("hdfs://localhost:9000/liuqiang2/test.seq") ;
        write2SequenceFile(inputFile, outputFile) ;
  	}

	static Configuration conf = new Configuration();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值