Apache Tez
YARN ベースの Hadoop のデータ処理アプリケーションのためのフレームワーク
Apache™ Tez は、Apache Hadoop の YARN ベースにした、高パフォーマンスのバッチやインタラクティブなデータ処理アプリケーションのためのフレームワークです。Tez によって、MapReduce の速度を劇的に向上させ、そのパラダイムを改善する一方で、ペタバイト規模のデータに対応できる拡張性はそのまま維持することができます。より広範な Hadoop エコシステム向けに開発された、サードパーティのデータにアクセスするアプリケーションが増えている状況と同様に、Apache Hive や Apache Pig といった重要な Hadoop エコシステムプロジェクトでも Tez が利用されるようになっています。
Tez と Hive
SQL-In-Hadoop のデファクトスタンダードである Apache Hive は、ペタバイト規模データに対するバッチ処理とインタラクティブなクエリの両方に最適なものとなっています。Hive には Tez が内包されているため、複雑な SQL ステートメントを高度に最適化された専用のデータ処理グラフに変換することで、パフォーマンスとスループット、そして拡張性の優れたバランスを取ることができます。44 の組織の145名のコントリビュータが参加する、広範なコミュニティの取り組みである、Stinger Initiative が推進する Apache Tez の革新性によって、Hive のパフォーマンスは大幅に向上しています。Tez は、インタラクティブな Hive の実現を支援しています。

Tez の機能
Apache Tez は、インタラクティブなワークロードとバッチワークロードの橋渡しをする、ネイティブな YARN アプリケーションを作成するためのAPI とフレームワークを開発者に提供します。Tez によって、これらのデータアクセスアプリーションは、数千ノードにまたがるペタバイト規模のデータを活用できるようになります。開発者は、Apache Tez コンポーネントライブラリを使って、Apache Hadoop YARN とネイティブに連携可能な Hadoop アプリケーションを作成し、さまざまなワークロードが稼動するクラスタで実行させることができます。拡張性に優れ、埋め込み可能な Tez によって、用途に合わせ高度に最適化したデータ処理アプリケーションを提供することができるため、MapReduce や Apache Spark といったエンドユーザーが直接使用するエンジンよりも優位性に勝ると言えます。Tez は、ユーザーが複雑な処理をデータフローグラフとして表現できる、カスタマイズ可能な実行アーキテクチャーを持ち、処理に必要なデータやリソースに関す情報に基づいた、動的なパフォーマンスの最適化を行うことができます。
Tez oの動作の仕組み
Apache Tez の Hadoop におけるデータ処理能力の向上は、Apache Hive や Apache Pig のそれを遙かに凌ぐものとなっています。プロジェクトは、インタラクティブなワークロードに向けたYARN との連携における標準となっています。Apache Tez が核となるタスクをどのように処理するか、その概要については、以下でご確認ください。
処理ロジックの表現、モデル、実行
Tez は、データ処理をデータフローグラフとしてモデリングします。グラフの頂点はアプリケーションロジックを、りょう線はデータの動きを表わしています。ユーザーは、豊富なデータフロー定義 API を使って、複雑なクエリロジックを直観的に表現することができます。この API は、Apache Hive や Apache Pig といった、より高次元の宣言型アプリケーションで生成したクエリプランに適したものとなっています。
インプット、プロセッサおよびアウトプットのモジュール間のやり取りをモデル化
Tez は、データフローグラフのそれぞれの頂点で実行されるユーザーロジックを、インプット、プロセッサ、アウトプットモジュールとしてモデル化します。インプットとアウトプットによって、データフォーマット、読み込みおよび書き込みの方法と場所が決定されます。プロセッサには、データ変換ロジックが含まれています。Tez はデータフォーマットを強要することはなく、インプット、プロセッサ、アウトプットのフォーマットが相互に互換性があることのみを要求します。
動的なグラフ設定
分散データ処理は動的なものであるため、事前に最適なデータ移動方法を決定することは困難です。実行時により多くの情報が得られるため、さらに実行計画の最適化を図ることができます。このため Tez にはプラガブルな頂点仮モジュールが含まれており、実行時の情報を収集し、データフローグラフを動的に変更して、パフォーマンスやリソースの最適化を図ることができます。
パフォーマンスの最適化とリソース管理
YARN は、クラスタのキャパシティと負荷に応じて、Hadoop クラスタのリソースを管理します。Tez 実行エンジンフレームワークは、YARN から効率的にリソースを取得し、パイプラインのすべてコンポーネントで再利用することで、オペレーションが不必要に重複しないようにします。
有向非巡回グラフ (DAG: Directed Acyclic Graph) を定義するための API
Tezでは、データ処理の DAG を表現するためのシンプルな Java API を定義します。API には 3つのコンポーネントがあります
- DAG - ジョブ全体を定義します。ユーザーは、各データ処理ジョブのためのDAG オブジェクトを作成します。
- Vertex (頂点) - ユーザーロジックの定義と、その実行に必要なリソースおよび環境を定義します。ユーザーは、ジョブ内の各ステップに対する Vertex オブジェクトを作成して、DAG に追加します。
- Edge (エッジ) - プロデューサーとコンシューマーの頂点間の接続を定義します。ユーザーは Edge オブジェクトを作成し、それを使用してプロデューサーとコンシューマーの頂点部分を接続します。
コンテナの再利用
Tez は、ジョブを個別のタスクに分割し、ユーザーのかわりに YARN 経由で実行するという、従来の Hadoop モデルを踏襲しています。このモデルでは、プロセスの機能や初期化、ストラグラー (straggler) の処理、YARN リソースマネージャーによる各コンテナの割り当てなど固有のコストが発生します。