HDFS学习笔记:HDFS JavaAPI编程

1.搭建环境
          上传、解压eclipse、设置工作目录、新建java工程
2.加入jar包
          新建名为lib的folder,将这些目录下的jar包都复制到lib里,然后build path
              /opt/software/hadoop-2.6.0-cdh5.14.0/share/hadoop/common
              /opt/software/hadoop-2.6.0-cdh5.14.0/share/hadoop/common/lib
              /opt/software/hadoop-2.6.0-cdh5.14.0/share/hadoop/hdfs
              /opt/software/hadoop-2.6.0-cdh5.14.0/share/hadoop/hdfs/lib
3.新建Package,名为com.hdfs,实现了一些基本操作
 

package com.hdfs;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;

import org.apache.commons.compress.utils.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.FsStatus;
import org.apache.hadoop.fs.Path;

public class Demo {
	public static void main(String[] args) throws IOException 
	{
		//读取配置信息,指明操作的NameNode
		Configuration con=new Configuration();
		con.set("fs.defaultFS","hdfs://192.168.0.107:9000");
		
		//使用con中的配置信息返回一个filesystem对象
		FileSystem fs=FileSystem.get(con);

		//new一个path对象来放路径
		Path path=new Path("/folder20/folder21");
		
		//判断目录路径是否已经存在,不存在则创建目录
		if (fs.exists(path)) fs.mkdirs(path);
		
		//创建一些子目录
		Path path1=new Path("/folder20/folder21/folder211");
		Path path2=new Path("/folder20/folder21/folder212");
		Path path3=new Path("/folder20/folder21/folder213");
		fs.mkdirs(path1);
		fs.mkdirs(path2);
		fs.mkdirs(path3);
		
		//获取对象状态,然后用以下的方法获取各类对象信息,执行效果跟hdfs dfs -ls /folder20/folder21 是一样的
		FileStatus status=fs.getFileStatus(path);
		String d=status.isDirectory()?"d":"-";
		System.out.println(d+status.getPermission()+" "+status.getOwner()+" "+status.getGroup()
		                   +" "+status.getBlockSize()+" "+status.getModificationTime()+" "+status.getPath().getName());
		
		//foreach遍历路径下的对象信息
		FileStatus[] stat=fs.listStatus(path);
		for (FileStatus fileStatus : stat) {
			String d1=fileStatus.isDirectory()?"d":"-";
			System.out.println(d+fileStatus.getPermission()+" "+fileStatus.getOwner()+" "+fileStatus.getGroup()
			                   +" "+fileStatus.getBlockSize()+" "+fileStatus.getModificationTime()+" "+fileStatus.getPath());
		}
		
		System.out.println();
		
		//重命名对象路径
		fs.rename(path2,new Path("/folder20/folder21/folder212x"));
		
		//上传下载
		File file=new File("/abc.txt");
		file.createNewFile();
		OutputStream f = new FileOutputStream("/abc.txt");
		PrintStream ps = new PrintStream(f);
		ps.println("abc");
		ps.close();
		
		FileInputStream inputStream = new FileInputStream("/abc.txt");
		OutputStream outputStream=fs.create(new Path("/folder20/abc.txt"));
		IOUtils.copy(inputStream, outputStream);
		
		InputStream in=fs.open(new Path("/folder20/abc.txt"));
		OutputStream out=new FileOutputStream("/home/cde.txt");
		IOUtils.copy(in, out,1024); //1024是缓存大小
		
		//如果为true,则里面无论是否有文件都会删除,如果是false,则里面如果有文件就不会删除
		fs.delete(new Path("/folder20"), true);
		fs.close();
	}
}

 

你可能感兴趣的:(Hadoop)