Hadoop用の新しい分散ファイル・システムだったApache Ozoneは、Hadoopと独立して運用ができ、かつAWS S3互換オブジェクトストレージとしても使えます。また、ペタバイト単位のクラスターを構成している人もいて頑強のようです。Dockerを使うと、docker imageのサイズがかなり大きいですが、すぐ試せます。オブジェクトストレージを使ったクラウド用のアプリケーションの開発環境にも良さそうです。
Ozone On Premise InstallationとSingle Node Deployment - OZONE - Apache Software Foundationを参考に、バイナリー版を落としてきてSingle Cluster構成で動かしてみましょう。
JVMのインストール
Javaのアプリケーションなので実行にJVMが必要です。罠があって、(少なくともUbuntu Linux 24.04では)Ozone 1.4.1(と1.4.0)はJava 21ではAWS S3互換オブジェクトストレージ用のDaemonが例外を出して動きません。Java 17を使います。
sudo apt install openjdk-17-jdk
環境変数JAVA_HOMEを設定し、環境変数PATHを他のJVMがあってもJVM 17が優先されるように修正します。
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH export OZONE_OPTS=-XX:ParallelGCThreads=2 # Ozone稼動時の警告避け # ヒープサイズを512MBに制限する場合 # export OZONE_HEAPSIZE_MAX=512M # ログの起動ユーザー名を変更する場合 # export OZONE_IDENT_STRING="learning"
Ozoneのダウンロード
/var/tmp/ozone-1.4.1 にOzoneのファイルを展開します。
cd /var/tmp wget https://www.apache.org/dyn/closer.cgi/ozone/1.4.1/ozone-1.4.1.tar.gz tar zxf ozone-1.4.1.tar.gz
Ozoneの設定
まず、Ozoneで使うデータの格納場所として、/var/tmp/objstrg/をつくります。
mkdir /var/tmp/objstrg
チュートリアルではozone genconfでozone-site.xmlの雛形をつくれとありますが、直接編集したほうが手っ取り早いです。
viなどで/var/tmp/ozone-1.4.1/etc/hadoop/ozone-site.xmlを以下のように書き換えます。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration> <properties> <property><name>ozone.scm.datanode.id.dir</name><value>/var/tmp/objstrg/data</value></property> <property><name>ozone.replication</name><value>1</value></property> <property><name>ozone.metadata.dirs</name><value>/var/tmp/objstrg/data/metadata</value></property> <property><name>ozone.scm.names</name><value>localhost</value></property> <property><name>ozone.scm.block.client.address</name><value>localhost</value></property> <property><name>ozone.scm.client.address</name><value>localhost</value></property> <property><name>ozone.scm.db.dirs</name><value>/var/tmp/objstrg/scm/db</value></property> <property><name>ozone.scm.ha.ratis.storage.dir</name><value>/var/tmp/objstrg/scm/ratis</value></property> <property><name>ozone.om.address</name><value>localhost</value></property> <property><name>ozone.om.db.dirs</name><value>/var/tmp/objstrg/om/db</value></property> <property><name>ozone.om.ratis.storage.dir</name><value>/var/tmp/objstrg/om/ratis</value></property> <property><name>dfs.container.ratis.datanode.storage.dir</name><value>/var/tmp/objstrg/datanode/ratis</value></property> <property><name>hdds.datanode.dir</name><value>/var/tmp/objstrg/datanode/data</value></property> <property><name>dfs.container.ratis.datanode.storage.dir</name><value>/var/tmp/objstrg/datanode/ratis</value></property> <property><name>ozone.http.basedir</name><value>/var/tmp/objstrg/jetty</value></property> <property><name>ozone.s3g.http-address</name><value>localhost</value></property> <property><name>ozone.s3g.http-bind-host</name><value>localhost</value></property> </properties> </configuration>
ozone-site.xmlに抜けがあると、エラーメッセージ無く起動しないことがあります。なお、例外は/var/tmp/ozone-1.4.1/logs以下のログに記録されます。
初期化と起動
scm(Storage Container Manager),om(Ozone Manager),datanode,s3g(S3 Gateway)の4プロセスを順番に起動します。
初回だけscmとomの初期化が必要で、かつ順番が大事なので、最初はひとつひとつ実行しましょう。
ozone scm --init # 初回のみ ozone --daemon start scm ozone om --init # 初回のみ ozone --daemon start om ozone --daemon start datanode ozone --daemon start s3g
上手く行くと、ps wでjavaのプロセスが4つ動いているのが分かります。
書き込んで見る
早速、使ってみましょう。
echo "Hello Apache Ozone World!" > hello.txt
とファイルを作成します。
AWS CLIをインストールした後、bucket1を作成して、
aws s3api --endpoint http://localhost:9878/ create-bucket --bucket=bucket1
Ozoneに保存を試みましょう。なお、認証まわりの設定をしておらず、credentialsは何でも通るので、Key IDには12345、Access Keyには54321でも入れておきましょう。
aws s3 --endpoint http://localhost:9878 cp --storage-class REDUCED_REDUNDANCY hello.txt s3://bucket1/hello.txt
Single Node Clusterなので--storage-class REDUCED_REDUNDANCYが要るそうです。
保存されたことも確認しましょう。
aws s3 --endpoint http://localhost:9878 ls s3://bucket1/hello.txt
なお、デフォルトではAWS S3互換gatewayから保存したオブジェクトは、/s3vと言うvolumeに保存されます。
終了
起動の逆の順番でプロセスを終了します。
ozone --daemon stop s3g ozone --daemon stop datanode ozone --daemon stop om ozone --daemon stop scm