 private class S3NFsOutputStream extends OutputStream{
 
         private OutputStream localFileStream;
         private AmazonS3Client s3Client;
         private LocalDirAllocator localDirAllocator;
         private Configuration configuration;
         private File backingFile;
         private BufferedOutputStream bufferedOutputStream;
         private String bucket;
         private String key;
 
 
         public S3NFsOutputStream(AmazonS3Client s3, Configuration conf, String bucket, String key) throws IOException{
             super();
             this.s3Client = s3;
             this.configuration = conf;
             this.localDirAllocator = new LocalDirAllocator("${hadoop.tmp.dir}/s3mh");
 
             this.backingFile = localDirAllocator.createTmpFileForWrite("temp", LocalDirAllocator.SIZE_UNKNOWN, conf);
             this.bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(this.backingFile));
             this.bucket = bucket;
             this.key = key;
         }
 
 
         @Override
         public void write(int b) throws IOException {
             this.bufferedOutputStream.write(b);
         }
 
         @Override
         public void write(byte[] b) throws IOException {
             this.bufferedOutputStream.write(b);
         }
 
         @Override
         public void write(byte[] b, int off, int len) throws IOException {
             this.bufferedOutputStream.write(b, off, len);
         }
 
         @Override
         public void flush() throws IOException {
             if(this.bufferedOutputStream != null){
                 this.bufferedOutputStream.flush();
             }
         }
 
         @Override
         public void close() throws IOException {
 
             if(this.bufferedOutputStream != null){
                 this.bufferedOutputStream.close();
             }
 
 
             try {
                 PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, key, backingFile);
                 putObjectRequest.setCannedAcl(CannedAccessControlList.Private);
 
                 s3Client.putObject(putObjectRequest);
             }
             catch(AmazonServiceException ase){
                 ase.printStackTrace();
             }
 
         }
     }
 
 }
 
 
