★悩み★
NFS経由でHDFSにアクセスしたいんだけど、ファイル操作系のシステムコールはどのぐらいサポートしているんだろうかぁ。
こういった「悩み」に答えます。
★本記事の内容★
(1) HDFSのNFS Gatewayを使う方法をご紹介
(2) NFS経由でのHDFSが対応するファイル操作系のシステムコールをご紹介
これからご紹介する「NFS経由でのHDFSが対応するファイル操作系のシステムコール」を把握することで、NFS経由でのHDFSがサポートしているファイル操作系のシステムコールを理解できます。
記事の前半では「HDFSのNFS Gatewayを使う方法」を解説しつつ、記事の後半では「NFS経由でHDFSが対応しているシステムコール」をご紹介します。
この記事を読み終えることで、「NFS経由でのHDFSがサポートしているファイル操作系のシステムコール」を把握した状態になります。
HDFSのNFS Gatewayを使う方法
今回は実機検証をするために、NFS経由でHDFSへアクセスできる環境が必要です。
環境構築の手順に関しては、以下の記事をご覧ください。
以上が、「HDFSのNFS Gatewayを使う方法」となります。
NFS経由でのHDFSが対応するファイル操作系のシステムコール
続いて、「NFS経由でのHDFSが対応するファイル操作系のシステムコール」に関してご紹介します。
★ご紹介の流れ★
1. 検証項目のご紹介
2. 検証するためのプログラムをご紹介
3. 検証結果をご紹介
上記の流れで「NFS経由でのHDFSが対応するファイル操作系のシステムコール」をご紹介します。
検証項目:NFS経由でのHDFSが対応するシステムコール
「NFS経由でのHDFSが対応するシステムコール」を検証するための検証項目は、以下となります。
検証番号 | システムコール | オプション |
1 | open | O_APPEND |
2 | open | O_ASYNC |
3 | open | O_CLOEXEC |
4 | open | O_CREAT |
5 | open | O_DIRECT |
6 | open | O_DIRECTORY |
7 | open | O_DSYNC |
8 | open | O_EXCL |
9 | open | O_LARGEFILE |
10 | open | O_NOATIME |
11 | open | O_NOCTTY |
12 | open | O_NOFOLLOW |
13 | open | O_NONBLOCK |
14 | open | O_PATH |
15 | open | O_SYNC |
16 | open | O_TMPFILE |
17 | open | O_TRUNC |
18 | read | なし |
19 | write | なし |
20 | lseek | なし |
21 | remove | なし |
22 | rename | なし |
以下のサイトからファイル操作系に関するコマンドを抽出し、上記の検証項目を立てました。
Linuxマニュアル(日本語)
※クリックすると新規タブが開きます。
低水準システムコール(例えば、fopenなど)は、openが内包していると考えたため、検証項目から省いています。
以上が、「検証項目:NFS経由でのHDFSが対応するシステムコール」となります。
NFS経由でのHDFSが対応するシステムコールを検証するプログラム
NFS経由でのHDFSが対応するシステムコールを検証するにあたり、簡単なC言語アプリを作成しました。
例えば、「システムコールであるremoveを実行するプログラム」は、以下となります。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int fd;
char *file_name = argv[1];
fd = remove(file_name);
if (fd == -1) {
return 1;
}
return 0;
}
今回の検証で利用したプログラムとシェルスクリプトを以下に掲載します。
気になる方は、ダウンロードし、中身を確認してください。
以上が、「NFS経由でのHDFSが対応するシステムコールを検証するプログラム」となります。
検証結果:NFS経由でのHDFSが対応するシステムコール
「NFS経由でのHDFSが対応するシステムコール」の検証結果を以下に記載します。
検証結果は、以下となります。
検証番号 | システムコール | オプション | 検証結果(○:正常動作を確認) |
1 | open | O_APPEND | ○ |
2 | open | O_ASYNC | ○ |
3 | open | O_CLOEXEC | ○ |
4 | open | O_CREAT | ○ |
5 | open | O_DIRECT | ○ |
6 | open | O_DIRECTORY | ○ |
7 | open | O_DSYNC | ○ |
8 | open | O_EXCL | ○ |
9 | open | O_LARGEFILE | ○ |
10 | open | O_NOATIME | ○ |
11 | open | O_NOCTTY | ○ |
12 | open | O_NOFOLLOW | ○ |
13 | open | O_NONBLOCK | ○ |
14 | open | O_PATH | ○ |
15 | open | O_SYNC | ○ |
16 | open | O_TMPFILE | × |
17 | open | O_TRUNC | × |
18 | read | なし | ○ |
19 | write | なし | ○ |
20 | lseek | なし | ○ |
21 | remove | なし | ○ |
22 | rename | なし | × |
検証プログラムの実行ログを以下に掲載いたします。
興味がある方は、ダウンロードし確認してください。
以上の検証結果より、NFS経由でのHDFSがサポートしていないシステムコールは以下だと考えます。
★NFS経由でのHDFSがサポートしていないシステムコール★
・rename
・openのO_TMPFILE
・openのO_TRUNC
以上が、「NFS経由でのHDFSが対応するファイル操作系のシステムコール」となります。
【まとめ】NFS経由でのHDFSが対応するファイル操作系のシステムコール
今回の記事を通して、「NFS経由でのHDFSが対応するファイル操作系のシステムコール」をご紹介することで、以下の悩みを解消しました。
★悩み★
NFS経由でHDFSにアクセスしたいんだけど、ファイル操作系のシステムコールはどのぐらいサポートしているんだろうかぁ。
「NFS経由でのHDFSが対応するファイル操作系のシステムコールは?」と悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。
コメント