`
zhaohuafei
  • 浏览: 27828 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
在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分布式文件系统深度实践》PDF

    《HDFS——Hadoop分布式文件系统深度实践》这本书是针对Hadoop分布式文件系统(HDFS)的详尽指南,旨在帮助读者深入理解HDFS的工作原理、设计思想以及在实际应用中的最佳实践。HDFS是Apache Hadoop项目的核心组件之...

    分布式存储系统——HDFS

    当用户向HDFS写入数据时,数据首先被分割成固定大小的数据块,然后客户端将数据块上传到DataNode上。NameNode接收到元数据请求后,会分配DataNode来存储数据块的副本。在读取数据时,客户端请求NameNode获取数据块的...

    实验二:熟悉常用的HDFS操作

    在Java编程实现部分,学生通过`org.apache.hadoop.conf.Configuration`,`org.apache.hadoop.fs.FileSystem`和`org.apache.hadoop.fs.Path`等类,实现了文件存在性判断和本地文件复制到HDFS的功能。`FileSystem.get...

    大数据管理与优化——hdfs配置文件

    本文件内容适用于学习Hadoop时所需配置Hive的所有文件,包括以下内容: core-site.xml hdfs-site.xml mapred-site.xml ...配置文件收集不易,有部分配置内容已单独复制出来! 希望大家点个收藏点个赞,谢谢大家!

    HDFS源码解析

    《HDFS源码解析——揭示分布式文件系统的内在奥秘》 在大数据时代,Hadoop的HDFS(Hadoop Distributed File System)作为分布式存储系统的重要代表,其高效、可靠的特性为海量数据处理提供了坚实的基础设施。深入...

    hdfs_design.rar_HDFS-OPERATE_hadoop_hadoop java_hdfs

    例如,使用`hadoop fs -put`命令将本地文件上传到HDFS,使用`hadoop fs -get`下载文件,`hadoop fs -rm`删除文件,以及如何查看目录结构等。这些基本操作是日常管理和维护HDFS的基础。 在Hadoop__java标签中,意味...

    HDFS原理介绍

    - **存储过程**:当客户端上传一个文件时,HDFS会按照默认设置将文件分割成多个block(例如64MB),并根据NameNode的指示存储到不同的DataNode上。 - **机架感知**:为了提高数据的可靠性和读取效率,HDFS具备机架...

    hadoop源码分析-HDFS部分

    HDFS的设计灵感来源于Google的GFS(Google File System),它将大型文件分割成块,并将这些块分布在多台服务器上,从而实现数据的高可用性和容错性。HDFS的核心思想是主从结构,由NameNode作为中心节点管理文件系统...

    大数据与云计算教程课件 优质大数据课程 08.HDFS文件接口(共41页).pptx

    在Hadoop中,文件系统被抽象为一个通用接口——`org.apache.hadoop.fs.FileSystem`。这个抽象类为各种文件系统(包括但不限于HDFS)提供了一致的操作方法。HDFS是这个抽象文件系统的一个具体实现,它是一个分布式、...

    Hadoop技术内幕 深入解析HADOOP COMMON和HDFS架构设计与实现原理

    2. **数据冗余**:通过副本机制,HDFS可以将数据复制到多个DataNode上,提高容错性。默认的副本系数为3。 3. **大文件处理**:HDFS将大文件分割成固定大小的Block,每个Block在DataNodes上分布存储,适合批处理和...

    MapReduce框架和HDFS框架

    HDFS,全称为Hadoop分布式文件系统,是Hadoop的核心组成部分,用于存储海量数据。它借鉴了谷歌GFS的设计理念,实现了高容错性和高吞吐量的数据存储。HDFS采用了主从架构,由一个NameNode作为主节点,负责元数据管理...

    hdfs.rar_hadoop_hadoop ubuntu_hdfs_分布式系统_基于hadoop

    它的设计理念是将大文件分割成多个块,这些块可以被复制到集群的不同节点上,从而实现数据的冗余和快速访问。 标签中的"hadoop hadoop_ubuntu hdfs 分布式系统 基于hadoop"进一步强调了这个压缩包的主题。"hadoop...

    云计算之HDFS.ppt

    HDFS提供了一系列API供用户与系统交互,如`hdfs.copyFromLocalFile()`方法用于将本地文件上传到HDFS。开发者可以利用这些API进行数据的读写、操作和管理,实现对大数据的高效处理。 总的来说,Hadoop的HDFS是一个...

    Hadoop技术内幕 深入解析HADOOP COMMON和HDFS架构设计与实现原理.pdf

    1. 块级存储:HDFS将大文件切分成多个固定大小的块,每个块多副本分布在不同的DataNode上,提高了容错性和读取效率。 2. 写入流程:客户端首先与NameNode交互,确定写入的块位置,然后直接向DataNode写入数据,最后...

    HFS+文件系统报告——文件系统

    ### HFS+ 文件系统报告 —— 文件系统 #### 一、概述 HFS+(Hierarchical File System Plus)文件系统是苹果公司在1998年为替代原有的HFS(Hierarchical File System)而开发的一种先进的文件系统。HFS+不仅继承了...

    hdfs-command-line_Transcript.pdf

    - **功能**:将本地文件系统中的文件复制到HDFS中。 - **示例**:假设你想将名为`myfile.txt`的文件从本地文件系统复制到HDFS的根目录下,可以使用命令:`hadoop fs -copyFromLocal myfile.txt hdfs://localhost/` ...

    Hadoop分布式文件系统——翻译

    - **数据持久性和可靠性**:为了保证数据的持久性和可靠性,HDFS通过将文件内容复制到多个DataNode上来实现。这种方式不仅保证了数据的可靠性,还提高了数据传输带宽和计算本地化的可能性。 #### 3. HDFS的关键技术...

    阿里云 专有云企业版 V3.8.2 文件存储HDFS 技术白皮书 20200417.pdf

    【阿里云专有云企业版 V3.8.2 文件存储HDFS 技术白皮书】详述了阿里云为企业级用户提供的高效、稳定、安全的分布式文件系统——HDFS(Hadoop Distributed File System)服务。文件存储HDFS是基于开源HDFS经过优化和...

Global site tag (gtag.js) - Google Analytics