package com.cloudera.sa.hcu.io.get;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.serde2.columnar.BytesRefArrayWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Writable;
public class GetSequenceFile extends AbstractGetter
{
public static void main(String[] args) throws Exception
{
(new GetSequenceFile()).getFile(args);
}
@Override
public void getFile(String[] args) throws Exception
{
if (args.length < 2)
{
System.out.println("Get Sequence File:");
System.out.println();
System.out.println("Parameter: <hdfs input file path> <local output data file path>");
}
String inputLocation = args[0];
String outputLocation = args[1];
Configuration config = new Configuration();
FileSystem hdfs = FileSystem.get(config);
Path inputFilePath = new Path(inputLocation);
SequenceFile.Reader.file(inputFilePath);
SequenceFile.Reader reader = new SequenceFile.Reader(config, SequenceFile.Reader.file(inputFilePath));
BufferedWriter localDataWriter = new BufferedWriter(new FileWriter(new File(outputLocation)));
Writable key = createWriter(reader.getKeyClass());
Writable val = createWriter(reader.getValueClass());
try
{
LongWritable next = new LongWritable(1);
BytesRefArrayWritable row = new BytesRefArrayWritable();
while (reader.next(key, val))
{
localDataWriter.write(key + "\t" + val);
localDataWriter.newLine();
this.onWritenRecord();
}
}finally
{
localDataWriter.close();
reader.close();
}
this.onFinishedWriting();
}
private Writable createWriter(Class cls) throws InstantiationException, IllegalAccessException
{
if (cls.equals(NullWritable.class) == true)
{
return NullWritable.get();
}else
{
return (Writable)cls.newInstance();
}
}
}