Hadoop API的資料寫入 - twilighthook/BigDataNote GitHub Wiki

在FileSystem中有許多方法可以用來寫入資料,最簡單的方式可以使用FileSystem.OutputStream.Create的方式來實作:

FSDataOutputStream create(Path p,
      FsPermission permission,
      boolean overwrite,
      int bufferSize,
      short replication,
      long blockSize,
      Progressable progress) throws IOException;

這個方法有多個多載參數(路徑、檔案系統權限、是否覆寫、寫入時緩衝區大小、複本數量、區塊大小、執行進度)

public FsPermission(FsAction u,
            FsAction g,
            FsAction o)
Construct by the given FsAction.
Parameters:
u - user action
g - group action
o - other action
  • Progressable Progressable主要是對於函式的實作,看進行時會印出哪些訊息

public class FileSystemCopy {
	
	public static void main(String[] args) throws Exception {
		String localSrc = args[0];
		String hdfsPath = args[1];
		
		InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
		
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
		OutputStream out = fs.create(new Path(hdfsPath), new Progressable() {
			public void progress() {
				System.out.print(".");
			}
		});	
		IOUtils.copyBytes(in, out, 4096, true);
	}

}

code下載位置 這段code可以讓文件上傳至hdfs位置 除此之外outputstream也有提供一個管道可以直接寫入資料,在每日檔案更新時可以使用 就是使用append

OutputStream out = fs.append(new Path(hdfsPath));