`

自HDFS下载文件或文件夹(包含子目录)(转载)

阅读更多
转自:http://blog.csdn.net/msc067/article/details/7239563

运行方式:指定两个输入参数,依次为本地文件(或文件夹)路径、HDFS文件(或文件夹)路径

import java.io.File;
import java.io.FileOutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.io.IOUtils;

public class HDFS_Downloader
{
	public static FileSystem hdfs;
	
	public static void downloadFile(String srcPath, String dstPath) throws Exception
	{
		FSDataInputStream in = null;
		FileOutputStream out = null;
		try
		{
			in = hdfs.open(new Path(srcPath));
			out = new FileOutputStream(dstPath);
			IOUtils.copyBytes(in, out, 4096, false);
		}
		finally
		{
			IOUtils.closeStream(in);
			IOUtils.closeStream(out);
		}
	}
	
	public static void downloadFolder(String srcPath, String dstPath) throws Exception
	{
		File dstDir = new File(dstPath);
		if (!dstDir.exists())
		{
			dstDir.mkdirs();
		}
		FileStatus[] srcFileStatus = hdfs.listStatus(new Path(srcPath));
		Path[] srcFilePath = FileUtil.stat2Paths(srcFileStatus);
		for (int i = 0; i < srcFilePath.length; i++)
		{
			String srcFile = srcFilePath[i].toString();
			int fileNamePosi = srcFile.lastIndexOf('/');
			String fileName = srcFile.substring(fileNamePosi + 1);
			download(srcPath + '/' + fileName, dstPath + '/' + fileName);
		}
	}
	
	public static void download(String srcPath, String dstPath) throws Exception
	{
		if (hdfs.isFile(new Path(srcPath)))
		{
			downloadFile(srcPath, dstPath);
		}
		else
		{
			downloadFolder(srcPath, dstPath);
		}
	}
	
	public static void main(String[] args)
	{
		if (args.length != 2)
		{
			System.out.println("Invalid input parameters");
		}
		else
		{
			try
			{
				Configuration conf = new Configuration();
				hdfs = FileSystem.get(URI.create(args[0]), conf);
				download(args[0], args[1]);
			}
			catch (Exception e)
			{
				System.out.println("Error occured when copy files");
			}
		}
	}
}
分享到:
评论
2 楼 yjhuangbupt 2012-07-02  
[code="import java.io.File;
import java.io.FileOutputStream;
import java.net.URI; "]
1 楼 yjhuangbupt 2012-07-02  
import java.io.File; 
import java.io.FileOutputStream; 
import java.net.URI; 

相关推荐

    HDFS判断文件或目录是否存在——Shell命令实现 + Java代码实现

    hdfs dfs -test -e 文件或目录名 第三步,查看检测结果: echo $? 若输出结果为0,则说明文件或目录存在,若为1,则说明文件或目录不存在。 二、Java代码实现 import org.apache.hadoop.conf.Configuration; ...

    java管理hdfs文件和文件夹项目hadoop2.4

    本文将深入探讨使用Java管理HDFS文件和文件夹的关键知识点,特别是基于Hadoop 2.4版本。 首先,理解HDFS的基础概念至关重要。HDFS是一种分布式文件系统,设计用于跨大量廉价硬件节点存储和处理大数据。它遵循主从...

    3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件

    为了高效地与HDFS交互,Java API 提供了一套丰富的工具和类库,使得开发者能够方便地进行文件的读写、上传、下载、遍历、查找、拷贝以及管理HDFS上的文件和目录。以下将详细讲解如何使用Java API 操作HDFS。 ### 一...

    Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作

    标题中的知识点主要涉及Python连接HDFS进行文件上传下载以及Pandas转换文本文件到CSV的操作。在描述中,提到了Python在Linux环境下与HDFS交互的需求,以及使用Pandas进行数据处理的场景。从标签中我们可以进一步了解...

    HDFS文件的下载

    hdfs文件的下载

    HDFS文件系统基本文件命令、编程读写HDFS

    4. 删除 HDFS 文件或目录:使用 FileSystem.delete() 方法删除 HDFS 文件或目录。 以下是一个使用 HDFS API 编写的操作文件系统的程序: ```java import org.apache.hadoop.conf.Configuration; import org.apache...

    HDFS文件的查看

    hdfs文件的查看 hdfs fs -cat /文件名

    HDFS-API文件上传、创建、删除、重命名

    本教程将详细讲解如何利用HDFS API进行文件的上传、创建、删除以及重命名等基本操作。这些API是Java编程接口,为开发者提供了与HDFS交互的便利。 首先,我们需要导入Hadoop相关的库,通常在Java项目中,这可以通过...

    《Hadoop大数据开发实战》教学教案—03HDFS分布式文件系统.pdf

    通过 Shell 命令,可以对 HDFS 进行文件操作,例如上传文件、下载文件、删除文件等。 Java 程序操作 HDFS Java 程序操作 HDFS 是使用 HDFS 的一种方式。通过 Java API,可以对 HDFS 进行文件操作,例如上传文件、...

    python解析hdfs文件和实现方式

    此外,如果你需要处理图像文件(由“image”标签提示),可以使用`PIL`或`opencv-python`库将HDFS上的图片文件下载并进行操作。例如,用PIL处理JPEG图像: ```python from PIL import Image # 从HDFS下载图像到...

    HDFS实例基本操作

    在这个“HDFS实例基本操作”中,我们将深入探讨如何在已经安装好的HDFS环境中执行基本操作,包括文件上传、下载以及创建文件夹。 一、HDFS的基本架构 HDFS基于主从结构,主要由NameNode和DataNode组成。NameNode...

    Hadoop存储系统HDFS的文件是分块存储.docx

    ### Hadoop存储系统HDFS的文件分块存储 #### HDFS文件分块机制 Hadoop分布式文件系统(HDFS)是一种专为存储大型文件而设计的文件系统,它能够高效地处理海量数据。HDFS的基本设计理念之一就是将文件分割成多个块...

    eclipse操作HDFS需要文件

    特别是`bin`子目录,其中包含了一系列用于操作Hadoop的命令行工具,例如`hadoop`命令,可以用来启动、停止HDFS和MapReduce服务,以及执行其他Hadoop相关的任务。 为了在Eclipse中成功操作HDFS,我们需要进行以下...

    HDFS文件读写操作

    此外,它还处理客户端的所有文件系统层面上的操作请求,如打开、关闭、重命名文件或目录等。 - **功能**: - 管理数据块映射; - 处理客户端的读写请求; - 配置副本策略; - 管理HDFS的名称空间; - **...

    HDFS小文件处理方案

    每个文件、目录或数据块大约占用150字节的内存。因此,存储大量的小文件会迅速消耗Namenode的内存资源。 2. **高吞吐量而非低延迟**:HDFS优化了高吞吐量的数据访问,而不是低延迟。这意味着处理大量小文件时可能会...

    云计算技术实验报告四HDFS文件的读写

    而`GetMerger`功能则涉及从HDFS下载一个包含多个文件的路径(即一个文件夹),并将这些文件合并成一个单一文件存储在本地。 为了实现这些功能,学生需要在Linux环境中使用Eclipse集成开发环境(IDE)。首先,他们...

    springmvc+hadoop+maven实现文件上传至hdfs

    例如,可能会有一个名为`HdfsUploader`的类,其中包含如`uploadFile()`这样的方法,该方法接受文件路径和HDFS目标路径作为参数,执行上传操作。这个类可能会用到Hadoop的`Configuration`、`FileSystem`和`Path`等...

    向hdfs上传Excel文件.doc

    在大数据处理场景中,经常需要将Excel文件上传到Hadoop分布式文件系统(HDFS)中进行进一步的数据处理或分析。然而,由于HDFS本身并不直接支持Excel文件格式,通常的做法是先将Excel文件转换为CSV等更易于处理的格式...

    利用javaAPI访问HDFS的文件

    该文件位于Hadoop安装目录下的`conf`文件夹内,主要用来定义Hadoop集群的基本配置信息。其中最重要的配置项是`fs.default.name`或`fs.defaultFS`,用于指定HDFS集群的名称节点的地址。 ##### 关键配置项解释 - **fs...

    windows平台下的HDFS文件浏览器

    3. 文件下载:可以将HDFS中的文件或目录下载到本地文件系统。 4. 文件操作:包括创建、重命名、移动、删除文件或目录,以及设置权限等。 5. 元数据查看:显示文件大小、修改时间、所有者等信息。 6. 快捷操作:如...

Global site tag (gtag.js) - Google Analytics