HDFS--Java--API
导入依赖--Maven仓库的官网(mvnrepository.com)
1、打开IDEA创建一个Hadoop项目
2、在Mpom.mxl中添加Hadoop2.7.6的依赖
org.apache.hadoop
hadoop-client
2.7.6
3、在src-main-java创建一个包com.shujia.HDFS
4、在包com.shujia.HDFS新建一个类HDFSJavaAPI
操作流程
//1、创建连接
// fs.defaultFS 和 hdfs://master:9000 是配置Hadoop时设置的HDFS的服务端口
//这个端口在配置文件和HDFS的web界面中可以找到
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://master:9000");
FileSystem fs = FileSystem.get(conf);
//2、通过创建的连接对象fs对HDFS进行操作
通过 fs.方法 进行操作
//3、关闭连接
fs.close();
程序示例
package com.shujia.HDFS;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.*;
public class HDFSJavaAPI {
FileSystem fs;
@Before
public void init() throws IOException {
// 1、创建连接
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://master:9000");
fs = FileSystem.get(conf);
}
// 创建目录(默认可以递归地创建目录)
@Test
public void mkdirs() throws IOException {
fs.mkdirs(new Path("/e/f/g"));
}
// 删除目录
@Test
public void deleteDir() throws IOException {
// 非递归的删除,相当于直接rm
// fs.delete(new Path("/e"), false);
// 递归地删除,相当于rm -r
fs.delete(new Path("/e"), true);
}
// 移动文件
@Test
public void moveFile() throws IOException {
fs.rename(new Path("/CentOS-7-x86_64-DVD-2009.iso"), new Path("/a/CentOS-7-x86_64-DVD-2009.iso"));
}
// 上传文件 put (move上传文件时会删除本地文件)
@Test
public void putFile() throws IOException {
fs.moveFromLocalFile(new Path("data/students.txt"), new Path("/a/students.txt"));
}
// 下载文件 get (copy不会)
@Test
public void getFile() throws IOException {
fs.copyToLocalFile(new Path("/a/students.txt"), new Path("data/"));
}
// 读文件
@Test
public void readFromHDFS() throws IOException {
FSDataInputStream fsDataInputStream = fs.open(new Path("/a/students.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(fsDataInputStream));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
//用完之后要关闭流通道
br.close();
fsDataInputStream.close();
}
// 写文件
@Test
public void writeFile() throws IOException {
Path path = new Path("/newFile1.txt");
FSDataOutputStream fsDataOutputStream;
// 判断文件是否存在
if(fs.exists(path)){
// 直接追加有问题 不常用
fsDataOutputStream = fs.append(path);
}else{
fsDataOutputStream= fs.create(path);
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fsDataOutputStream));
bw.write("hello world");
bw.newLine();
bw.write("hadoop hadoop hive hbase");
bw.newLine();
bw.flush();
bw.close();
fsDataOutputStream.close();
}
@After
public void closed() throws IOException {
fs.close();
}
}
FileSystem
(1)fileSysterm是使用java代码操作hdfs的api接口
(2)文件操作
create 写文件
open 读取文件
delete 删除文件
(3)目录操作
mkdirs 创建目录
delete 删除文件或目录
listStatus 列出目录的内容
getFileStatus 显示文件系统的目录和文件的元数据信息
getFileBlockLocations 显示文件存储位置