これからApache Icebergを学びたい人向けの実践的なハンズオンです。コンテナが動く端末が1台あれば始められます。
docker-compose up --build
以下のようなJupyterベースのコンテンツを通じてIcebergの機能と仕組みが学べます。
コンテンツの詳細はspark/notebooks
配下のNotebookを参照してください。
これからApache Icebergを学びたい人
このハンズオンは、Apache Icebergの基本的な概念と使い方を初めて学ぶ方を対象としています。
ハンズオンを実施するために特別な前提知識は必要ありませんが、以下のような経験やスキルがあるとより理解が深まります。
上記の知識や経験がない場合でも、このハンズオンを通してApache Icebergの基本を学ぶことができます。
ハンズオンの中で、必要な概念や用語については補足説明を加えています。
ビッグデータ処理や分散システムの詳細な知識は必須ではありませんが、これらの技術への関心や基礎的な理解があると、Apache Icebergの特徴やメリットをより深く理解することができるでしょう。
以下のコンテンツが用意されています。Notebook間は依存せず、どのNotebookからでも始められるように作ってありますが、初めての人はChapter1から進めることをオススメします。
コンテンツの詳細はspark/notebooks
配下のNotebookを参照してください。
Icebergの実験に必要なコンポーネントがdocker-compose.ymlに纏まっており、簡単に実験環境を構築できます。
【注意】この環境はあくまでも実験用です。本番向けには非機能面を考慮した適切な設計の検討が必要です
docker-composeには主に以下のコンポーネントが含まれています。
全体としては以下の構成になります。
macとwindowsのwsl(Ubuntu 20.04)で動作を確認しています。
docker-compose up --build
※docker-compose.yml
内にAWSのクレデンシャルを指定するように見える箇所がありますが、これはminioのために必要な設定で、編集は不要です(本ハンズオンではS3を使用しません)
ブラウザからlocalhost:8888
にアクセスしてください。無事に環境が構築できていれば、JupyterのUIが表示されるはずです。
ハンズオンの手順はNotebookとして配置されており、ハンズオンではこれらを利用していきます。
続いてlocalhost:9001
にアクセスするとMinIOのログイン画面が表示されます。
UsernameとPasswordはdocker-compose.yml
に記載の通り、Username=admin, Password=passwordです。(適宜変更してください)
ログインすると以下の画面が表示されます。(warehouseというバケットが最初から用意されています)
Apache Icebergは、2017年にNetflixが開発した、大規模なデータセットに最適化されたOpen Table Formatの一種です。
オブジェクトストレージやHDFS上のデータをTrinoやSparkなどのエンジン/ツールで操作する基盤を運用する中で突き当たる機能的、性能的な限界を突破するために生まれました。
大量のデータを扱う際の複雑さとパフォーマンスの問題を解決する様々な特徴を備えています。
Open Table Format登場の背景やユースケースについては以下を参照してください。
データレイクの新しいカタチ:Open Table Formatの紹介
もちろん、Icebergが活躍するのはNetflixのような莫大なデータを抱えているデータ基盤ばかりではありません。
HDFSやAmazon S3のようなオブジェクトストレージにデータを貯めて、TrinoやAmazon Athenaからクエリするような基盤を構築して、最初は便利だったものの、用途が複雑化、大規模化するに従って様々な運用上の課題に突き当たった経験はありませんか?
ストリーミングやCDCのユースケースで、KafkaやFlinkのデータを蓄積して、操作する基盤の構築に悩んだ経験はありませんか?
そのような場面で、Apache Icebergは役に立つ可能性があります。
Icebergの詳細を知りたい方は以下をご参照ください。
Iceberg 公式 Doc
Apache Iceberg とは何か
本ハンズオンは、TabularのSpark + Iceberg Quickstart Imageを活用しています。 https://github.com/tabular-io/docker-spark-iceberg/tree/main