Java API 操作 HDFS
实现功能
在HDFS文件系统中实现
- 创建目录
- 上传文件
- 下载文件
- 列出某个目录下所有文件
- 读取某个文件的数据
详细步骤
1.Windows安装jdk和eclipse
完成Java环境部署
详情可以参考:java初学者Win 10下eclipse的安装教程(超级详细)
2.新建java工程
3.导入Hadoop开发包
4.新建包
新建类
5.编程开发
package com.xf.hdfs;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class hdfTest {
public static FileSystem fs = null;
//得到fs对象
public static void Info(){
try {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://s100");
conf.set("yarn.resourcemanager.hostname", "s100");
fs = FileSystem.get(conf);
} catch (IOException e) {
e.printStackTrace();
}
}
//创建目录
public static void MkdirPath(){
Path path = new Path("/test");
try {
if(fs.exists(path)){
System.out.println(path.toString() + "已经存在 !");
}else{
boolean mkdirs = fs.mkdirs(path);
if(mkdirs){
System.out.println("创建成功!");
}else{
System.out.println("创建失败!");
}
}
// fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//上传目录到HDFS
public static void PutFile(){
Path LocalPath = new Path("file:///d:/wc.txt");
Path HdfsPath = new Path("/test/");
try {
fs.copyFromLocalFile(LocalPath, HdfsPath);
System.out.println("上传完成!");
// fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//下载目录到本地
public static void GetFile(){
Path HdfsPath = new Path("/test/wc.txt");
Path LocalPath = new Path("file:///e:/");
try {
fs.copyToLocalFile(HdfsPath, LocalPath);
System.out.println("下载完成!");
// fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//查看目录文件
public static void ListPath(){
Path path = new Path("/");
try {
if(fs.exists(path)){
FileStatus[] listStatus = fs.listStatus(path);
if(listStatus.length == 0 ){
System.out.println("目录为空!");
}else{
for(FileStatus file : listStatus){
//获取文件是否为目录和文件
String isdir = file.isFile()?"文件":"目录";
//获取副本数
short replication = file.getReplication();
//获取权限
String permisssion = file.getPermission().toString();
//获取文件大小
long len = file.getLen();
//获取路径
String path1 = file.getPath().getName().toString();
System.out.println(isdir + "\t" + permisssion + "\t"
+replication +"\t" + len + "\t" + path1);
}
}
fs.close();
}else{
System.out.println("目录不存在!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
//读取文件内容
public static void RadeFile(){
try {
Path path = new Path("/wc/wc.txt");
if(fs.exists(path)){
if(fs.isFile(path)){
FSDataInputStream open = fs.open(path);
//输入流 输出流 缓冲区大小 是否关闭流
IOUtils.copyBytes(open, System.out, 4096, true);
}
else{
System.out.println(path.toString()+ "不是文件");
}
}
else{
System.out.println("文件不存在");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Info();
// MkdirPath();
// ListPath();
// PutFile();
// GetFile();
RadeFile();
}
}