NFSv3 Gatewayのインストール

CDH5.2でNFSv3 Gatewayを試してみました。

インストール

$ sudo yum install nfs-utils nfs-utils-lib hadoop-hdfs-nfs3

確認

$ sudo yum list installed | grep hdfs-nfs3
hadoop-hdfs-nfs3.x86_64   2.5.0+cdh5.2.1+578-1.cdh5.2.1.p0.14.el6 @cloudera-cdh5

設定

hdfs-site.xmlに下記を追記します。

  <property>
    <name>dfs.namenode.accesstime.precision</name>
    <value>3600000</value>
  </property>

  <property>
    <name>dfs.nfs3.dump.dir</name>
    <value>/tmp/.hdfs-nfs</value>
  </property>

起動

portmap起動します。

$ sudo hadoop portmap start &

NFSv3 Gatewayを起動します。

$ sudo /etc/init.d/hadoop-hdfs-nfs3 start

確認

$ netstat -ltn | grep 4242
tcp        0      0 0.0.0.0:4242                0.0.0.0:*                   LISTEN

hadoop portmapを起動せずにNFSv3 Gatewayを起動すると下記エラーになります。

2014-12-10 20:23:25,164 ERROR org.apache.hadoop.oncrpc.RpcProgram: Registration failure with localhost:4242, portmap entry: (PortmapMapping-100005:1:17:4242)
2014-12-10 20:23:25,165 FATAL org.apache.hadoop.mount.MountdBase: Failed to start the server. Cause:
java.lang.RuntimeException: Registration failure
        at org.apache.hadoop.oncrpc.RpcProgram.register(RpcProgram.java:135)
        at org.apache.hadoop.oncrpc.RpcProgram.register(RpcProgram.java:101)
        at org.apache.hadoop.mount.MountdBase.start(MountdBase.java:83)
        at org.apache.hadoop.hdfs.nfs.nfs3.Nfs3.startServiceInternal(Nfs3.java:55)
        at org.apache.hadoop.hdfs.nfs.nfs3.Nfs3.startService(Nfs3.java:68)
        at org.apache.hadoop.hdfs.nfs.nfs3.PrivilegedNfsGatewayStarter.start(PrivilegedNfsGatewayStarter.java:60)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.commons.daemon.support.DaemonLoader.start(DaemonLoader.java:243)
Caused by: java.net.SocketTimeoutException: Receive timed out
        at java.net.PlainDatagramSocketImpl.receive0(Native Method)
        at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:145)
        at java.net.DatagramSocket.receive(DatagramSocket.java:786)
        at org.apache.hadoop.oncrpc.SimpleUdpClient.run(SimpleUdpClient.java:66)
        at org.apache.hadoop.oncrpc.RpcProgram.register(RpcProgram.java:130)

動作確認

NFSv3 Gatewayが起動しているか確認します。

$ rpcinfo -p[NFSv3 GatewayのIP]
   program vers proto   port  service
    100005    2   tcp   4242  mountd
    100000    2   udp    111  portmapper
    100000    2   tcp    111  portmapper
    100005    1   tcp   4242  mountd
    100003    3   tcp   2049  nfs
    100005    1   udp   4242  mountd
    100005    3   udp   4242  mountd
    100005    3   tcp   4242  mountd
    100005    2   udp   4242  mountd

クライアントマシンからマウント可能か確認します。

$ showmount -e[NFSv3 GatewayのIP]
Export list for xx.xx.xx.xx:
/ *

/がマウント可能なようです。

クライアントマシンで/mntにマウントします。

$ mount -t nfs -o vers=3,proto=tcp,nolock [NFSv3 GatewayのIP]:/ /mnt/

無事にマウント出来たか確認します。
まずHDFSのデータを確認。/配下には下記のように2つディレクトリがあります。

$ hadoop fs -ls /
Found 2 items
drwxr-xr-x   - hdfs       hadoop            0 2014-12-10 21:10 /tmp
drwxrwxrwx   - hdfs       hadoop            0 2014-12-10 21:10 /user

ではNFSマウントしたクライアントマシンで確認してみます。

$ ls -l /mnt/
total 2
drwxr-xr-x 2 hdfs      hadoop    64 Dec  9 12:10 tmp
drwxrwxrwx 9 hdfs      hadoop   288 Dec  9 12:10 user

こちらも2つのディレクトリがみえています。
無事にNFSマウントできているようです。

以上、設定手順でした。
(ノ´▽`)ノ{+++THANK YOU+++}ヽ(´▽`ヽ)

Hadoop 第3版

Hadoop 第3版

広告を非表示にする