共计 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