在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——Hadoop分布式文件系统深度实践》这本书是针对Hadoop分布式文件系统(HDFS)的详尽指南,旨在帮助读者深入理解HDFS的工作原理、设计思想以及在实际应用中的最佳实践。HDFS是Apache Hadoop项目的核心组件之...
当用户向HDFS写入数据时,数据首先被分割成固定大小的数据块,然后客户端将数据块上传到DataNode上。NameNode接收到元数据请求后,会分配DataNode来存储数据块的副本。在读取数据时,客户端请求NameNode获取数据块的...
在Java编程实现部分,学生通过`org.apache.hadoop.conf.Configuration`,`org.apache.hadoop.fs.FileSystem`和`org.apache.hadoop.fs.Path`等类,实现了文件存在性判断和本地文件复制到HDFS的功能。`FileSystem.get...
本文件内容适用于学习Hadoop时所需配置Hive的所有文件,包括以下内容: core-site.xml hdfs-site.xml mapred-site.xml ...配置文件收集不易,有部分配置内容已单独复制出来! 希望大家点个收藏点个赞,谢谢大家!
《HDFS源码解析——揭示分布式文件系统的内在奥秘》 在大数据时代,Hadoop的HDFS(Hadoop Distributed File System)作为分布式存储系统的重要代表,其高效、可靠的特性为海量数据处理提供了坚实的基础设施。深入...
例如,使用`hadoop fs -put`命令将本地文件上传到HDFS,使用`hadoop fs -get`下载文件,`hadoop fs -rm`删除文件,以及如何查看目录结构等。这些基本操作是日常管理和维护HDFS的基础。 在Hadoop__java标签中,意味...
- **存储过程**:当客户端上传一个文件时,HDFS会按照默认设置将文件分割成多个block(例如64MB),并根据NameNode的指示存储到不同的DataNode上。 - **机架感知**:为了提高数据的可靠性和读取效率,HDFS具备机架...
HDFS的设计灵感来源于Google的GFS(Google File System),它将大型文件分割成块,并将这些块分布在多台服务器上,从而实现数据的高可用性和容错性。HDFS的核心思想是主从结构,由NameNode作为中心节点管理文件系统...
在Hadoop中,文件系统被抽象为一个通用接口——`org.apache.hadoop.fs.FileSystem`。这个抽象类为各种文件系统(包括但不限于HDFS)提供了一致的操作方法。HDFS是这个抽象文件系统的一个具体实现,它是一个分布式、...
2. **数据冗余**:通过副本机制,HDFS可以将数据复制到多个DataNode上,提高容错性。默认的副本系数为3。 3. **大文件处理**:HDFS将大文件分割成固定大小的Block,每个Block在DataNodes上分布存储,适合批处理和...
- **数据存储机制**:HDFS将文件分成固定大小的块(默认大小为128MB或64MB),并将其复制到不同的DataNode上,以提高数据的可靠性和可用性。 - **数据冗余策略**:通常情况下,HDFS中的每个数据块都会被复制三份,...
HDFS,全称为Hadoop分布式文件系统,是Hadoop的核心组成部分,用于存储海量数据。它借鉴了谷歌GFS的设计理念,实现了高容错性和高吞吐量的数据存储。HDFS采用了主从架构,由一个NameNode作为主节点,负责元数据管理...
它的设计理念是将大文件分割成多个块,这些块可以被复制到集群的不同节点上,从而实现数据的冗余和快速访问。 标签中的"hadoop hadoop_ubuntu hdfs 分布式系统 基于hadoop"进一步强调了这个压缩包的主题。"hadoop...
HDFS提供了一系列API供用户与系统交互,如`hdfs.copyFromLocalFile()`方法用于将本地文件上传到HDFS。开发者可以利用这些API进行数据的读写、操作和管理,实现对大数据的高效处理。 总的来说,Hadoop的HDFS是一个...
1. 块级存储:HDFS将大文件切分成多个固定大小的块,每个块多副本分布在不同的DataNode上,提高了容错性和读取效率。 2. 写入流程:客户端首先与NameNode交互,确定写入的块位置,然后直接向DataNode写入数据,最后...
### HFS+ 文件系统报告 —— 文件系统 #### 一、概述 HFS+(Hierarchical File System Plus)文件系统是苹果公司在1998年为替代原有的HFS(Hierarchical File System)而开发的一种先进的文件系统。HFS+不仅继承了...
- **功能**:将本地文件系统中的文件复制到HDFS中。 - **示例**:假设你想将名为`myfile.txt`的文件从本地文件系统复制到HDFS的根目录下,可以使用命令:`hadoop fs -copyFromLocal myfile.txt hdfs://localhost/` ...
- **数据持久性和可靠性**:为了保证数据的持久性和可靠性,HDFS通过将文件内容复制到多个DataNode上来实现。这种方式不仅保证了数据的可靠性,还提高了数据传输带宽和计算本地化的可能性。 #### 3. HDFS的关键技术...
【阿里云专有云企业版 V3.8.2 文件存储HDFS 技术白皮书】详述了阿里云为企业级用户提供的高效、稳定、安全的分布式文件系统——HDFS(Hadoop Distributed File System)服务。文件存储HDFS是基于开源HDFS经过优化和...