欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

hdfs文件如何导出到服务器,[Hadoop] 如何将 HDFS 文件导出到 Windows文件系统

发布时间:2024/7/23 windows 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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文件系统的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。