packagecom.cn.hadoop.hdfs;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.net.URI;importjava.net.URISyntaxException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataInputStream;importorg.apache.hadoop.fs.FSDataOutputStream;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IOUtils;importorg.junit.Before;importorg.junit.Test;public classHdfsApi {//定义一个fileSystem的变量,用的是Hadoop的包
FileSystem fileSystem = null;//添加一个注解
@Beforepublic void getfileSystem() throwsIOException, InterruptedException, URISyntaxException{//获取一个具体的文件系统对象
fileSystem =FileSystem.get(//创建一下HDFS文件系统的访问路径,就是Hadoop配置文件中的core-sit.xml中的HDFS文件系统的所在机器
new URI("hdfs://linux.centos.one:8020"),//创建一个Hadoop的配置文件的类
newConfiguration(),//就是Linux启动的用户名
"hadoop");
}/*** 从HDFS文件系统下载文件
* 首先编写一个输入流,将内容输入到本地文件缓存。
* 然后编写一个输出流,将内容输出到本地磁盘。*/
/***@throwsIOException
*@throwsIllegalArgumentException*/@Testpublic void testDownload() throwsIllegalArgumentException, IOException{//构建一个输入流,将需要下载的文件写入到客户端的内存中
FSDataInputStream in = fileSystem.open(new Path("/user/beifeng/mapreduce/wordcount/input/wc.input"));//构建一个输出流,将需要下载的文件从内存中写入到本地磁盘
FileOutputStream out = new FileOutputStream("D://11111111111111111111111111111111111111.txt");/*** 参数说明:
* in
* 代表输入流,读取HDFS文件系统的文件到本机内存中
* out
* 代表输出流,将本机内存中的文件写入到本地磁盘中
* 4096
* 缓冲区大小
* true
* 自动关闭流,如果不使用自动关闭的话需要手动关闭输入输出流
*
* 手动关闭输入输出流:
* IOUtils.closeStream(in);
* IOUtils.closeStream(out);*/IOUtils.copyBytes(in, out,4096, true);
}/*** 上传文件到HDFS文件系统
*@throwsIOException
*@throwsIllegalArgumentException*/@Testpublic void testUpload() throwsIllegalArgumentException, IOException{//构建一个输入流,将本机需要上传的文件写入到内存中
FileInputStream in = new FileInputStream("D:\\settings.xml");//构建一个输出流,将客户端内存的数据写入到HDFS文件系统指定的路径中
FSDataOutputStream out = fileSystem.create(new Path("/input/sting.xml"), true);/** 参数说明:
* in
* 代表输入流,读取HDFS文件系统的文件到本机内存中
* out
* 代表输出流,将本机内存中的文件写入到本地磁盘中
* 4096
* 缓冲区大小
* true
* 自动关闭流,如果不使用自动关闭的话需要手动关闭输入输出流
*
* 手动关闭输入输出流:
* IOUtils.closeStream(in);
* IOUtils.closeStream(out);*/IOUtils.copyBytes(in, out,4096, true);
}/*** 测试创建一个目录
* bin/hdsf dfs -mkdir [-p] /dir
*@throwsIOException
*@throwsIllegalArgumentException*/@Testpublic void testMakeDir() throwsIllegalArgumentException, IOException{boolean isSuccess = fileSystem.mkdirs(new Path("/testMK"));
System.out.println(isSuccess);
}/*** 测试删除目录/文件:
*@throwsIOException
*@throwsIllegalArgumentException
**/@Testpublic void testDel() throwsIllegalArgumentException, IOException{
System.out.println(//返回的是一个boolean类型的值
fileSystem.delete(//指定要删除的目录
new Path("/testMK"),//是否使用递归删除
true));
}
}