S3互換のオブジェクトストレージ Apache Ozoneに関する情報（随時更新）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1343/1579d749-ecf9-c6ba-ae71-b086d49f2407.png)

巷に情報があまりないので関連情報をまとめてます。

## Apache Ozoneって？

[Apache Ozone](https://ci-hadoop.apache.org/view/Hadoop%20Ozone/job/ozone-doc-master/lastSuccessfulBuild/artifact/hadoop-hdds/docs/public/index.html)とは、スケーラブルで冗長性のある分散オブジェクトストアです[^minio]。

[^minio]: 同様の製品としては、 [MinIO](https://min.io/) が有名です。

また、様々なサイズのオブジェクトを数十億個まで拡張できるほか、KubernetesのCSIにも対応しようとしています。
Ozoneには、Javaクライアントライブラリ、S3プロトコルのサポート、Ozoneの使用を容易にするコマンドラインインターフェイスが付属しています。

Apache Iceberg、Delta Lake、Apache Hudiといった、Data Lakehouse[^lakehouse] を構築する際のストレージ層として、利用されるケースもあります[^cdp]

[^lakehouse]: https://qiita.com/taka_yayoi/items/1ebbce9b76fb923d5e21

[^cdp]: [Cloudera Data Platform の Apache Iceberg で、マルチクラウドのオープンレイクハウスを実装する - Cloudera株式会社 公式ブログ](https://blog.cloudera.jp/jp-implement-a-multi-cloud-open-lakehouse-with-apache-iceberg-in-cloudera-data-platform/)の「CDP パブリッククラウドによるマルチクラウド展開」の項にある図参照


## 書籍

知ってる人いたら教えてください。

## アーキテクチャ

* [各機能のデザインドキュメント](https://ci-hadoop.apache.org/view/Hadoop%20Ozone/job/ozone-doc-master/lastSuccessfulBuild/artifact/hadoop-hdds/docs/public/design.html)

* [Apache Hadoop Ozone — オブジェクトストアのアーキテクチャー - Cloudera株式会社 公式ブログ](https://blog.cloudera.jp/apache-hadoop-ozone-object-store-architecture/)
* [Architecture Overview - Documentation for Apache Ozone](https://ci-hadoop.apache.org/view/Hadoop%20Ozone/job/ozone-doc-master/lastSuccessfulBuild/artifact/hadoop-hdds/docs/public/concept/overview.html)

* Erasure Coding(EC)
  * [Erasure Coding overview | CDP Private Cloud](https://docs.cloudera.com/cdp-private-cloud-base/7.1.8/ozone-storing-data/topics/ozone-erasure-coding-overview.html)
  * [\[HDDS-3816\] Erasure Coding in Ozone](https://ci-hadoop.apache.org/view/Hadoop%20Ozone/job/ozone-doc-master/lastSuccessfulBuild/artifact/hadoop-hdds/docs/public/design/ec.html)

## サイジングに関する情報

データサイズに応じた各ホストのスペックやネットワークスイッチに関する情報

* [Ozone - RELEASE GUIDE](https://docs.cloudera.com/cdp-private-cloud-upgrade/latest/release-guide/topics/cdpdc-ozone.html)

* [Reference Architectures - OZONE - Apache Software Foundation](https://cwiki.apache.org/confluence/display/OZONE/Reference+Architectures)
    * [Cloudera](https://docs.cloudera.com/cdp-private-cloud-upgrade/latest/release-guide/topics/cdpdc-ozone.html)
    * [Hitachi](https://knowledge.hitachivantara.com/Documents/Application_Optimized_Solutions/Analytics_Infrastructure_Solutions/Hitachi_Analytics_Infrastructure_for_Apache_Ozone_Reference_Architecture_Guide)
    * [Cisco](https://www.cisco.com/c/en/us/td/docs/unified_computing/ucs/UCS_CVDs/cdip_ucs_cloudera_ozone.html)
    * [HPE](https://www.hpe.com/psnow/doc/a50004899enw)

## CLI関連

* [Client Interfaces Command Line Interface - Documentation for Apache Ozone](https://ci-hadoop.apache.org/view/Hadoop%20Ozone/job/ozone-doc-master/lastSuccessfulBuild/artifact/hadoop-hdds/docs/public/interface/cli.html)
* [ボリュームを管理するためのコマンド](https://docs.cloudera.com/cdp-private-cloud-base/7.1.8/ozone-storing-data/topics/ozone-commands-for-managing-volumes.html)
* [バケットを管理するためのコマンド](https://docs.cloudera.com/cdp-private-cloud-base/7.1.8/ozone-storing-data/topics/ozone-commands-for-managing-buckets.html)
* [キーを管理するためのコマンド](https://docs.cloudera.com/cdp-private-cloud-base/7.1.8/ozone-storing-data/topics/ozone-commands-for-managing-keys.html) 

## 省略表記

ドキュメントなどで補足無く記載している場合があるので...。
一部、Ozoneのコンポーネントだけでなく、関連する用語も含みます。

省略表記 | 正式名
-----|----
OM | Ozone Manager
SCM | Storage Container Manager
DN | DataNode
EC | Erasure Coding

## 運用関連の情報

### Container Balancer

DataNode間の偏りを調整する機能（Ozone v1.3.0にてGA）

Container Balancerは、各DNの使用率を平均した値より、設定値 Balancing Threshold 以上離れているDNが存在したらContainer Balancerが動く。

* [Container Balancer overview | CDP Private Cloud](https://docs.cloudera.com/cdp-private-cloud-base/7.1.8/ozone-storing-data/topics/ozone-container-balancer-overview.html)
* [Configuring container balancer service | CDP Private Cloud](https://docs.cloudera.com/cdp-private-cloud-base/7.1.8/ozone-storing-data/topics/ozone-container-balancer-service.html)

:::note info
[EC利用時でも利用可能]((https://issues.apache.org/jira/browse/HDDS-8170))（V1.4.0にてGA）
:::

### Disk Balancer

単一DataNodeのDiskの偏りを調整する機能。


:::note warn
**Ozone v1.4.1現在では未実装**
一般的な本番利用ではDataNodeは複数Diskを利用するので、Disk間の偏りは調整出来ないと本番運用上は非常に困る。
:::

デザインドキュメント： [DiskBalancer Design Doc - Google ドキュメント](https://docs.google.com/document/d/1ZGRWZJxAmWt9FoNfwVKLj8kTJAtZfodVwiFtK18YLNE/edit?tab=t.0#heading=h.a4gt8veeruaf)

開発状況は以下で追跡できる。  
[\[HDDS-5713\] Add a disk balancer for datanode - ASF JIRA](https://issues.apache.org/jira/browse/HDDS-5713)

サブタスクは以下のみでステータスはOPENのままだが、関連するPRはクローズしてるので次のバージョンでGAするかも？
[\[HDDS-7233\] \[DiskBalancer\] DiskBalancer on Datanode - ASF JIRA](https://issues.apache.org/jira/browse/HDDS-7233)
* [HDDS-8844. Internal move logic for DiskBalancer by symious · Pull Request #4887 · apache/ozone](https://github.com/apache/ozone/pull/4887)
* [HDDS-7383. Basic framework of DiskBalancerService by symious · Pull Request #3874 · apache/ozone](https://github.com/apache/ozone/pull/3874)

この辺りの話は以下のPNFさんのブログに記載ありますが、現状、運用大変そうです。。

https://tech.preferred.jp/ja/blog/apache-ozone-two-years/

### 可用性に関する対応について

Ozoneには、２つのメタデータ管理コンポーネント（OM：キースペース管理、SCM：ブロックスペース管理）があり、いずれもの可用性の対応している（内部の状態はRAFTで整合している。Apache Ratisを利用）。

* [OM High Availability](https://ci-hadoop.apache.org/view/Hadoop%20Ozone/job/ozone-doc-master/lastSuccessfulBuild/artifact/hadoop-hdds/docs/public/feature/om-ha.html)
* [SCM High Availability](https://ci-hadoop.apache.org/view/Hadoop%20Ozone/job/ozone-doc-master/lastSuccessfulBuild/artifact/hadoop-hdds/docs/public/feature/scm-ha.html)

#### 可用性を実現する内部の仕組みについて

データを書き込みする際には以下のMulti-Raftを使って実現している。  
ReconのPipelineのUIがその状況を示している

https://blog.cloudera.jp/jp-multi-raft-boost-up-write-performance-for-apache-hadoop-ozone/

Multi-Raftのデザインドキュメント

https://ci-hadoop.apache.org/view/Hadoop%20Ozone/job/ozone-doc-master/lastSuccessfulBuild/artifact/hadoop-hdds/docs/public/design/multiraft.html

ReconのPipelineページの説明記事
* [Pipelines page | CDP Private Cloud](https://docs.cloudera.com/cdp-private-cloud-base/7.1.8/ozone-storing-data/topics/ozone-recon-pipelines-page.html)

### 監視関連

Ozoneは、`ozone-site.xml`の`hdds.prometheus.endpoint.enabled`を`true`にすることで、各コンポーネントでPromethusフォーマットでメトリクスを出力出来る。

各コンポーネントのHTTP Web UI Portに対して、`/prom` でアクセスすると取得出来る。

デフォルトの場合は以下の通り

SCM： http://scm-fqdn:9876/prom （ozone.scm.http-portで指定したポート）
OM： http://om-fqdn:9874/prom  （ozone.om.http-portで指定したポート）
DN： http://dn-fqdn:9882/prom （ozone.datanode.http-portで指定したポート）
Recon： http://recon-fqdn:9888/prom （ozone.recon.http-portで指定したポート）

[Monitoring with Prometheus](https://ci-hadoop.apache.org/view/Hadoop%20Ozone/job/ozone-doc-master/lastSuccessfulBuild/artifact/hadoop-hdds/docs/public/recipe/prometheus.html)

### その他

* DataNode内のDisk間の偏りを調整するToolはまだ無いがIssueはある
    * [\[HDDS-5713\] Add a disk balancer for datanode - ASF JIRA](https://issues.apache.org/jira/browse/HDDS-5713)
* DataNodeのDiskフル対策（予約領域の設定は、Ozone v1.3.0でリリース済み）
    * [\[HDDS-6577\] Configurations to reserve HDDS volume space are not followed - ASF JIRA](https://issues.apache.org/jira/browse/HDDS-6577)
    * [\[HDDS-6901\] Configure HDDS volume reserved as percentage of the volume space - ASF JIRA](https://issues.apache.org/jira/browse/HDDS-6901)
* Bucketを作成する際に指定するレイアウト（FSO、OBS、LEGACY）の説明
    * [Bucket Layout | CDP Private Cloud](https://docs.cloudera.com/cdp-private-cloud-base/7.1.8/ozone-storing-data/topics/ozone-fso-obs-bucket-layout.html)

## 関連記事やブログ

* パフォーマンス改善やベンチマーク
    * [Ozone performance improvements. Author: Ritesh Shukla, Duong Nguyen… | by Ritesh H Shukla | Engineering@Cloudera | Jun, 2023 | Medium](https://medium.com/engineering-cloudera/ozone-performance-improvements-c0bb8a76dc94)
        * （Ozone v1.4.0の一部を含む）CDP v7.1.9の話。毎秒約105kのリードオペレーションをサポート。CDP v7.1.8と比較して、Ozone ManagerのIOPSが約7倍増加。

* Clouderaブログ
  * [Ozoneに10億ファイル - Cloudera株式会社 公式ブログ](https://blog.cloudera.jp/jp-one-billion-files-in-ozone/)
  * [Apache Hadoop Ozone セキュリティ — 認証 - Cloudera株式会社 公式ブログ](https://blog.cloudera.jp/apache-hadoop-ozone-security-authentication/)
  * [Ozoneのベンチマーク: ClouderaのCDP向け次世代ストレージ - Cloudera株式会社 公式ブログ](https://blog.cloudera.jp/jp-benchmarking-ozone-clouderas-next-generation-storage-for-cdp/)
  * [Apache Hadoop Ozone: オブジェクトストアの概要 - Cloudera株式会社 公式ブログ](https://blog.cloudera.jp/jp-apache-hadoop-ozone-object-store-overview/)
  * [Apache Hadoop Ozone — オブジェクトストアのアーキテクチャー - Cloudera株式会社 公式ブログ](https://blog.cloudera.jp/apache-hadoop-ozone-object-store-architecture/)
  * [Apache Hadoop Ozone: Apache Hadoop 用のオブジェクトストアの紹介 - Cloudera株式会社 公式ブログ](https://blog.cloudera.jp/jp-introducing-apache-hadoop-ozone-object-store-apache-hadoop/)
  * [Multi-Raft: Apache Hadoop Ozoneの書き込みパフォーマンスを加速する - Cloudera株式会社 公式ブログ](https://blog.cloudera.jp/jp-multi-raft-boost-up-write-performance-for-apache-hadoop-ozone/)
  * [Apache Ozone - A Multi-Protocol Aware Storage System - Cloudera Blog](https://blog.cloudera.com/apache-ozone-a-multi-protocol-aware-storage-system/)
      * File System Optimized (FSO) と Object Store (OBS) の紹介・比較やどういったワークロードで使い分けると良いかの紹介

* 国内での情報
  * [Apache Ozoneをやっていた一年 - Preferred Networks Research &amp; Development](https://tech.preferred.jp/ja/blog/apache-ozone-year/)
  * [続・Apache Ozone をやっていた一年 - Preferred Networks Research &amp; Development](https://tech.preferred.jp/ja/blog/apache-ozone-two-years/)
  * [Apache Hadoop OzoneがCSIに対応（＝Kubernetesでも使える）してたのでお試してみる - やっさんメモ](https://yassan.hatenablog.jp/entry/advent-calendar-apache-ozone-20191220)

## スライド

* [Losing Data in a Safe Way – Advanced Replication Strategies in Apache Hadoop Ozone](https://dataworkssummit.com/barcelona-2019/session/losing-data-the-in-a-safe-way-advanced-replication-strategies-in-apache-hadoop-ozone/) （Ozone自体の登場背景とかベースとなる仕組みに関して）
* 利用事例
    * [PFN の研究活動を支えるストレージシステム（第 56 回 情報科学若手の会） - Speaker Deck](https://speakerdeck.com/pfn/pfn-storage-system-wakate-56) 

## 動画アーカイブ

* [Future of Data Meetup: Apache Ozone User Group Summit - YouTube](https://www.youtube.com/live/3aEpeSXMMzw?feature=share)
* [Apache Ozone: Multi-Protocol Aware System Handles Both Files And Objects Efficiently - YouTube](https://youtu.be/HN7PWX9TdAE)
* [Future of Data Meetup: Apache Ozone - Breaking the 10 billion object barrier - YouTube](https://www.youtube.com/live/Yg043Q9nJKg?feature=share)
* [Apache Ozone: A High Performance Object Store For Analytics Workloads - YouTube](https://youtu.be/dXrDhe8h7gQ)

* [Apache Ozone - unofficial - YouTube](https://www.youtube.com/@ApacheOzoneunofficial)
  * [Ozone Design: Erasure Coding, high-level overview - YouTube](https://www.youtube.com/watch?v=x0NjmSv-ToQ)

## 関連イベント

* [Storage User Group Meetup, 2023年10月25日(水) 16:00 | Meetup](https://www.meetup.com/ja-JP/futureofdata-sanfrancisco/events/295917033/)
    * [Bay Area, Storage Meetup Oct 25th, 2023 - YouTube](https://www.youtube.com/watch?v=DgzEZFlkvco&t=9857s)

## ハンズオン環境構築するには

https://ozone.apache.org/downloads/ ページにあるBinaryにDocker ComposeやKubernetesのマニフェストが用意されている。READMEもあるので見るとわかる。

* Docker Composeの場合は、composeディレクトリ以下を参照。
    * compose/ozoneにあるdocker-compose.yamlが単純な構成なので手始めには分かりやすい。
        * HA構成のものもあるので色々見てみると参考になります。
    * https://github.com/apache/ozone-docker/ に代表的な構成があるのでこっちも分かりやすい
    * ozone-site.xmlに設定追加したい場合は、compose以下の各フォルダにdocker-configってファイルがあるのでそこに決まったフォーマットで入れるとOzone起動時にozone-site.xmlが生成されて利用される
* Kubernetesの場合は、Kubernetesディレクトリ以下を参照。