hadoop学习笔记4:java实现hdfs -ls/-lsr

来源:互联网 发布:mac ssh修改端口 编辑:程序博客网 时间:2024/05/16 12:57
作业1:java代码实现hadoop fs -lsr的功能,调用FileSystem.listStatus(...)方法,显示结果,要求结果显示样式如hadoop fs -ls xxx的结果类似。
 


作业2:java 代码实现 hadoop fs -lsr 的功能


------上面两题的代码如下:

package hdfs;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class TestFIleSystem {
        public static void main(String[] args) throws IOException,
                     URISyntaxException {
               final FileSystem fs = FileSystem.get( new URI("hdfs://chaoren1:9012" ),
                            new Configuration());
               FileStatus[] listStatus = fs.listStatus( new Path("/" ));
               // java代码实现hadoop fs - lsr的功能,调用FileSystem.listStatus(...)方法,显示结果,要求结果显示样式如 hadoop fs -ls  xxx的结果类似。
               //ls (fs);
               // java 代码实现 hadoop fs - lsr 的功能
               lsr(fs, listStatus);

       }

        private static void lsr(FileSystem fs, FileStatus[] listStatus)
                      throws IOException {

               for (FileStatus fileStatus : listStatus) {
                      // 判断是否是文件夹
                      final boolean isdir = fileStatus.isDir();

                      final String permission = fileStatus.getPermission().toString();
                      final short replication = fileStatus.getReplication();

                      final String group = fileStatus.getGroup().toString();
                      final String owner = fileStatus.getOwner().toString();
                      final long blockSize = fileStatus.getBlockSize();
                      final String modificationTime = DateFormatUtils.format (
                                  fileStatus.getModificationTime(), "yyyy-MM-dd HH:mm:ss");
                      final String path = fileStatus.getPath().toString();
                      final String substringPath = path.substring(20, path.length());
                     System. out.println((isdir ? "d" : "-" )+ permission + "  "
                                  + (replication > 0 ? replication : "-").toString() + " "
                                  + owner + " " + group + "  " + blockSize + "\t\t"
                                  + modificationTime + " " + substringPath);
                      if (isdir) {
                            lsr(fs, fs.listStatus(fileStatus.getPath()));
                     }

              }

       }

        private static void ls( final FileSystem fs) throws IOException {

               final FileStatus[] listStatus = fs.listStatus(new Path( "/"));
               for (FileStatus fileStatus : listStatus) {
                      // 判断是否是文件夹
                      final boolean isdir = fileStatus.isDir();

                      final String permission = fileStatus.getPermission().toString();
                      final short replication = fileStatus.getReplication();

                      final String group = fileStatus.getGroup().toString();
                      final String owner = fileStatus.getOwner().toString();
                      final long blockSize = fileStatus.getBlockSize();
                      final String modificationTime = DateFormatUtils.format (
                                  fileStatus.getModificationTime(), "yyyy-MM-dd HH:mm:ss");
                      final String path = fileStatus.getPath().toString();
                      final String substringPath = path.substring(20, path.length());
                     System. out.println((isdir ? "d" : "-" ) + permission + "  "
                                  + (replication > 0 ? replication : "-").toString() + " "
                                  + owner + " " + group + "  " + blockSize + "\t\t"
                                  + modificationTime + " " + substringPath);
              }
       }
}


作业3: 从NameNode的源代码中找到NameNode是一个RPC Server的证据
      (提示,只需要找到RPC.getServer的调用即可)


0 0