客户端连接Hadoop集群一般分为三个步骤:
初始化资源
//初始化资源@Beforepublic void init() throws URISyntaxException, IOException, InterruptedException {//创建一个URI--NamenodeURI uri = new URI("hdfs://Hadoop102:8020");//创建一个配置文件Configuration configuration = new Configuration();//设置副本数configuration.set("dfs.replication", "3");//用户String user = "Hishark";//1.获取客户端对象fs = FileSystem.get(uri,configuration,user);}
文件操作
//创建文件夹@Testpublic void testmkdir() throws IOException {fs.mkdirs(new Path("/xiyou/huaguoshan"));}//上传文件@Testpublic void putTest() throws IOException, URISyntaxException, InterruptedException {//是否删除本地文件 输出覆盖目标地址文件 本地文件地址 目标地址fs.copyFromLocalFile(false,true,new Path("D:\\BigData\\Hadoop\\Code\\sunwukong.txt"),new Path("/xiyou/huaguoshan"));}//文件的下载@Testpublic void getTest() throws IOException {//最后一个参数:是否启用crc校验 true-不开启fs.copyToLocalFile(false,new Path("/xiyou/huaguoshan"),new Path("D:\\BigData\\Hadoop\\Code"), true);}//删除@Testpublic void deleteTest() throws IOException {//删除文件//1.路径 2.是否递归删除//fs.delete(new Path("/xiyou/huaguoshan/sunwukong.txt"),false);//删除空目录//fs.delete(new Path("/wcoutput"),false);//删除非空目录fs.delete(new Path("/wcoutput"),true);}//文件的更名和移动@Testpublic void moveTest() throws IOException {//1.要修改的文件路径(源文件) 2.目标文件的路径//fs.rename(new Path("/wcinput/word111.txt"),new Path("/wcinput/wordrename.txt"));//文件的的移动和更名(相当于剪切操作)//fs.rename(new Path("/wcinput/wordrename.txt"), new Path("/word.txt"));//目录的更名fs.rename(new Path("/wcinput"), new Path("/input"));}//获取文件详细信息@Testpublic void fileDetial() throws IOException {//获取文件信息RemoteIterator<LocatedFileStatus> locatedFileStatusRemoteIterator = fs.listFiles(new Path("/"), true);//遍历迭代器while (locatedFileStatusRemoteIterator.hasNext()){LocatedFileStatus next = locatedFileStatusRemoteIterator.next();System.out.println("====="+next.getPath()+"=====");//文件路径System.out.println(next.getPath().getName());System.out.println(next.getPermission());System.out.println(next.getGroup());System.out.println(next.getOwner());System.out.println(next.getModificationTime());System.out.println(next.getLen());System.out.println(next.getReplication());//System.out.println(next.getBlockLocations());//获取块信息BlockLocation[] blockLocations = next.getBlockLocations();System.out.println(Arrays.toString(blockLocations));}}//文件和文件夹的判断@Testpublic void listStatusTest() throws IOException {//获取文件列表FileStatus[] fileStatuses = fs.listStatus(new Path("/"));//遍历文件列表for(FileStatus f : fileStatuses){if(f.isFile()){//如果是文件System.out.println("f:"+f.getPath().getName());}else {//是文件夹System.out.println("d:"+f.getPath().getName());}}}
资源的关闭
//关闭资源@Afterpublic void close() throws IOException {//3.关闭资源fs.close();}
文件/文件夹操作的汇总:
- mkdirs(Path path);//新建一个文件夹
- copyFromLocalFile(boolean delSrc,boolean overwrite , Path pathlocal, Path des);
- 第一个参数:是否删除本地文件
- 第二个参数:若目标文件已存在,是否覆盖目标文件。
- 第三个参数:本地文件地址
- 第四个参数:集群目标地址
- copyToLocalFile(boolean delSrc , Path path1, Path path2, boolean useRawLocalFileSystem);
- 第一个参数:是否删除被复制的文件
- 第二个参数:被复制的集群文件地址
- 第三个参数:本地地址
- 第四个参数:是否启用crc校验,默认是false-启用
- delete(Path path, boolean b);
- 第一个参数:要删除的文件路径
- 第二个参数:是否递归删除
- 。。。其他的操作就不这样详细列出了,具体的看上面的代码和相应的源码即可。
