public static void main(String[] args) throws IOException {    

     startService(args, null);

  } 


static void startService(String[] args, DatagramSocket registrationSocket) throws IOException {

    StringUtils.startupShutdownMessage(Nfs3.class, args, LOG);    

    /* Nfs3 constructor에서 

     * super(new RpcProgramNfs3(conf, registrationSocket), conf); << Nfs3Base()

     * Nfs3Base()에서 NFS3_SERVER_PORT 설정   

     */

    final Nfs3 nfsServer = new Nfs3(new Configuration(), registrationSocket);

    

    /* public void startServiceInternal(boolean register) throws IOException 에서

     * nfs server를 mount 시키고 

     * Nfs3Base.java에 있는 start(boolean register)를 호출하여 TCP server를 실행시킨다

     * NFS는 오직 TCP server만을 지원하며 UDP는 지원하지 않는다

     */

    nfsServer.startServiceInternal(true);

  }

저작자 표시 비영리 변경 금지
신고
Posted by youngjinkmi0706

hadoop-common/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs

  • /mount/mountd

 super(new RpcProgramMountd(config, registrationSocket));

>> MountdBase의 Constructor에 RpcProgram을 전달

↓↓

public RpcProgramMountd(Configuration config, DatagramSocket registrationSocket) throws IOException {

    // Note that RPC cache is not enabled


    /*  

     *  protected RpcProgram(String program, String host, int port, int       progNumber,int lowProgVersion, int highProgVersion,DatagramSocket registrationSocket)

     *  RpcProgram.java의 Constructor에서 RpcProgram객체에 매개변수를 할당

     *  @param program program name

     *  @param host host where the Rpc server program is started

     *  @param port port where the Rpc server program is listening to

     *  @param progNumber program number as defined in RFC 1050

     *  @param lowProgVersion lowest version of the specification supported

     *  @param highProgVersion highest version of the specification supported

     */ 

    super("mountd", "localhost", config.getInt("nfs3.mountd.port", PORT),

        PROGRAM, VERSION_1, VERSION_3, registrationSocket); 

   

    //export는 공유 대상(mount를 할 대상) 

    exports = new ArrayList<String>();

    exports.add(config.get(Nfs3Constant.EXPORT_POINT,

        Nfs3Constant.EXPORT_POINT_DEFAULT));

    this.hostsMatcher = NfsExports.getInstance(config);


    //mount entry 할당

    this.mounts = Collections.synchronizedList(new ArrayList<MountEntry>());

    UserGroupInformation.setConfiguration(config);

    SecurityUtil.login(config, DFS_NFS_KEYTAB_FILE_KEY,

            DFS_NFS_KERBEROS_PRINCIPAL_KEY);

    //namenode 세팅

    this.dfsClient = new DFSClient(NameNode.getAddress(config), config);

  }

 

 mountd.start(true); // UDP, TCP server Start



저작자 표시 비영리 변경 금지
신고
Posted by youngjinkmi0706

hdfs 분석의 필요성이 있기에 소스코드를 분석해보자 !!

일단 소스코드는 hadoop git에서 받으면 된다

내가 분석할 hdfs 소스는

hadoop-common/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop

hadoop-common/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs 에 있는 소스 파일들이다


hadoop-hdfs/src/main/java/org/apache/hadoop

  • StorageType.java

스토리지 타입을 골라준다 (DISK/SSD)

public static final StorageType DEFAULT = DISK;



저작자 표시 비영리 변경 금지
신고
Posted by youngjinkmi0706


티스토리 툴바