HDFS API编程
3.1常用类
3.1.1Configuration
Hadoop配置文件的管理类,该类的对象封装了客户端或者服务器的配置(配置集群时,所有的xml文件根节点都是configuration)
创建一个Configuration对象时,其构造方法会默认加载hadoop中的两个配置文件,分别是hdfs-site.xml以及core-site.xml,这两个文件中会有访问hdfs所需的参数值,主要是fs.default.name,指定了hdfs的地址,有了这个地址客户端就可以通过这个地址访问hdfs了。即可理解为configuration就是hadoop中的配置信息。
3.1.2 FileSystem
该类的对象是一个文件系统对象,对HDFS中的文件进行的一系列操作,如创建等
3.1.3FileStatus
获取文件或者文件夹的元信息!比如:文件路径,文件大小,文件所有者,所在的块大小,文件修改时间,备份数量,权限等!
3.1.4FSDataInputStream
输入流对象! 可以将HDFS中的文件或者文件夹读取到本地!
3.1.5FSDataOutputStream
输出流对象! 可以将本地的文件或者文件夹上传到HDFS中!
3.1.6构建工程

指定工程路径



框架结构:

导入依赖节点
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.8.</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.8.</version>
</dependency>
查询文件信息
// 查询文件信息
private static void catFile() throws IOException, FileNotFoundException {
// TODO Auto-generated method stub
// 指定集群当中主机的IP+端口
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
FileStatus[] listStatus = fileSystem.listStatus(new Path("/input/"));
for (FileStatus fileStatus : listStatus) {
/**
* 快捷键Syso
*/
System.out.print("file文件信息------》" + fileStatus);
} /**
* 获取单个文件
*/ /**
* FileStatus fileStatus = fileSystem.getFileStatus(new Path(
* "input/file1.txt")); System.out.println(fileStatus);
*/
}
查询文件内容
public static void getFile(String fileName) throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
// 获取指定的文件
FSDataInputStream open = fileSystem.open(new Path(fileName));
// 将文件的内容装载到BufferedReader对象中去
BufferedReader reader = new BufferedReader(new InputStreamReader(open));
String line = "";
// 循环读取文件内容
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 关闭资源
reader.close();
open.close();
fileSystem.close();
}
创建一个空的文件
public static void createNewFile(String fileName) throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
if (fileSystem.exists(new Path(fileName))) {
System.out.println("文件已经存在");
} else {
boolean createNewFile = fileSystem
.createNewFile(new Path(fileName));
if (createNewFile) {
System.out.println("成功");
} else {
System.out.println("失败");
}
}
fileSystem.close();
}
在新创建的文件夹写入内容
public static void createFile(String fileName) throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
if (fileSystem.exists(new Path(fileName))) {
System.out.println("文件已经存在");
} else {
FSDataOutputStream create = fileSystem.create(new Path(fileName));
String str = "老黑今天又黑了";
create.write(str.getBytes());
create.flush();
create.close();
}
fileSystem.close();
}
创建文件夹
public static void mkdirFile(String fileName) throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
boolean mkdirs = fileSystem.mkdirs(new Path(fileName));
if (mkdirs) {
System.out.println("成功!");
} else {
System.out.println("失败!");
}
fileSystem.close();
}
重名文件的名字
public static void renameFile(String ordername, String newname)
throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
boolean rename = fileSystem.rename(new Path(ordername), new Path(
newname));
if (rename) {
System.out.println("成功!");
} else {
System.out.println("失败!");
}
fileSystem.close();
}
删除文件夹
@SuppressWarnings("deprecation")
public static void deleteFile(String filename) throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
boolean delete = fileSystem.delete(new Path(filename));
if (delete) {
System.out.println("成功!");
} else {
System.out.println("失败!");
}
fileSystem.close();
}
上传文件 Windows上传到HDFS上
public static void fromFile(String localName, String fromName)
throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
fileSystem.copyFromLocalFile(new Path(localName), new Path(fromName));
fileSystem.close();
}
从hdfs下载到Windows
public static void downLoad(String defsFile,String localFile) throws Exception {
String uri = "hdfs://192.168.77.99:9000";
// 加载hadoop配置文件
Configuration con = new Configuration();
// 创建一个可以操作HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
fileSystem.copyToLocalFile(new Path(defsFile),new Path (localFile));
fileSystem.close();
}
注意:要记得调用方法
完整的代码结构--各种操作的方法
package com.hdfs; import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI; 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; public class HDFS { public static void main(String[] args) throws Exception {
// catFile(); // getFile("/input/file1.txt");// 查询单个文件信息 // createNewFile("/input/file3.txt");
// createFile("/input/file4.txt");
// mkdirFile("/MKDIRS");//创建文件夹
// renameFile("/input/file5.txt","/input/file4.txt");//重命名文件的名字
//deleteFile("/MKDIRS");// 删除文件夹
//fromFile("C:\\Users\\70424\\Desktop\\1.txt","/input");//上传文件Windows到HDFS上
downLoad("/input/file1.txt","C:\\Users\\70424\\Desktop");//从hdfs下载到Windows
} // 查询文件信息
private static void catFile() throws IOException, FileNotFoundException {
// TODO Auto-generated method stub
// 指定集群当中主机的IP+端口
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
FileStatus[] listStatus = fileSystem.listStatus(new Path("/input/"));
for (FileStatus fileStatus : listStatus) {
/**
* 快捷键Syso
*/
System.out.print("file文件信息------》" + fileStatus);
} /**
* 获取单个文件
*/ /**
* FileStatus fileStatus = fileSystem.getFileStatus(new Path(
* "input/file1.txt")); System.out.println(fileStatus);
*/
} // 查询文件内容
public static void getFile(String fileName) throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
// 获取指定的文件
FSDataInputStream open = fileSystem.open(new Path(fileName));
// 将文件的内容装载到BufferedReader对象中去
BufferedReader reader = new BufferedReader(new InputStreamReader(open));
String line = "";
// 循环读取文件内容
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 关闭资源
reader.close();
open.close();
fileSystem.close();
} // 创建一个空的文件
public static void createNewFile(String fileName) throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
if (fileSystem.exists(new Path(fileName))) {
System.out.println("文件已经存在");
} else {
boolean createNewFile = fileSystem
.createNewFile(new Path(fileName));
if (createNewFile) {
System.out.println("成功");
} else {
System.out.println("失败");
}
}
fileSystem.close();
} // 在新创建的文件夹写入内容
public static void createFile(String fileName) throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
if (fileSystem.exists(new Path(fileName))) {
System.out.println("文件已经存在");
} else {
FSDataOutputStream create = fileSystem.create(new Path(fileName));
String str = "老黑今天又黑了";
create.write(str.getBytes());
create.flush();
create.close();
}
fileSystem.close();
} // 创建文件夹
public static void mkdirFile(String fileName) throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
boolean mkdirs = fileSystem.mkdirs(new Path(fileName));
if (mkdirs) {
System.out.println("成功!");
} else {
System.out.println("失败!");
}
fileSystem.close();
} // 重名文件的名字
public static void renameFile(String ordername, String newname)
throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
boolean rename = fileSystem.rename(new Path(ordername), new Path(
newname));
if (rename) {
System.out.println("成功!");
} else {
System.out.println("失败!");
}
fileSystem.close();
} // 删除文件夹
@SuppressWarnings("deprecation")
public static void deleteFile(String filename) throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con); boolean delete = fileSystem.delete(new Path(filename));
if (delete) {
System.out.println("成功!");
} else {
System.out.println("失败!");
}
fileSystem.close();
} // 上传文件 Windows上传到HDFS上
public static void fromFile(String localName, String fromName)
throws Exception {
// 指定集群中的主机IP+端口号
String uri = "hdfs://192.168.77.99:9000";
// 加载Hadoop的配置文件
Configuration con = new Configuration();
// 创建一个可以操作的HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
fileSystem.copyFromLocalFile(new Path(localName), new Path(fromName));
fileSystem.close();
}
//从hdfs下载到Windows
public static void downLoad(String defsFile,String localFile) throws Exception {
String uri = "hdfs://192.168.77.99:9000";
// 加载hadoop配置文件
Configuration con = new Configuration();
// 创建一个可以操作HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
fileSystem.copyToLocalFile(new Path(defsFile),new Path (localFile));
fileSystem.close(); } }
HDFS API编程的更多相关文章
- 【HDFS API编程】从本地拷贝文件,从本地拷贝大文件,拷贝HDFS文件到本地
接着之前继续API操作的学习 CopyFromLocalFile: 顾名思义,从本地文件拷贝 /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)create Configur ...
- 【HDFS API编程】查看HDFS文件内容、创建文件并写入内容、更改文件名
首先,重点重复重复再重复: /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)创建 Configuration * 2)获取 FileSystem * 3)...剩下的就是 ...
- 【HDFS API编程】jUnit封装-改写创建文件夹
首先:什么是jUnit 回顾: https://www.cnblogs.com/Liuyt-61/p/10374732.html 上一节我们知道: /** * 使用Java API操作HDFS文件系 ...
- 【HDFS API编程】第一个应用程序的开发-创建文件夹
/** * 使用Java API操作HDFS文件系统 * 关键点: * 1)创建 Configuration * 2)获取 FileSystem * 3)...剩下的就是 HDFS API的操作了*/ ...
- 【HDFS API编程】开发环境搭建
使用HDFS API的方式来操作HDFS文件系统 IDEA Java 使用Maven来管理项目 先打开IDEA,New Project 创建GAV然后next 默认使用的有idea内置的Maven,可 ...
- 【HDFS API编程】查看文件块信息
现在我们把文件都存在HDFS文件系统之上,现在有一个jdk.zip文件存储在上面,我们想知道这个文件在哪些节点之上?切成了几个块?每个块的大小是怎么样?先上测试类代码: /** * 查看文件块信息 * ...
- 【HDFS API编程】查看目标文件夹下的所有文件、递归查看目标文件夹下的所有文件
使用hadoop命令:hadoop fs -ls /hdfsapi/test 我们能够查看HDFS文件系统/hdfsapi/test目录下的所有文件信息 那么使用代码怎么写呢?直接先上代码:(这之后 ...
- 【HDFS API编程】副本系数深度剖析
上一节我们使用Java API操作HDFS文件系统创建了文件a.txt并写入了hello hadoop(回顾:https://www.cnblogs.com/Liuyt-61/p/10739018.h ...
- 干货--安装eclipse-hadoop-plugin插件及HDFS API编程两个遇到的重要错误的解决
在Windows的eclipse上写hdfs的API程序,都会遇到两个错误,在网上查了很多资料,都没有解决的办法,经过了很多时间的研究,终于把这个问题解决了 错误是 1.java.io.IOExcep ...
随机推荐
- python模块的学习
# time 模块 import time print(time.time()) #当前的时间挫 #time.sleep(3) #休息3秒钟,这3秒cpu不工作的 print(time.gmtime( ...
- win7共享打印机和防火墙配置
今天给公司一台Win7电脑连接的打印机做共享.办公司共6台电脑,其中1台是连接了打印机,并安装了打印机驱动,可以正常本机使用打印机.现在需要其他5台电脑也共享使用打印机. 1.当共享的时候,提示“无法 ...
- Delphi中的消息 (转载)
消息是Windows发出的一个通知,它告诉应用程序某个事件发生了.在Delphi中,大多数情况下Windows的消息被封装在VCL的事件中,我们只需处理相应的VCL事件就可以了,但如果我们需要编写自己 ...
- opencv学习之路(22)、轮廓查找与绘制(一)
一.简介 图2 二.代码 #include"opencv2/opencv.hpp" #include<iostream> using namespace std; us ...
- flask --- 02. 路由, 初始化配置,蓝图
一.Flask 路由 1.添加路由的方式 ① ② 实例: ① @app.route("/my_de") def detail() ② def detail() app.add_ur ...
- 新建Maven项目建成后本应该有的src/main/java和src/test/java目录并没有出现:
转自:http://www.cnblogs.com/dong-dong-dong/p/9565466.html 新建Maven项目建成后本应该有的src/main/java和src/test/java ...
- Spring 学习——Spring注解——Autowiring(自动装配)
装配方式 方式一:默认 方式二:byName:根据属性名称自动装配.会查找Bean容器内部所有初始化的与属性名成相同的Bean,自动装配.(需要通过set方法注入,注入Bean的id名称需要和实体类的 ...
- 进程池 和 multiprocessing.Pool模块
进程池的概念 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务.那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁 ...
- 源码mysql-5.7.23在cmake时出现的小问题
我是写的脚本安装mysql,cmake的步骤,另外用了一个小脚本,然后在脚本中用的bash执行的cmake命令,所以导致cmake实在子shell中执行的, 如果你是在命令行上一步一步的执行,报这个错 ...
- TexStudio + TexLive 修改字体大小
\tiny \scriptsize \footnotesize \small \normalsize \large \Large \LARGE \huge \Huge 将上述命令放在文本之前即可