package com.dj.hadoop;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URI;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.Progressable;
/**
* @description hdfs文件操作
* @author dj
* @date 2012-10-10
*/
public class FileHandlerTest {
public static String basePath = "hdfs://192.168.10.166:54310";
public static String fileRootPath = basePath
+ "/home/hadoop/data/hadoopdata";
public static void uploadLocalFileToHDFS(File localFile, Path destPath)
throws Exception {
Configuration config = new Configuration();
FileSystem.setDefaultUri(config, new URI(basePath));
FileSystem hdfs = FileSystem.get(config);
// Path dst = new Path(fileRootPath,destPath);
// hdfs.copyFromLocalFile(src, dst);
FSDataOutputStream out = hdfs.create(destPath,new Progressable() {
@Override
public void progress() {
System.out.println("文件进度");
}
});
InputStream in = new BufferedInputStream(new FileInputStream(localFile));
IOUtils.copy(in, out);
hdfs.close();
}
/**
* 文件下载
* @param destPath
* @param localDir
* @throws Exception
*/
public static void downloadFileFromHDFS(Path destPath,File localDir) throws Exception {
Configuration config = new Configuration();
FileSystem.setDefaultUri(config, new URI(basePath));
FileSystem hdfs = FileSystem.get(config);
if (hdfs.exists(destPath)) {
FSDataInputStream in = hdfs.open(destPath);
FileStatus stat = hdfs.getFileStatus(destPath);
byte[] buffer = new byte[Integer.parseInt(String.valueOf(stat.getLen()))];
in.readFully(0, buffer);
in.close();
hdfs.close();
IOUtils.write(buffer, new FileOutputStream(localDir+"/"+destPath.getName()));
}
}
/**
* 删除文件
* @param destPath
* @throws Exception
*/
public static boolean deleteFile(Path destPath)throws Exception {
Configuration config = new Configuration();
FileSystem.setDefaultUri(config, new URI(basePath));
FileSystem hdfs = FileSystem.get(config);
if (hdfs.exists(destPath)) {
return hdfs.delete(destPath,true);
}
return false;
}
public static void listAll(String dir) throws Exception {
Configuration config = new Configuration();
FileSystem.setDefaultUri(config, new URI(basePath));
FileSystem fs = FileSystem.get(config);
FileStatus[] stats = fs.listStatus(new Path(basePath,dir));
for (int i = 0; stats != null && i < stats.length; ++i) {
// System.out.println(ToStringBuilder.reflectionToString(stats[i]));
if (!stats[i].isDir()) {
// regular file
System.out.println("文件:"+stats[i].getPath().toString()+"===="+stats[i].getGroup());
} else if (stats[i].isDir()) {
// dir
System.out.println("文件夹:"+stats[i].getPath().toString()+"===="+stats[i].getGroup());
}
}
fs.close();
}
public static void createDirectory(String directoryName) throws Exception {
Configuration config = new Configuration();
FileSystem.setDefaultUri(config, new URI(basePath));
FileSystem fs = FileSystem.get(config);
System.out.println(ToStringBuilder.reflectionToString(fs));
fs.mkdirs(new Path(fileRootPath, directoryName));
fs.close();
}
public static void deleteDirectory(String directoryName) throws Exception {
Configuration config = new Configuration();
FileSystem.setDefaultUri(config, new URI(basePath));
FileSystem fs = FileSystem.get(config);
fs.delete(new Path(fileRootPath, directoryName),true);
fs.close();
}
public static void main(String[] args) throws Exception {
String directoryName = "books";
// 【1】创建文件夹
createDirectory(directoryName);
// 【2】 删除文件夹
// deleteDirectory(directoryName);
//【3】 显示文件
// listAll("/home/hadoop/data/hadoopdata/");
//【4】 文件上传
File file = new File("G:/apiqianyi/ap2last_tmp.txt");
Path destPath = new Path(fileRootPath,directoryName+"/"+file.getName());
// uploadLocalFileToHDFS(file, destPath);
//【5】文件下载
// downloadFileFromHDFS(destPath, new File("G:/"));
//【6】删除文件
boolean flag = deleteFile(destPath);
System.out.println(flag);
}
}
分享到:
相关推荐
### HDFS文件系统详解 #### 一、HDFS概述与分布式文件系统概念 Hadoop分布式文件系统(HDFS)作为Hadoop项目的核心组成部分之一,它为海量数据提供了高吞吐量的数据访问,非常适合大规模数据集的处理。HDFS的设计...
通过Eclipse这样的集成开发环境,我们可以编写、调试和测试这些HDFS操作。在实际应用中,可能还需要处理异常、监控性能以及优化代码以适应大规模数据处理。对于更复杂的任务,如MapReduce作业,开发者还可以编写...
4. **编写Hadoop程序**:使用Eclipse创建Java项目,导入Hadoop相关的库(这些库通常可以从Hadoop的lib目录下找到),编写读写HDFS文件的代码。 5. **测试HDFS操作**:通过Eclipse内置的HDFS浏览器或者在代码中调用...
hadoop测试(1)---HDFS文件操作 完整测试代码, 相关文章:http://www.cnblogs.com/yinpengxiang/archive/2011/07/03/2096605.html
* hadoop dfs:用于管理HDFS文件系统的命令,例如查看文件列表、创建目录、删除文件等。 * hdfs dfs:用于管理HDFS文件系统的命令,例如查看文件列表、创建目录、删除文件等。 实验目的 本实验的目的旨在熟悉常用的...
3. **测试验证**:编写测试代码,调用上述方法并检查结果,确保文件操作符合预期。 #### 实验总结及心得体会 1. **深入理解HDFS的作用**:通过本次实验,学生不仅理解了HDFS作为Hadoop数据存储层的重要性,还了解...
本案例代码demo旨在帮助开发者更好地理解和应用这一技术组合,涵盖了HDFS文件操作、MapReduce分词处理以及数据分析和系统推荐等功能。 首先,HDFS(Hadoop Distributed File System)是Hadoop的核心组件之一,提供...
本篇文章主要探讨了HDFS客户端进行文件操作的相关知识点,包括文件上传、下载、删除以及重命名,同时也涉及到了配置参数的优先级规则。 首先,我们要了解的是如何通过客户端设置文件副本数量。在HDFS中,文件的副本...
### Hadoop HDFS 文件系统命令操作详解 #### HDFS 概念与组成 **1.1 概念** HDFS,即 Hadoop Distributed File System,是一种分布式文件系统,主要用于存储大规模数据集。它通过目录树结构来组织文件,并且是由...
Java API 是 HDFS 的一个编程接口,允许开发者使用 Java 语言来操作 HDFS 中的文件和目录。本文将介绍如何使用 HDFS Java API 实现文件下载和上传操作。 一、HDFS Java API 概述 HDFS Java API 是 Hadoop 中的一...
标签 "ftp ftpoverhdfs hdfs文件传入ftp java_hadoop java_hdfs-over-ftp" 进一步明确了主题。"ftpoverhdfs"可能是指一个特定的模块或工具,它允许FTP通信“覆盖”HDFS,即通过FTP接口操作HDFS。"java_hadoop"和...
输入说明涉及文件大小、数据分布等参数,测试步骤详细描述了如何进行文件写入操作,而测试结论则分析了写入性能和可能影响因素。 - **测试目的2**:在不同的工作负载下,测试HDFS的并发写入性能,例如多用户同时...
2. **FileSystem对象**:`FileSystem`是HDFS API的入口点,通过它你可以执行所有文件操作。首先需要实例化一个`FileSystem`对象,通常使用`FileSystem.get(conf)`方法,其中`conf`是`Configuration`对象,配置了...
### HDFS与SSH命令操作详解 ...以上命令提供了HDFS中常用的文件操作功能,能够满足大多数数据处理和管理的需求。通过SSH远程执行这些命令,可以更加灵活地管理和操作部署在不同服务器上的HDFS集群。
标题“C操作HDFS”指的是使用C语言编程接口与Hadoop分布式文件系统(HDFS)进行交互。HDFS是Apache Hadoop项目的核心组件之一,它为大规模数据存储提供了可扩展的、可靠的分布式文件系统。在C语言环境中操作HDFS,...
在本文中,我们将深入探讨 Flume 的安装、配置、测试以及如何将其应用于实际案例,即从不同节点采集日志并存储到 HDFS。 首先,我们从安装 Flume 开始。Flume 的安装包括解压安装包,重命名 Flume 目录,配置 `...
10. **项目组织**:`java_project`这个压缩包很可能包含了项目的源代码、配置文件以及可能的测试数据。源代码可能分为多个模块,如数据读取、数据处理、图形界面展示等,每个模块对应一个或多个Java类。 通过以上...
在本文中,我们将深入探讨如何使用Java操作HDFS(Hadoop分布式文件系统),以及如何配置高可用性(HA)环境。我们将关注以下几个方面: 1. **HDFSUtil类的构建**: HDFSUtil类是Java中用于与HDFS进行交互的工具类...
在操作HDFS时,有多种方式可以进行文件交互。通过命令行工具,可以将本地文件系统(Linux)的文件上传到HDFS,反之亦然,进行文件的移动、删除和查看。例如,`hadoop fs -put`命令用于上传文件,`hadoop fs -get`...