はじめに
近年、データ分析基盤としてレイクハウスアーキテクチャが注目されています。
特にDatabricksは、
- Delta Lake
- Spark
- Notebook
- SQL Warehouse
などを統合した強力なプラットフォームとして広く利用されています。
一方で、
- 利用コストが高い
- オンプレミス環境では導入しにくい
- 学習用途には規模が大きすぎる
といった課題もあります。
そこで今回は、OSSのみを利用してDatabricks風のレイクハウス基盤を構築してみました。
レイクハウスとは
従来のデータ基盤は大きく2種類ありました。
データレイク
- HDFS
- S3
などに生データを蓄積する仕組みです。
メリット
- 安価
- 大量データ保存可能
デメリット
- 更新や削除が苦手
- テーブル管理が難しい
データウェアハウス
- Redshift
- BigQuery
- Snowflake
などです。
メリット
- SQL分析が容易
- 高速
デメリット
- 保存コストが高い
- ベンダーロックイン
レイクハウス
レイクとDWHの利点を組み合わせた仕組みです。
代表例
- Databricks + Delta Lake
- Apache Iceberg
- Apache Hudi
なぜOSSで構築するのか
Databricksは非常に優れたプラットフォームですが、
- ライセンス費用
- クラウド利用料
- オンプレミス利用の制約
などを考えると、個人学習や社内検証用途では導入ハードルが高いケースがあります。
そこで今回はOSSのみを利用し、
- fluentd
- Kafka
- HDFS
- Hive
- Spark
- Flink
- Iceberg
- Trino
- Grafana
- Zeppelin
を組み合わせてレイクハウス基盤を構築しました。
今回の構成
構成全体
各OSSの役割
fluentd
ログ収集基盤です。
SyslogやAuthlogを受信し、データ整形し後続システムへ配信します。
fluentdを利用することで、
- データの整形
- 後続へのデータ送付先整理
が可能になります。
Apache Kafka
ログ配信基盤です。
整形済データを受信し、後続システムへ配信します。
Kafkaを利用することで、
- バッファリング
- スケールアウト
- 再処理
が可能になります。
HDFS
データレイクです。
Kafkaから受信したログを生データのまま保存します。
特徴
- 安価なスケールアウト
- 大容量保存
- Hadoopエコシステムとの高い親和性
Hive
メタデータ管理を担当します。
データはHDFS上に保存され、Hive Metastoreがテーブル定義を管理します。
Apache Iceberg
今回のレイクハウス構成の中心です。
従来のHiveテーブルでは難しかった
- ACIDトランザクション
- UPDATE
- DELETE
- Snapshot管理
を実現できます。
Apache Spark
バッチ処理エンジンです。
主に
- HDFS → Iceberg
- データ変換
- 集計処理
を担当します。
Apache Flink
リアルタイム処理エンジンです。
Kafkaからデータを取得し、
- ストリーミング集計
- リアルタイム分析
を実現します。
Trino
高速分散SQLエンジンです。
Iceberg上のデータに対して高速な分析SQLを実行できます。
Grafana
可視化基盤です。
Trino経由でIcebergを参照し、
- 時系列分析
- 集計結果表示
- ダッシュボード化
を行います。
Zeppelin
分析用Notebookです。
Databricks Notebookの代替として利用しています。
- Spark SQL
- Scala
- Python
などを利用できます。
Databricksとの比較
| 項目 | Databricks | OSS構成 |
|---|---|---|
| ストレージ | Delta Lake | Iceberg |
| メタデータ | Unity Catalog | Hive Metastore |
| ETL | Spark | Spark / Flink |
| SQL分析 | Databricks SQL | Trino |
| Notebook | Databricks Notebook | Zeppelin |
| ダッシュボード | Databricks Dashboard | Grafana |
| ライセンス | 商用 | OSS |
| オンプレミス | 制限あり | 可能 |
なぜIcebergを選んだのか
レイクハウスを実現するテーブルフォーマットには、
- Iceberg
- Delta Lake
- Hudi
があります。
今回はIcebergを採用しました。
エンジン非依存
Icebergは
- Spark
- Flink
- Trino
- Hive
から共通利用できます。
Time Travel
過去のスナップショットを参照できます。
SELECT *
FROM logs.syslog_iceberg
FOR VERSION AS OF 123456789;
Schema Evolution
スキーマ変更が容易です。
ALTER TABLE logs.syslog_iceberg
ADD COLUMN severity INT;
Partition Evolution
長期運用後でもパーティション設計を変更できます。
実際にできること
Syslog分析
SELECT
host,
COUNT(*)
FROM logs.syslog_events
GROUP BY host;
Authlog分析
SELECT
host,
COUNT(*)
FROM logs.authlog_events
WHERE message LIKE '%Failed%'
GROUP BY host;
リアルタイム分析
SELECT
window_start,
host,
cnt
FROM logs.syslog_host_1m;
Flinkで集計した結果を即座に参照できます。
ダッシュボード化
Grafanaで
- ログ件数推移
- ホスト別アクセス数
- 認証失敗件数
- 異常検知
などを可視化できます。
この構成のメリット
OSSのみ
ライセンス費用不要です。
オンプレミス対応
インターネット接続不要環境でも利用できます。
拡張性
将来的に
- fluentd増設
- Kafka増設
- Spark増設
- Flink増設
が容易です。
ベンダーロックイン回避
クラウドサービスへ依存しません。
検証環境
以下の構成で建てました。
| コンポーネント | 台数 |
|---|---|
| fluentd | 1 |
| Kafka(KRaft/Brocker/Connect) | 8 |
| HDFS(master/slave) | 5 |
| Hive(Hive/Metastore) | 4 |
| postgresql(Hive用) | 2 |
| Spark | 3 |
| Flink | 1 |
| Trino | 1 |
| Grafana | 1 |
| Zeppelin | 1 |
| ope(運用ホスト) | 1 |
| trino | 1 |
課題
Databricksと比較すると、
- 構築作業が必要
- 運用設計が必要
- 統合管理機能が弱い
- ワンクリック導入できない
といった課題があります。
一方でOSS構成を理解することで、レイクハウスの内部構造を深く学べます。
今後の展望
今後はさらに以下を追加予定です。
- Kerberos認証
- TLS暗号化
まとめ
今回は
- Kafka
- HDFS
- Hive
- Spark
- Flink
- Iceberg
- Trino
- Grafana
- Zeppelin
を組み合わせて、OSSのみでDatabricks風レイクハウスを構築してみました。
Databricksのような統合サービスと比較すると構築や運用の手間は増えますが、
- OSSのみで構築可能
- オンプレミス対応
- ベンダーロックインなし
- 学習用途に最適
という大きなメリットがあります。
レイクハウスを学びたい方や、オンプレミスでデータ分析基盤を構築したい方の参考になれば幸いです。
以下の記事にて具体的なシステム構成について提示します。