Alluxioという、分散インメモリストレージが面白そうだなぁと思いまして。
Alluxio - Open Source Memory Speed Virtual Distributed Storage
Alluxio?
Alluxio(旧名Tachyon)というのは、分散インメモリストレージです。Javaで実装されているみたいです。
Overview - Docs | Alluxio Open Source
最新ストレージ技術Alluxioは革新技術になれるか? | NTTデータ
Apache Hadoopと互換性があり、Apache SparkやMapReduceプログラムをの高速化に使えるみたいです。S3とも互換性が一部あります。
S3 Client - Docs | Alluxio Open Source
また、データの永続化の層としても、複数の種類のストレージが使えたり、束ねて見せることができるようです。
Unified and Transparent Namespace - Docs | Alluxio Open Source
下層のストレージは、ドキュメントの「Under Stores」の部分を見るとよいでしょう。
S3、HDFS、GlusterFSなどいろいろ並んでいます。
Alluxio自体を直接ファイルシステムとしてマウントすることは、できなさそうな感じがしますが。
実行に関する要件は、
のようです。Windowsは対象外ですと。
どうしてAlluxioを知った?
個人的にですが、Alluxioを知る機会は2回あって、ひとつはApache Ignite。
InfoQの以下の記事を見て、なんとなく知ってはいたのですが、
Nikita Ivanov氏に聞く - Apache Igniteインメモリ・コンピューティング・プラットフォーム
Ivanov: Apache IgniteがApache Sparkを補完する点はいくつかあります。Apache Sparkは主に分析、特にマシンラーニングを対象とする、非トランザクション型の読み取り専用システムです。一方でApache Igniteが使用されるのは、主に高性能なトランザクションベースのシステムとしてです。2つを合わせて使用することで、Apache IgniteがSpark RDDのインメモリ・ストレージ層として機能し、Sparkジョブ間での状態共有が可能になります。さらにIgniteは、メモリ内に格納されたSparkデータのインデックスを作成します。Spark上でSQLクエリを実行するとデータのフルスキャンが実行されますが、Igniteのインデックスによってそのパフォーマンスが大幅に向上します。
Alluxioに関しては、これまで競合の対象として見ていませんでしたので、比較するのは非常に難しいですね。
https://www.infoq.com/jp/news/2017/05/nikita-ivanov-apache-ignite
競合じゃないんだ〜と思いつつApache Igniteの機能、「In-Memory File System」のところを見ると、「Tachyon Replacement」って書いてあって
(Alluxioの旧名がTachyon)バッチリ意識してるじゃないですか…とか思いました。
In-Memory File System - Apache Ignite
Tachyon Replacement
https://ignite.apache.org/features/igfs.html
IGFS can transparently replace Tachyon file system in Spark deployments. Given that IGFS is based on battle-tested Ignite data grid technology, it exhibits much better write and read performance than Tachyon, and is more stable.
まあ、Apache Spark向けの話になっていますし、それでも直接の競合にはならないのでしょうけど…?
あとは、OracleのBDFS(Oracle Big Data FileSystem)。
ドキュメントを読む限りは、BDFSは現時点ではAlluxioベースらしいです。
でまあ、単にインメモリなファイルシステムだったらそのまま流していたのですが、S3互換というところもあってちょっと興味が出て試してみようかと。
インストールしてローカルで起動する。
Quick Start Guideに沿って行います。
Quick Start Guide - Docs | Alluxio Open Source
今回は特にクラスタは構成せず、ローカルのみで動作させます。ちょっと注意点としては、以下のドキュメントに記載の通り、デフォルトでramdiskを使おうとします。
sudoやmountなどのコマンドを実行しようとするので、注意が必要です。
Running Alluxio Locally - Docs | Alluxio Open Source
アーカイブはダウンロードページから取得するか、
Download | Alluxio Open Source
以下のページから。
http://downloads.alluxio.org/downloads/files/1.7.0/
ダウンロードの際に、Apache Hadoopとの互換性を求める場合には、どのApache Hadoopのバージョンを対象にするか選ぶ必要があります。
※それぞれ、ダウンロードするバイナリが異なります
今回は、Apache Hadoopとの互換性は求めないので、シンプルなものをダウンロードします。
使用するAlluxioのバージョンは、1.7.0です。またJavaは8を使用しています。
$ wget http://downloads.alluxio.org/downloads/files/1.7.0/alluxio-1.7.0-bin.tar.gz $ tar -xf alluxio-1.7.0-bin.tar.gz $ cd alluxio-1.7.0
Apache Hadoopとの互換性を求める場合は、対象のバージョンを指定してビルドされたアーカイブをダウンロードします。
例えば、「alluxio-1.7.0-hadoop-2.8-bin.tar.gz」など。
confディレクトリにある、「alluxio-site.properties.template」ファイルを「alluxio-site.properties」にコピーします。
$ cp conf/alluxio-site.properties.template conf/alluxio-site.properties
このファイルに、ドキュメントどおり追記してもよいですし、同様の内容はコメントアウトされているのでこちらを解除してもOKです。
要するに、以下の内容が「alluxio-site.properties」に記載されていればOKです。
alluxio.master.hostname=localhost
Alluxioを起動する前に、環境のチェックをしておきます。
$ bin/alluxio validateEnv local
ちなみに、この時点でsudoコマンドによるパスワードの入力を求められます。
あとはHDFSを使わないのでスキップされたり、ulimitの値に問題があると警告されたりします。
初回のみは、Alluxioのフォーマットが必要です。これを実行すると、Alluxioのジャーナル、Workerストレージがフォーマットされ、結果として
Alluxioファイルシステムのすべてのデータ、メタデータが消去されるそうです。
※下層にあるストレージの分は消えないようですが…
$ bin/alluxio format
これで、MasterとWorkerが起動する準備ができました、と。
突然Master、Workerという言葉が出てきましたね。
ドキュメントを読むと、Masterは主にメタデータの管理を行い、Workerは割り当てられたデータを管理する役割になるようです。HDFSみたいですね。
Architecture Overview - Docs | Alluxio Open Source
今回は、MasterとWorkerを同じホストで起動することになります。起動してみましょう。
$ bin/alluxio-start.sh local
これだけプロセスが起動します。
$ jcmd -l 83313 alluxio.master.AlluxioMaster 83315 alluxio.master.AlluxioSecondaryMaster 83683 sun.tools.jcmd.JCmd -l 83580 alluxio.worker.AlluxioWorker 83582 alluxio.proxy.AlluxioProxy
CLIでの操作は、「bin/alluxio fs」で行います。
## ディレクトリ作成 $ bin/alluxio fs mkdir /test-directory Successfully created directory /test-directory ## ls $ bin/alluxio fs ls / drwxr-xr-x alluxio alluxio 0 NOT_PERSISTED 02-20-2018 14:19:52:445 DIR /test-directory ## ローカルファイルシステムからのコピー $ bin/alluxio fs copyFromLocal LICENSE /test-directory/LICENSE Copied file:///opt/alluxio/LICENSE to /test-directory/LICENSE ## cat $ bin/alluxio fs cat /test-directory/LICENSE (ファイルの中身を表示)
いよいよHDFSっぽいですね。
ちなみに、この時のファイルはramdiskに置かれていたりします。
$ find /mnt/ramdisk/ -type f /mnt/ramdisk/alluxioworker/16777216
catとかすると、ふつうに中身が見えました…。
停止。
$ bin/alluxio-stop.sh local
とりあえず、こんなところで。
オマケ(Docker)
Dockerで実行する場合は、ramdiskのマウントでちょっと困ったりするので、こちらのドキュメントに従いましょう。
Running Alluxio on Docker - Docs | Alluxio Open Source
もしくは、「--privileged」をあたえるなりしてtmpfsをマウントできるようにする必要があります。