• 客户端连接Hadoop集群一般分为三个步骤:

      • 初始化资源

        1. //初始化资源
        2. @Before
        3. public void init() throws URISyntaxException, IOException, InterruptedException {
        4. //创建一个URI--Namenode
        5. URI uri = new URI("hdfs://Hadoop102:8020");
        6. //创建一个配置文件
        7. Configuration configuration = new Configuration();
        8. //设置副本数
        9. configuration.set("dfs.replication", "3");
        10. //用户
        11. String user = "Hishark";
        12. //1.获取客户端对象
        13. fs = FileSystem.get(uri,configuration,user);
        14. }
      • 文件操作

        1. //创建文件夹
        2. @Test
        3. public void testmkdir() throws IOException {
        4. fs.mkdirs(new Path("/xiyou/huaguoshan"));
        5. }
        6. //上传文件
        7. @Test
        8. public void putTest() throws IOException, URISyntaxException, InterruptedException {
        9. //是否删除本地文件 输出覆盖目标地址文件 本地文件地址 目标地址
        10. fs.copyFromLocalFile(false,true,new Path("D:\\BigData\\Hadoop\\Code\\sunwukong.txt"),new Path("/xiyou/huaguoshan"));
        11. }
        12. //文件的下载
        13. @Test
        14. public void getTest() throws IOException {
        15. //最后一个参数:是否启用crc校验 true-不开启
        16. fs.copyToLocalFile(false,new Path("/xiyou/huaguoshan"),new Path("D:\\BigData\\Hadoop\\Code"), true);
        17. }
        18. //删除
        19. @Test
        20. public void deleteTest() throws IOException {
        21. //删除文件
        22. //1.路径 2.是否递归删除
        23. //fs.delete(new Path("/xiyou/huaguoshan/sunwukong.txt"),false);
        24. //删除空目录
        25. //fs.delete(new Path("/wcoutput"),false);
        26. //删除非空目录
        27. fs.delete(new Path("/wcoutput"),true);
        28. }
        29. //文件的更名和移动
        30. @Test
        31. public void moveTest() throws IOException {
        32. //1.要修改的文件路径(源文件) 2.目标文件的路径
        33. //fs.rename(new Path("/wcinput/word111.txt"),new Path("/wcinput/wordrename.txt"));
        34. //文件的的移动和更名(相当于剪切操作)
        35. //fs.rename(new Path("/wcinput/wordrename.txt"), new Path("/word.txt"));
        36. //目录的更名
        37. fs.rename(new Path("/wcinput"), new Path("/input"));
        38. }
        39. //获取文件详细信息
        40. @Test
        41. public void fileDetial() throws IOException {
        42. //获取文件信息
        43. RemoteIterator<LocatedFileStatus> locatedFileStatusRemoteIterator = fs.listFiles(new Path("/"), true);
        44. //遍历迭代器
        45. while (locatedFileStatusRemoteIterator.hasNext()){
        46. LocatedFileStatus next = locatedFileStatusRemoteIterator.next();
        47. System.out.println("====="+next.getPath()+"=====");//文件路径
        48. System.out.println(next.getPath().getName());
        49. System.out.println(next.getPermission());
        50. System.out.println(next.getGroup());
        51. System.out.println(next.getOwner());
        52. System.out.println(next.getModificationTime());
        53. System.out.println(next.getLen());
        54. System.out.println(next.getReplication());
        55. //System.out.println(next.getBlockLocations());
        56. //获取块信息
        57. BlockLocation[] blockLocations = next.getBlockLocations();
        58. System.out.println(Arrays.toString(blockLocations));
        59. }
        60. }
        61. //文件和文件夹的判断
        62. @Test
        63. public void listStatusTest() throws IOException {
        64. //获取文件列表
        65. FileStatus[] fileStatuses = fs.listStatus(new Path("/"));
        66. //遍历文件列表
        67. for(FileStatus f : fileStatuses){
        68. if(f.isFile()){//如果是文件
        69. System.out.println("f:"+f.getPath().getName());
        70. }else {//是文件夹
        71. System.out.println("d:"+f.getPath().getName());
        72. }
        73. }
        74. }
      • 资源的关闭

        1. //关闭资源
        2. @After
        3. public void close() throws IOException {
        4. //3.关闭资源
        5. fs.close();
        6. }
    • 文件/文件夹操作的汇总:

      • 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);
        • 第一个参数:要删除的文件路径
        • 第二个参数:是否递归删除
      • 。。。其他的操作就不这样详细列出了,具体的看上面的代码和相应的源码即可。