阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

HDFS——如何将文件复制到HDFS

155次阅读
没有评论

共计 2138 个字符,预计需要花费 6 分钟才能阅读完成。

在 Hadoop 中用作文件操作的主类位于 org.apache.hadoop.fs 包中。基本的文件操作有 open、read、write 和 close。实际上,Hadoop 的文件 API 是通用的,可用于 HDFS 以外的文件系统。

Hadoop 文件 API 的起点是 FileSystem 类,这是一个与文件系统交互的抽象类,存在不同的具体实现子类来处理 HDFS 和本地文件系统,可以通过调用 factory 方法 FileSystem.get(Configuration conf) 来得到所需的 FileSystem 实例。Configuration 类适用于保留键 / 值配置参数的特殊类。它的默认实例化方法是以 HDFS 系统的资源配置为基础的。

如下,可以得到与 HDFS 接口的 FileSystem 对象:

Configuration conf = new Configuration();

FileSystem hdfs = FileSystem.get(conf);

要得到一个专用于本地文件系统的 FileSystem 对象:

FileSystem local = FileSystem.getLocal(conf);

Hadoop 文件 API 用 Path 对象来编制文件和目录名,使用 FileStatus 对象来存储文件和目录的元数据。使用 listStatus() 方法得到一个目录中的文件列表:

Path inputDir = new Path(args[0]);

FileStatus[] inputFiles = local.listStatus(inputDir);

数组 inputFiles 的长度等于指定目录中文件的个数,在 inputFiles 中每一个 FileStatus 对象均有元数据信息,如文件长度、权限、修改时间等。

可以用命令行 bin/hadoop fs -put 把本地文件复制到 HDFS, 也可以自己实现。

下面的程序编译打包后,可以直接运行如下的命令,实现自己的上传功能:

hadoop jar filecopy.jar FileCopy cite2.txt cite2.txt

下面是 FileCopy 的代码。

import java.net.URI;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class FileCopy
{
 public static void main(String[] args) throws Exception
 {
  if(args.length != 2){
  System.err.println(“Usage : filecopy <source> <target>”);
  System.exit(2);
  }
  Configuration conf = new Configuration();
  InputStream input = new BufferedInputStream(new FileInputStream(args[0]));
  FileSystem fs = FileSystem.get(URI.create(args[1]),conf);
  OutputStream output = fs.create(new Path(args[1]));
  IOUtils.copyBytes(input,output,4096,true);
 }
}

相关阅读:

将本地文件拷到 HDFS 中 http://www.linuxidc.com/Linux/2013-05/83866.htm

从 HDFS 下载文件到本地 http://www.linuxidc.com/Linux/2012-11/74214.htm

将本地文件上传至 HDFS http://www.linuxidc.com/Linux/2012-11/74213.htm

HDFS 基本文件常用命令 http://www.linuxidc.com/Linux/2013-09/89658.htm

Hadoop 中 HDFS 和 MapReduce 节点基本简介 http://www.linuxidc.com/Linux/2013-09/89653.htm

《Hadoop 实战》中文版 + 英文文字版 + 源码【PDF】http://www.linuxidc.com/Linux/2012-10/71901.htm

Hadoop: The Definitive Guide【PDF 版】http://www.linuxidc.com/Linux/2012-01/51182.htm

更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计2138字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中