hdfs文件如何导出到服务器,[Hadoop] 如何将 HDFS 文件导出到 Windows文件系统
介紹如何在 Windows 環(huán)境中, 將保存在 HDFS 上的文件導(dǎo)出到本機(jī)上
數(shù)據(jù)導(dǎo)入到 HDFS 后
當(dāng)然也要有方法將數(shù)據(jù)從 HDFS 導(dǎo)出到本機(jī)系統(tǒng)上
在 HADOOP?JAVA API 所提供的??FileSystem 類
就提供 copyToLocalFile 函數(shù)將文件復(fù)制回本機(jī)文件系統(tǒng)
理論上這是可以輕易的做到這件事情
但實(shí)際使用時(shí), 才發(fā)現(xiàn)一個(gè)問題
當(dāng)客戶端用的是 windows 而不是 linux
程序也不是在 cluster 主機(jī)上執(zhí)行時(shí)
此時(shí)調(diào)用 copyToLocalFile 函數(shù)
Hadoop 會(huì)丟出一個(gè)例外:
Cannot run program "chmod": CreateProcess error=2, ?t?Χ??????
解決方法是在電腦上安裝 cygwin
這樣 hadoop 就可以調(diào)用到 chmod 命令
但如果要求所有使用者一定要在 window 上安裝 cygwin 這樣也挺怪的
所以想到了另一個(gè)方法
就是直接用 file stream 方式
將 HDFS 數(shù)據(jù)讀出后, 再寫回本地端的文件系統(tǒng)
這樣就可以解決數(shù)據(jù)導(dǎo)出的問題
/*
將 HDFS 上文件, 導(dǎo)出至本機(jī)磁盤上
*/
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 會(huì)丟出?Cannot run program "chmod"例外
//fs.copyToLocalFile(hdfsSource, new Path(targetPath));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
總結(jié)
以上是生活随笔為你收集整理的hdfs文件如何导出到服务器,[Hadoop] 如何将 HDFS 文件导出到 Windows文件系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python自动发送邮件不需要发件邮箱_
- 下一篇: java信息管理系统总结_java实现科