YTsaurus は、MapReduce モデルをサポートする、ビッグ データ用の分散ストレージおよび処理プラットフォームです。
数日前、YandexはYTsauruプラットフォームのオープンソース化を発表しました。YTsauruは、大量のデータの分散ストレージと処理に使用され、MapReduceパラダイムを使用したデータ操作、SQLクエリエンジン、分散ファイルシステム、およびキーバリュー形式のNoSQLストレージをサポートしています。
YTsaurusは、 Yandexのインフラストラクチャにおいて、同社のスーパーコンピュータの計算能力を効率的に活用するために使用されています。このプラットフォームは、10万ノードを超えるクラスタまで拡張可能で、最大000万個のプロセッサと数千個のGPU(機械学習タスク用)をカバーできます。
物理サーバー上で実行される分離されたコンテナーは、クラスター ユニットとして使用できます。 ストレージには、ハード ドライブ、SSD、NVME、RAM などのさまざまなメディアにあるエクサバイト単位のデータが含まれる場合があります。
クラスターは、ノードの動的な追加と削除、冗長性 (単一障害点なし)、自動複製、アクティブなクラスター ソフトウェアのアップグレード、およびノード障害の場合の自動冗長性回復をサポートします。
サポートされているクラスターの種類は3つです。計算クラスター(MapReduce操作を使用したビッグデータの大規模並列処理用)、ピボットテーブルおよびキーバリューストレージ用のクラスター、そして地理的に分散されたクラスターです。
プラットフォームベースのサービスは、何万人ものユーザーのデータを保存および処理する手段を提供できます。 Yandex での典型的な YTsaurus アプリケーションには、広告ネットワーク ユーザーに関する情報の保存、機械学習モデルのトレーニング、検索インデックスの形成、Yandex Taxi などのサービス用のデータ ウェアハウスの構築が含まれます。
基本的な使用例のうち、言及されているのは次のとおりです。
- バッチ処理: MapReduce および SPYT (YTsaurus のデータのコンピューティング エンジンとしての Apache Spark) は、構造化データおよび半構造化データ (記録または金融取引) を処理します。
- アドホック分析: 別の分析システムにデータをコピーすることなく、CHYT (YTsaurus 計算ノード上の ClickHouse サーバーのグループ) を介した高速クエリ。 視覚化のために BI を接続する機能を備えた ODBC および JDBC。
- OLTP タスク: ユーザー プロファイル ストレージ、広告表示、ストリーム処理など、キー値ストレージを使用したリアルタイムのトランザクション作業。
- 機械学習: GPU クラスターを管理して、数十億のパラメーターでモデルをトレーニングします。
- メタ情報ストレージ: メタ情報のトランザクション ストレージと分散ロックの信頼できるサービス。
- 典型的なツール (Apache Spark、SQL、MapReduce) を使用した多層データ処理のためのデータ ウェアハウスと ETL の作成。
アーキテクチャの主要な要素の一部では、次のことが言及されています。
- 分散ファイル システムとサイプレスのフォールト トレラントなツリーベースのメタ情報ストレージ。
- MapReduce モデルと高度な基本操作をサポートする分散コンピューティング用のスケジューラ。
- IT 運用の水平方向のスケーラビリティ。
- コンピューティング リソースの分離と、特定のコンピューティング リソース (CPU、GPU、RAM) をさまざまな比率で割り当てる可能性。
- OLTP ストレージを作成するためのピボットテーブル、MVCC ベースのストレージのサポート、トランザクション、期限切れ後にデータを削除する機能、およびピボットテーブルを介したストリーミング データ処理のためのメッセージ キュー。
- プログラミング言語 C++、Python、Java、Go の API とライブラリ。
- ツリー状のストレージを介したナビゲーションをサポートする、ユーザーおよび管理者用の Web インターフェイス。
最後に、さらに詳しく知りたい場合は、このプロジェクトのコードはC/C++で記述されており、Apache 2.0ライセンスの下でオープンソースとして公開されていることを知っておくと良いでしょう。詳細は以下のリンクをご覧ください。
GitHubリポジトリには、YTsaurusのサーバーコード、k8sを使用したデプロイメントインフラストラクチャ、システムのWebインターフェース、およびC++、Java、Go、Pythonなどの一般的なプログラミング言語用のクライアントSDKが含まれています。