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;
這個方法有多個多載參數(路徑、檔案系統權限、是否覆寫、寫入時緩衝區大小、複本數量、區塊大小、執行進度)
- FsPermission 其中一個實作做法是代入三個FsAction
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));