HDFSの新しい機能を確認 (4) – NFSゲートウェイ

以前も書いた通り、最近のHDFSではNFS Gatewayを利用することが可能になっています。

CDH5 ベータ1 のNFSv3ゲートウェイを試してみました

これにより、HDFSプロトコルを知らないレガシーアプリケーション、非Javaな環境、その他からHDFSに読み書きすることができるようになりました。(REST-APIを用いるHttpFSやWebHDFS、Fuse-DFSなどもありますが..)http://hadoop.apache.org/docs/r2.3.0/hadoop-project-dist/hadoop-hdfs/HdfsNfsGateway.html

NFSゲートウェイを使ってみる

Cloudera Managerから設定する場合、NFS Gatewayのロールを割り当てるだけなので非常に簡単です。なお、NFSゲートウェイは複数のノードに割り当てることができるので、ロードバランサーなどで負荷を分散することができます。下記は4ノードに割り当てた場合です。

CM_NFSgwクライアントからマウントしてみます。前回はnolockが必要でしたが、今回は不要でした。


root@clouderavm:~# showmount -e hadoop12
Export list for hadoop12:
/ *
root@clouderavm:~# mount -t nfs -o vers=3,proto=tcp hadoop12:/ /mnt
root@clouderavm:~# df
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda1       94824284  59822224  30162228  67% /
udev             4074936         4   4074932   1% /dev
tmpfs             816904       852    816052   1% /run
none                5120         0      5120   0% /run/lock
none             4084504       312   4084192   1% /run/shm
cgroup           4084504         0   4084504   0% /sys/fs/cgroup
hadoop12:/     341367424 220718336 120649088  65% /mnt
root@clouderavm:~# ls /mnt/
tmp/  user/
root@clouderavm:~# cp /etc/hosts /mnt/
tmp/  user/
root@clouderavm:~# ls /mnt/tmp/
hive-hive  hosts  logs
root@clouderavm:~# head /mnt/tmp/hosts
127.0.0.1 localhost
10.0.1.1 clouderavm.localdomain clouderavm
10.0.1.111 hadoop11.localdomain hadoop11
10.0.1.112 hadoop12.localdomain hadoop12
10.0.1.113 hadoop13.localdomain hadoop13
10.0.1.114 hadoop14.localdomain hadoop14
10.0.1.115 hadoop15.localdomain hadoop15
10.0.1.116 hadoop16.localdomain hadoop16
10.0.1.117 hadoop17.localdomain hadoop17
10.0.1.118 hadoop18.localdomain hadoop18
root@clouderavm:~#

別のホストからHDFSにアクセスしてみます。


kawasaki@hadoop12:~$ hadoop fs -ls /tmp
Found 4 items
drwxr-xr-x   - hdfs   supergroup          0 2014-04-10 20:44 /tmp/.cloudera_health_monitoring_canary_files
drwxrwxrwx   - hive   supergroup          0 2014-03-31 23:39 /tmp/hive-hive
-rw-r--r--   3 root   supergroup        801 2014-04-10 20:45 /tmp/hosts
drwxrwxrwt   - mapred hadoop              0 2014-03-31 23:38 /tmp/logs
kawasaki@hadoop12:~$ hadoop fs -cat /tmp/hosts
127.0.0.1 localhost
10.0.1.1 clouderavm.localdomain clouderavm
10.0.1.111 hadoop11.localdomain hadoop11
10.0.1.112 hadoop12.localdomain hadoop12
10.0.1.113 hadoop13.localdomain hadoop13
10.0.1.114 hadoop14.localdomain hadoop14
10.0.1.115 hadoop15.localdomain hadoop15
10.0.1.116 hadoop16.localdomain hadoop16

前回も書いた通り、HDFSに対するデータのやり取りですが、NFS経由でのデータのやり取りはあまり重要ではないと考えます。現在はSqoopやFlumeなどの分散アクセスできるツールが揃っています。例えばSqoopはMapReduceを使い、デフォルトで4並列でRDBMSからデータを取り込むことができるので、NFSよりも効率的にデータ転送ができるでしょう。

しかし、これらの手段が利用できない場合、NFSの選択肢が増えたことは喜ばしいことですね。NFSゲートウェイを複数立てることで、見かけ上スループットを向上させることも可能です。さらにパフォーマンスの改善もされていくことも期待です。

参考

RHEL/CentOS以外の環境での制約

これでハマりましたが、RHEL/CentOS以外で動作させる場合には注意が必要です。

http://www.cloudera.com/content/cloudera-content/cloudera-docs/CM5/latest/Cloudera-Manager-Release-Notes/cm5rn_known_issues.html?scroll=known_issues

HDFS NFS gateway works only on RHEL and similar systems

Because of bug in native versions of portmap/rpcbind, the HDFS NFS gateway does not work on SLES, Ubuntu, or Debian systems. It does work on supported versions of RHEL- compatible systems on which rpcbind-0.2.0-10.el6 or later is installed. (See

Bug: 731542 (Red Hat), 823364 (SLES), 594880 (Debian)

Severity: High
Workaround:

On Red Hat and similar systems, make sure rpcbind-0.2.0-10.el6 or later is installed.
On SLES, Debian, and Ubuntu systems, you can use the gateway by running rpcbind in insecure mode, using the -i option, but keep in mind that this allows anyone from a remote host to bind to the portmap.

具体的には、Ubuntuの場合、下記の設定ファイルに -i オプションを足す必要があります。

/etc/init/portmap.conf"

script
OPTIONS="-w -i"
if [ -f /etc/default/rpcbind ]; then
. /etc/default/rpcbind

変更後はサーバを再起動しましょう。

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)