hdfs文件如何导出到服务器,[Hadoop] 如何将 HDFS 文件导出到 Windows文件系统
介紹如何在 Windows 環境中, 將保存在 HDFS 上的文件導出到本機上
數據導入到 HDFS 后
當然也要有方法將數據從 HDFS 導出到本機系統上
在 HADOOP?JAVA API 所提供的??FileSystem 類
就提供 copyToLocalFile 函數將文件復制回本機文件系統
理論上這是可以輕易的做到這件事情
但實際使用時, 才發現一個問題
當客戶端用的是 windows 而不是 linux
程序也不是在 cluster 主機上執行時
此時調用 copyToLocalFile 函數
Hadoop 會丟出一個例外:
Cannot run program "chmod": CreateProcess error=2, ?t?Χ??????
解決方法是在電腦上安裝 cygwin
這樣 hadoop 就可以調用到 chmod 命令
但如果要求所有使用者一定要在 window 上安裝 cygwin 這樣也挺怪的
所以想到了另一個方法
就是直接用 file stream 方式
將 HDFS 數據讀出后, 再寫回本地端的文件系統
這樣就可以解決數據導出的問題
/*
將 HDFS 上文件, 導出至本機磁盤上
*/
public void exportFile(Path hdfsSource, String targetPath){
Configuration conf = new Configuration();
conf.set("hadoop.job.ugi","hadoop,supergroup");
String uri="hdfs://cloud-a:9000";
try{
FileSystem fs = FileSystem.get(URI.create(uri),conf);
FSDataInputStream in = fs.open(hdfsSource);
FileOutputStream fos = new FileOutputStream(targetPath);
int bytesRead;
byte[] buffer = new byte[4096];
while ((bytesRead = in.read(buffer)) > 0) {
fos.write(buffer, 0, bytesRead);
}
in.close();
fos.close();
//使用 copyToLocalFile 會丟出?Cannot run program "chmod"例外
//fs.copyToLocalFile(hdfsSource, new Path(targetPath));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
總結
以上是生活随笔為你收集整理的hdfs文件如何导出到服务器,[Hadoop] 如何将 HDFS 文件导出到 Windows文件系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python自动发送邮件不需要发件邮箱_
- 下一篇: jdbc 批量insert_JDBC相关