package it.dawn.HDFSPra; import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test; /**
* @version 1.0
* @author Dawn
* @since 2019年4月27日22:42:32
*
* 注意:1.需要配置hadoop环境
* 2.需要编译好的winutil包
*/
public class HdfsClientDemo01 { public static FileSystem fs=null;
public static String hdfs="hdfs://192.168.40.11:9000"; //初始化加载
@Before
public void init() throws IOException, InterruptedException, URISyntaxException
{
System.setProperty("hadoop.home.dir", "E:\\hadoop2.7.3\\hadoop-2.7.3");
// 1.加载配置
Configuration conf= new Configuration();
// 2.设置副本数 默认3块
conf.set("dfs.replication", "2");
// 3.设置块大小 默认128m
conf.set("dfs.blocksize", "64m");
// 4.构造客户端
fs=FileSystem.get(new URI(hdfs), conf, "root");
} /*
* 上传文件
* hdfs dfs -put /文件名 /hdfs目录
*/
@Test
public void hdfsUpData() throws IllegalArgumentException, IOException
{
//上传文件
fs.copyFromLocalFile(new Path("f:/temp/xxx.txt"), new Path("/"));
//2.关闭资源
fs.close();
} /*
* 下载文件
* hdfs dfs -get /hdfs文件 /文件目录
*/
@Test
public void hdfsDownload() throws IllegalArgumentException, IOException {
//下载文件
fs.copyToLocalFile(new Path("/xxx.txt"), new Path("f:/")); fs.close();
} /*
* 1:在hdfs中创建文件夹
* hdfs dfs -mkdir /文件名
*/
@Test
public void hdfsMkdir() throws IllegalArgumentException, IOException
{
//1.调用创建文件夹方法
fs.mkdirs(new Path("/dawn/ss"));
System.out.println("创建成功");
//2.关闭资源
fs.close();
} /*
* 2:在hdfs中 移动/修改 文件
* 相当于Ctrl+x
*/
@Test
public void hdfsRename() throws IllegalArgumentException, IOException
{
//1.调用移动并修改
fs.rename(new Path("/test/a.txt"), new Path("/dawn/renamea.txt"));
//2.关闭资源
fs.close();
} /*
* 3:在hdfs中删除文件夹
* hdfs dfs -rm -r /
*/
@Test
public void hdfsRm() throws IllegalArgumentException, IOException
{
//fs.delete(new Path("/hunterhenshuai"));
//1.调用删除文件方法 参数1:删除的路径 参数2:是否递归删除
fs.delete(new Path("/test"), true);
fs.close(); } /*
* 4:查询hdfs下制定的目录信息
*/
@Test
public void hdfsLs() throws FileNotFoundException, IllegalArgumentException, IOException
{
//1.调用方法 返回远程迭代器
RemoteIterator<LocatedFileStatus> iter=fs.listFiles(new Path("/dawn"), true); //2.取迭代器数据
while(iter.hasNext())
{
//拿数据
LocatedFileStatus status=iter.next(); System.out.println("文件路径为:"+status.getPath());
System.out.println("块大小为:"+status.getBlockSize() / (1024*1024) );
System.out.println("文件长度:"+ status.getLen());
System.out.println("副本数量为:"+status.getReplication());
System.out.println("块信息为:"+Arrays.asList(status.getBlockLocations())); System.out.println("============================>");
} //3.关闭资源
fs.close(); } /*
* 5:判断文件还是文件夹
*/
@Test
public void findIsFOrD() throws FileNotFoundException, IllegalArgumentException, IOException {
//1.展示状态信息
FileStatus[] listStatus = fs.listStatus(new Path("/")); //2.遍历所有文件
for(FileStatus ls:listStatus) {
if(ls.isFile()) {
//文件
System.out.println("文件----f----" +ls.getPath().getName());
}else {
//文件夹
System.out.println("文件夹----d----" +ls.getPath().getName());
}
}
} }