Java API 操作 HDFS

实现功能

在HDFS文件系统中实现

  • 创建目录
  • 上传文件
  • 下载文件
  • 列出某个目录下所有文件
  • 读取某个文件的数据

详细步骤

1.Windows安装jdk和eclipse
完成Java环境部署
详情可以参考:java初学者Win 10下eclipse的安装教程(超级详细)
2.新建java工程
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
3.导入Hadoop开发包
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
Java API 操作 HDFS
4.新建包
Java API 操作 HDFS
Java API 操作 HDFS
新建类
Java API 操作 HDFS
Java API 操作 HDFS
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();
}
}