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());

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值