/** * Attempts to create a file. Overwrite will not succeed if the path exists and is a folder. * * @param path path to create * @param permission permissions of the created file/folder * @param overwrite overwrite if file exists * @param bufferSize the size in bytes of the buffer to be used * @param replication under filesystem replication factor * @param blockSize block size in bytes * @param progress queryable progress * @return an {@link FSDataOutputStream} created at the indicated path of a file * @throws IOException if overwrite is not specified and the path already exists or if the path is * a folder */ @Override public FSDataOutputStream create( Path path, FsPermission permission, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) throws IOException { LOG.info( "create({}, {}, {}, {}, {}, {}, {})", path, permission, overwrite, bufferSize, replication, blockSize, progress); if (mStatistics != null) { mStatistics.incrementWriteOps(1); } // Check whether the file already exists, and delete it if overwrite is true AlluxioURI uri = new AlluxioURI(HadoopUtils.getPathWithoutScheme(path)); try { if (mFileSystem.exists(uri)) { if (!overwrite) { throw new IOException(ExceptionMessage.FILE_ALREADY_EXISTS.getMessage(uri)); } if (mFileSystem.getStatus(uri).isFolder()) { throw new IOException(ExceptionMessage.FILE_CREATE_IS_DIRECTORY.getMessage(uri)); } mFileSystem.delete(uri); } } catch (AlluxioException e) { throw new IOException(e); } // The file no longer exists at this point, so we can create it CreateFileOptions options = CreateFileOptions.defaults() .setBlockSizeBytes(blockSize) .setMode(new Mode(permission.toShort())); try { FileOutStream outStream = mFileSystem.createFile(uri, options); return new FSDataOutputStream(outStream, mStatistics); } catch (AlluxioException e) { throw new IOException(e); } }
/** * Attempts to delete the file or directory with the specified path. * * @param path path to delete * @param recursive if true, will attempt to delete all children of the path * @return true if one or more files/directories were deleted; false otherwise * @throws IOException if the path failed to be deleted due to some constraint (ie. non empty * directory with recursive flag disabled) */ @Override public boolean delete(Path path, boolean recursive) throws IOException { LOG.info("delete({}, {})", path, recursive); if (mStatistics != null) { mStatistics.incrementWriteOps(1); } AlluxioURI uri = new AlluxioURI(HadoopUtils.getPathWithoutScheme(path)); DeleteOptions options = DeleteOptions.defaults().setRecursive(recursive); try { mFileSystem.delete(uri, options); return true; } catch (InvalidPathException | FileDoesNotExistException e) { LOG.error("delete failed: {}", e.getMessage()); return false; } catch (AlluxioException e) { throw new IOException(e); } }
/** * Entry point for the {@link MultiMount} program. * * @param args command-line arguments */ public static void main(String[] args) { if (args.length != 1) { System.err.println("Usage: ./bin/alluxio runClass alluxio.examples.MultiMount <HDFS_URL>"); System.exit(-1); } AlluxioURI mntPath = new AlluxioURI("/mnt"); AlluxioURI s3Mount = new AlluxioURI("/mnt/s3"); AlluxioURI inputPath = new AlluxioURI("/mnt/s3/hello.txt"); AlluxioURI s3Path = new AlluxioURI("s3n://alluxio-demo/"); AlluxioURI hdfsMount = new AlluxioURI("/mnt/hdfs"); AlluxioURI outputPath = new AlluxioURI("/mnt/hdfs/hello.txt"); AlluxioURI hdfsPath = new AlluxioURI(args[0]); FileSystem fileSystem = FileSystem.Factory.get(); try { // Make sure mount directory exists. if (!fileSystem.exists(mntPath)) { System.out.print("creating " + mntPath + " ... "); fileSystem.createDirectory(mntPath); System.out.println("done"); } // Make sure the S3 mount point does not exist. if (fileSystem.exists(s3Mount)) { System.out.print("unmounting " + s3Mount + " ... "); fileSystem.unmount(s3Mount); System.out.println("done"); } // Make sure the HDFS mount point does not exist. if (fileSystem.exists(hdfsMount)) { System.out.print("unmounting " + hdfsMount + " ... "); fileSystem.unmount(hdfsMount); System.out.println("done"); } // Mount S3. System.out.print("mounting " + s3Path + " to " + s3Mount + " ... "); fileSystem.mount(s3Mount, s3Path); System.out.println("done"); // Mount HDFS. System.out.print("mounting " + hdfsPath + " to " + hdfsMount + " ... "); fileSystem.mount(hdfsMount, hdfsPath); System.out.println("done"); // Make sure output file does not exist. if (fileSystem.exists(outputPath)) { System.out.print("deleting " + outputPath + " ... "); fileSystem.delete(outputPath); System.out.println("done"); } // Open the input stream. System.out.print("opening " + inputPath + " ... "); FileInStream is = fileSystem.openFile(inputPath); System.out.println("done"); // Open the output stream, setting the write type to make sure result is persisted. System.out.print("opening " + outputPath + " ... "); CreateFileOptions options = CreateFileOptions.defaults().setWriteType(WriteType.CACHE_THROUGH); FileOutStream os = fileSystem.createFile(outputPath, options); System.out.println("done"); // Copy the data System.out.print("transferring data from " + inputPath + " to " + outputPath + " ... "); IOUtils.copy(is, os); System.out.println("done"); // Close the input stream. System.out.print("closing " + inputPath + " ... "); is.close(); System.out.println("done"); // Close the output stream. System.out.print("closing " + outputPath + " ... "); os.close(); System.out.println("done"); } catch (Exception e) { System.out.println("fail"); e.printStackTrace(); } finally { // Make sure the S3 mount point is removed. try { if (fileSystem.exists(s3Mount)) { System.out.print("unmounting " + s3Mount + " ... "); fileSystem.unmount(s3Mount); System.out.println("done"); } } catch (Exception e) { System.out.println("fail"); e.printStackTrace(); } // Make sure the HDFS mount point is removed. try { if (fileSystem.exists(hdfsMount)) { System.out.print("unmounting " + hdfsMount + " ... "); fileSystem.unmount(hdfsMount); System.out.println("done"); } } catch (Exception e) { System.out.println("fail"); e.printStackTrace(); } } }