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