注意:本工程项目的源码可以在hadoop主页当中开放源代码中查看。

[01].创建文件与文件夹

  • 工具函数

    1. public static void createFile(String path) throws IOException, URISyntaxException {
    2. logger.info("\n[创建文件]===========================");
    3. logger.info("[目标文件]:"+path);
    4. Path dst = new Path(path);// 目的路径
    5. URI uri = new URI(Conf.uri);
    6. FileSystem fs = FileSystem.get(uri, new Configuration());
    7. fs.create(dst).close();
    8. logger.info("[创建完成]");
    9. }
    10. public static boolean mkdir(String path) throws IOException, URISyntaxException {
    11. logger.info("\n[创建目录]===========================");
    12. logger.info("[目标目录]:"+path);
    13. Path dst = new Path(path);// 目的路径
    14. URI uri = new URI(Conf.uri);
    15. FileSystem fs = FileSystem.get(uri, new Configuration());
    16. boolean ok = fs.mkdirs(dst);
    17. logger.info("[创建情况]:"+ok);
    18. return ok;
    19. }
  • 主函数

    1. //创建文件
    2. FSManager.createFile("/mz/create.txt");
    3. //创建目录
    4. FSManager.mkdir("/new");
  • 运行截屏:

17.文件与目录删除创建以及查看节点主机信息 - 图1
17.文件与目录删除创建以及查看节点主机信息 - 图2
17.文件与目录删除创建以及查看节点主机信息 - 图3
17.文件与目录删除创建以及查看节点主机信息 - 图4

[02].删除文件与文件夹

  • 首先创建一些多余文件

    1. //先在new目录下创建9个文件
    2. for(int i =1;i<10;i++) {
    3. FSManager.createFile("/new/text_"+i+".txt");
    4. }
    5. //主目录下创建1个文件
    6. FSManager.createFile("/HeiHei.txt");

    创建在主目录的多余文件:
    17.文件与目录删除创建以及查看节点主机信息 - 图5
    创建在new里的文件

  • 开始演示删除文件与文件夹

    1. //删除主目录的那个多余文件
    2. FSManager.delete("/HeiHei.txt", true);
    3. //删除new目录所有文件及文件夹
    4. FSManager.delete("/new", true);
  • 函数

    1. public static boolean delete(String path, boolean recursive) throws IOException, URISyntaxException {
    2. logger.info("\n[删除目录]===========================");
    3. logger.info("[目标目录]:" + path);
    4. Path dst = new Path(path);// 目的路径
    5. URI uri = new URI(Conf.uri);
    6. FileSystem fs = FileSystem.get(uri, new Configuration());
    7. boolean ok = fs.delete(dst, recursive);
    8. logger.info("[删除情况]:" + ok);
    9. return ok;
    10. }
  • 执行情况

17.文件与目录删除创建以及查看节点主机信息 - 图6
后台日志
17.文件与目录删除创建以及查看节点主机信息 - 图7

[03].重命名文件

  • 先创建文件再命名

    1. //先创建
    2. FSManager.createFile("/NeedReanme.txt");
    3. //再命名
    4. FSManager.rename("/NeedReanme.txt", "/HaveNewName.txt");
  • 函数

    1. public static boolean rename(String oldPath, String newPath) throws IOException, URISyntaxException {
    2. logger.info("\n[重命名]===========================");
    3. logger.info("[旧路径]:" + oldPath);
    4. logger.info("[新路径]:" + newPath);
    5. Path last = new Path(oldPath);// 目的路径
    6. Path newst = new Path(newPath);// 目的路径
    7. URI uri = new URI(Conf.uri);
    8. FileSystem fs = FileSystem.get(uri, new Configuration());
    9. boolean ok = fs.rename(last, newst);
    10. logger.info("[命名情况]:" + ok);
    11. return ok;
    12. }
  • 日志情况

17.文件与目录删除创建以及查看节点主机信息 - 图8

  • web情况

17.文件与目录删除创建以及查看节点主机信息 - 图9

[04].重命名目录

  • 先创建目录

    1. FSManager.mkdir("/oldName");
    2. // 先在oldName目录下创建9个文件
    3. for (int i = 1; i < 10; i++) {
    4. FSManager.createFile("/oldName/text_" + i + ".txt");
    5. }
    6. //重命名文件夹
    7. FSManager.rename("/oldName", "/newName");
  • 日志情况

17.文件与目录删除创建以及查看节点主机信息 - 图10

  • 前台

17.文件与目录删除创建以及查看节点主机信息 - 图11
17.文件与目录删除创建以及查看节点主机信息 - 图12

[05].追加文件内容

  • 追加到一个空的文件

    1. //追加内容
    2. FSManager.appendStringToFile("我是被追加的内容", "/HaveNewName.txt");
    3. //读取被追加后的文件
    4. String content = FSManager.readContent("/HaveNewName.txt");
    5. if (content != null) {
    6. System.out.println(content);
    7. }
  • 函数

    1. public static void appendStringToFile(String content,String dstPath) throws URISyntaxException, IOException {
    2. logger.info("\n[追加内容]===========================");
    3. logger.info("[文件内容]:" + content);
    4. logger.info("[目标文件]:" + dstPath);
    5. Path dst = new Path(dstPath);// 目的路径
    6. URI uri = new URI(Conf.uri);
    7. Configuration conf = new Configuration();
    8. conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");
    9. conf.set("dfs.client.block.write.replace-datanode-on-failure.enable", "true");
    10. FileSystem fs = FileSystem.get(uri,conf);
    11. FSDataOutputStream fos = fs.append(dst);
    12. fos.write(content.getBytes());
    13. fos.close();
    14. logger.info("[写入完成]");
    15. }
  • 运行日志

17.文件与目录删除创建以及查看节点主机信息 - 图13

[06].获取文件信息

  • 调用

    1. FSManager.getLastTime("/HaveNewName.txt");
  • 函数

    1. public static long getLastTime(String path) throws URISyntaxException, IOException {
    2. logger.info("\n[获取最新时间]===========================");
    3. logger.info("[目标文件]:" + path);
    4. Path dst = new Path(path);// 目的路径
    5. URI uri = new URI(Conf.uri);
    6. FileSystem fs = FileSystem.get(uri,new Configuration());
    7. FileStatus status = fs.getFileStatus(dst);
    8. long newTime = status.getModificationTime();
    9. logger.info("[最新时间]:"+newTime);
    10. return newTime;
    11. }

    17.文件与目录删除创建以及查看节点主机信息 - 图14

    [07].查看block分布主机

  • 函数

    1. public static void getBlockInfo(String path) throws URISyntaxException, IOException {
    2. logger.info("\n[获取Block分机情况]===========================");
    3. logger.info("[目标文件]:" + path);
    4. Path dst = new Path(path);// 目的路径
    5. URI uri = new URI(Conf.uri);
    6. FileSystem fs = FileSystem.get(uri,new Configuration());
    7. FileStatus status = fs.getFileStatus(dst);
    8. BlockLocation blocks[] = fs.getFileBlockLocations(status, 0,status.getLen());
    9. for(int i = 0 ; i <blocks.length;i++) {
    10. String hosts[] = blocks[i].getHosts();
    11. for(String host:hosts) {
    12. logger.info("[Block]:"+i+"\t[Location]:"+hosts);
    13. }
    14. }
    15. }
  • 调用

    1. FSManager.getBlockInfo("/HaveNewName.txt");
  • 后台日志

17.文件与目录删除创建以及查看节点主机信息 - 图15

[08].获取所有node节点情况

  • 调用

    1. FSManager.getDataNodeInfo();
  • 函数

    1. public static String[] getDataNodeInfo() throws URISyntaxException, IOException {
    2. logger.info("\n[获取DataNode节点情况]===========================");
    3. URI uri = new URI(Conf.uri);
    4. FileSystem fs = FileSystem.get(uri,new Configuration());
    5. DatanodeInfo dataNodeInfo[] = ((DistributedFileSystem)fs).getDataNodeStats();
    6. String names[] = new String[dataNodeInfo.length];
    7. for(int i = 0;i<dataNodeInfo.length;i++) {
    8. names[i] = dataNodeInfo[i].getHostName();
    9. logger.info("[Node]:"+i+"\t[HostName]:"+names[i]);
    10. }
    11. return names;
    12. }
  • 后台日志

17.文件与目录删除创建以及查看节点主机信息 - 图16