Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
*참조1 : https://www.facebook.com/notes/yongbok-kim/apache-hadoop-nfs-exports-point-%EC%A7%80%EC%A0%95%ED%95%98%EA%B8%B0/817707064964961/
*참조2: https://developer.ibm.com/hadoop/2015/09/30/mounting-hdfs-onto-local-file-system-in-iop-4-1/
0. 필요한 패키지를 설치한다
yum install nfs-utils nfs-utils-lib
0-1. 로컬 디렉토리에 마운트할 HDFS상의 경로를 생성한다
hadoop fs -mkdir /user/gooper/jena hadoop fs -chown gooper:superuser /user/gooper/jena
0-2. HDFS상의 경로와 연결할 로컬 디렉토리를 생성한다.(필요시, 이미 존재하는 경우 생성할 필요없음 )
mkdir /svc/apps/sda/bin/fuseki/mydb* 기존 디렉토리를 사용하는 경우 디렉토리에 존재하는 내용이 모두 삭제되므로 주의 할것
1. hadoop설정값을 수정/추가한다.(hdfs-site.xml 혹은 core-site.xml)
<!-- NFS v3 -->
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
 
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
   <property>
     <name>hadoop.proxyuser.nfsserver.hosts</name>
     <value>*</value>
   </property>
   <property>
     <name>hadoop.proxyuser.nfsserver.groups</name>
     <value>*</value>
   </property>
    <property>
        <name>nfs.exports.allowed.hosts</name>
        <value>* rw</value>
    </property>
 
    <property>
        <name>nfs.export.point</name>
        <value>/user/gooper/jena</value>
    </property>
    <property>
        <name>nfs.dump.dir</name>
        <value>/tmp/.hdfs-nfs</value>
    </property>위의 옵션을 간략하게 정리하면 아래와 같다.
- hadoop.proxyuser.[userid].groups
NFS를 마운트를 허용할 사용자
- hadoop.proxyuser.[userid].hosts
이 옵션에 값을 *로 설정하면 모든 호스트들에게 NFS Gateway 허용
- nfs.exports.allowed.hosts
NFS Client가 Mount시 허용할 Host와 권한을 지정할때 사용한다.
이 옵션 값에 IP 대역을 지정 하고자 할때에는 <value>172.17.0.0/24 rw;192.168.0.0/24 rw</value> 와 같이 설정하면 된다.
(구분은 ,가 아닌 ; 로 하면 된다.)
- nfs.export.point
NFS의 exports point를 직접 지정할 수 있는 부분이다. 이 값은 HDFS안에 실제로 존재 하는 디렉토리로 설정해야 한다. 
2. 1번의 변경사항을 반영한다.
sbin/stop-dfs.sh sbin/start-dfs.sh
3. 기존에 동작하고 있는 Postmap, NFS서비스를 중지한다.
service nfs stop service rpcbind stop
4. hdfs의 portmap과 nfs3을 실행시킨다 (실행종료시킬때는 데몬을 찾아 kill로 죽인다)
bin/hdfs portmap & bin/hdfs nfs3 &
5. 확인1 (콘솔에서 rpcinfo -p sda1을 실행시킨다)
   program vers proto   port  service
    100005    3   udp   4242  mountd
    100005    1   tcp   4242  mountd
    100000    2   udp    111  portmapper
    100000    2   tcp    111  portmapper
    100005    3   tcp   4242  mountd
    100005    2   tcp   4242  mountd
    100003    3   tcp   2049  nfs
    100005    2   udp   4242  mountd
    100005    1   udp   4242  mountd
6. 확인2 (콘솔에서 showmount -e sda1를 실행시킨다)
Export list for sda1: /user/gooper/jena *
7. 로컬 디렉토리와 HDFS상의 경로를 마운트 시킨다.
mount -t nfs -o vers=3,proto=tcp,nolock,noacl,sync localhost:/user/gooper/jena /svc/apps/sda/bin/fuseki/mydb
8. mount결과 확인(콘솔에서 mount를 실행한다)
/dev/sda2 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) localhost:/user/gooper/jena on /home/gooper/svc/apps/sda/bin/apache-jena-fuseki-2.3.0/mydb type nfs (rw,vers=3,proto=tcp,nolock,addr=127.0.0.1)
* 마운트 해재 : umount  /home/gooper/svc/apps/sda/bin/apache-jena-fuseki-2.3.0/mydb
