private File getHfdsFileToTmpFile(String hdfsPath, HdfsConfiguration configuration) {
      try {
        String fname = hdfsPath.substring(hdfsPath.lastIndexOf('/'));

        File outputDest = File.createTempFile(fname, ".hdfs");
        if (outputDest.exists()) {
          outputDest.delete();
        }

        HdfsInfo hdfsInfo = HdfsInfoFactory.newHdfsInfo(hdfsPath);
        FileSystem fileSystem = hdfsInfo.getFileSystem();
        FileUtil.copy(fileSystem, new Path(hdfsPath), outputDest, false, fileSystem.getConf());
        try {
          FileUtil.copyMerge(
              fileSystem, // src
              new Path(hdfsPath),
              FileSystem.getLocal(new Configuration()), // dest
              new Path(outputDest.toURI()),
              false,
              fileSystem.getConf(),
              null);
        } catch (IOException e) {
          return outputDest;
        }

        return new File(outputDest, fname);
      } catch (IOException ex) {
        throw new RuntimeCamelException(ex);
      }
    }
 @Override
 public Closeable createInputStream(String hdfsPath, HdfsConfiguration configuration) {
   try {
     Closeable rin;
     HdfsInfo hdfsInfo = HdfsInfoFactory.newHdfsInfo(hdfsPath);
     rin = new ArrayFile.Reader(hdfsInfo.getFileSystem(), hdfsPath, hdfsInfo.getConf());
     return rin;
   } catch (IOException ex) {
     throw new RuntimeCamelException(ex);
   }
 }
 @Override
 public Closeable createOutputStream(String hdfsPath, HdfsConfiguration configuration) {
   try {
     Closeable rout;
     HdfsInfo hdfsInfo = HdfsInfoFactory.newHdfsInfo(hdfsPath);
     if (!configuration.isAppend()) {
       rout =
           hdfsInfo
               .getFileSystem()
               .create(
                   hdfsInfo.getPath(),
                   configuration.isOverwrite(),
                   configuration.getBufferSize(),
                   configuration.getReplication(),
                   configuration.getBlockSize(),
                   new Progressable() {
                     @Override
                     public void progress() {}
                   });
     } else {
       rout =
           hdfsInfo
               .getFileSystem()
               .append(
                   hdfsInfo.getPath(),
                   configuration.getBufferSize(),
                   new Progressable() {
                     @Override
                     public void progress() {}
                   });
     }
     return rout;
   } catch (IOException ex) {
     throw new RuntimeCamelException(ex);
   }
 }
 @Override
 public Closeable createInputStream(String hdfsPath, HdfsConfiguration configuration) {
   try {
     Closeable rin;
     if (configuration.getFileSystemType().equals(HdfsFileSystemType.LOCAL)) {
       HdfsInfo hdfsInfo = HdfsInfoFactory.newHdfsInfo(hdfsPath);
       rin = hdfsInfo.getFileSystem().open(hdfsInfo.getPath());
     } else {
       rin = new FileInputStream(getHfdsFileToTmpFile(hdfsPath, configuration));
     }
     return rin;
   } catch (IOException ex) {
     throw new RuntimeCamelException(ex);
   }
 }
 @SuppressWarnings("rawtypes")
 @Override
 public Closeable createOutputStream(String hdfsPath, HdfsConfiguration configuration) {
   try {
     Closeable rout;
     HdfsInfo hdfsInfo = HdfsInfoFactory.newHdfsInfo(hdfsPath);
     Class<? extends WritableComparable> valueWritableClass =
         configuration.getValueType().getWritableClass();
     rout =
         new ArrayFile.Writer(
             hdfsInfo.getConf(),
             hdfsInfo.getFileSystem(),
             hdfsPath,
             valueWritableClass,
             configuration.getCompressionType(),
             new Progressable() {
               @Override
               public void progress() {}
             });
     return rout;
   } catch (IOException ex) {
     throw new RuntimeCamelException(ex);
   }
 }