Spark vs. Tez Key Differences
- Tez は YARN アーキテクチャにうまくフィットします。Spark はリソース管理の問題に直面するかもしれません。
- Sparkはメインストリームの開発者向けであるのに対し、Tezは専用ツールのためのフレームワークです。
- Sparkは(まだ)YARNアプリケーションとの同時実行はできません。Tez は YARN の上で実行するように意図的に作られています。
- Tezのコンテナはリソースを節約するために終了時にシャットダウンすることができます。Spark のコンテナはデータを処理していなくてもリソースを消費します。
ここでは、Spark vs. Tezの大論争について話をします。まず、一歩戻って、我々はこれまでApache SparkとHadoop MapReduceは2つの異なるビッグデータのビーストであると指摘してきました。前者は高性能なインメモリデータ処理フレームワークであり、後者はペタバイト規模の成熟したバッチ処理プラットフォームです。また、Apache HiveとHBaseは、似たような機能を持つ全く異なる2つのツールであることは周知のとおりです。HiveはMapReduceジョブを実行するSQLライクなエンジンであるのに対し、HBaseはHadoop上のNoSQLキー/バリューデータベースです。
しかし、Spark vs. Tezという問いに対してはどうでしょうか?
理論上は、SparkとTezには多くの共通点があります。どちらもインメモリ機能を持ち、Hadoop YARNの上で動作し、あらゆるデータソースからのすべてのデータタイプをサポートしています。では、SparkとTezの違いはいったい何なのでしょうか?
What is Apache Spark?
Apache Sparkは、ビッグデータを処理するためのオープンソースの分析エンジンとクラスタコンピューティングフレームワークです。Sparkは、非営利団体であるApache Software Foundationの発案によるもので、様々なオープンソースのソフトウェアプロジェクトに取り組んでいる分散型組織です。
2014年に最初にリリースされたSparkは、Hadoop MapReduce分散コンピューティングフレームワークをベースにしています。スケーラビリティやフォールトトレランス(障害が発生しても動作しつづける耐性)といったMapReduceの利点の多くを維持しつつ、スピードと使いやすさを向上させています。
コアとなるデータ処理エンジンに加え、SQL、機械学習、ストリーム処理のためのライブラリが含まれています。SparkフレームワークはJava、Scala、Python、Rなどのプログラミング言語と互換性があり、開発者の間で広く認知されています。また、Amazon S3、HadoopのHDFS、MapR XD、CassandraやMongoDBなどのNoSQLデータベースなど、サードパーティのテクノロジーもサポートしています。
Sparkの魅力は、異なるプロセス、テクノロジー、テクニックを一つのビッグデータパイプラインに統合し、生産性と効率性を向上させることができる点にあります。その柔軟性のおかげで、Sparkは非常に人気が高く、ビッグデータ処理の世界において使い勝手のいい「万能ナイフ」となっています。
What is Apache Tez?
Sparkと同様に、Apache TezはMapReduce技術をベースにしたビッグデータ処理のためのオープンソースのフレームワークです。SparkもTezも、有向非周期グラフ(DAG)を使って非常に大量のデータを処理できる実行エンジンを提供しています。
Tezは、計算をDAGとして扱うことでMapReduceのパラダイムを一般化しています。MapReduceのタスクは、DAGのノードとして扱われる1つのジョブに結合され、同時実行性とシリアル化が強いられます。
一方、DAGのエッジは、ジョブ間のデータの移動を表します。Tezはデータ型を問いません、つまりデータの移動のみに関心があるということです(そしてフォーマットも関係ありません)。
MapReduceのいくつかの限界を改善することで、Tezはデータ処理ジョブのパフォーマンスを向上させようとしています。この効率性の向上により、プログラマーはプロジェクトに最適と思われる設計や開発を選択することができるようになります。
Apache Sparkは "大規模なデータ処理のための統合分析エンジン "であると自称しています。 一方、Apache Tezは "データ処理のためのタスクの複雑な有向非周期グラフを可能にするアプリケーションフレームワーク "であると自称しています。
Sparkも有向非周期グラフを使用していることを考えると、この2つのツールは少し似ているように聞こえないでしょうか?確かにそうかもしれません。しかし、重要な違いもあります。ここでは Apache Spark と Apache Tez の主な違いを紹介します。
- Difference #1: Hive と Pigは動作するか?
- Difference #2: Hadoop YARN上での動作
- Difference #3: パフォーマンステスト
SparkとTezのそれぞれの違いについては、以下のセクションで詳しく解説します。
SparkとTezはPigおよびHiveをサポートしているか?
HiveとPigは、ビッグデータのための2つのオープンソースのApacheソフトウェアアプリケーションです。Hiveはデータウェアハウスであり、PigはHadoop上(SparkやTez上を含む)で動作するデータ処理ジョブを作成するためのプラットフォームです。
Hortonworks製品戦略担当副社長のShaun Connolly氏は、SparkとTezを区別するために、Sparkはメインストリームの開発者向けのAPIを備えた汎用エンジンであるのに対し、TezはHiveやPigのような専用ツールのためのフレームワークであると述べています。
Spark と Tez はどちらも Pig と Hive をサポートしていると主張していますが、現実は明確にそうであるとはいえません。我々はSporkプロジェクトを使ってSpark上でPigを動かしてみましたが、いくつかの問題がありました。少なくともSpark上でPigを利用するのは、良く見たとしてもまだ疑わしいということが分かりました。
SparkやTezと一緒にYARNを使う
YARNはHadoopのリソースマネージャおよびジョブスケジューラです。理論的には、Spark はスタンドアロンのアプリケーションとしても、YARN 上でも実行できます。しかし、TezはYARNの上で実行できるように作られています。しかし、実際には、Sparkは他のYARNアプリケーションと同時に実行することは(少なくともまだ)できません。
Tez プロジェクトの開発者の一人である Gopal V 氏が、なぜ彼は Tez が好きなのかについて、広範囲にわたる記事を投稿をしてくれました。彼は次のように結論づけています。
「私がこれまでプレイしてきたフレームワークの中で、Tez の本当の差別化ポイントはこれです。Tez は何かをするためにコンテナを常に起動しておく必要はありません。コンテナを保持することはできますが、それは最適化のためのものであり、セッションのアイドル期間中に必要なものではありません。」
「フレームワーク」という言葉を使って、彼はSparkとそのコンテナがデータを処理していなくてもリソースを消費し続ける必要があることを述べています。しかし、Tez コンテナは処理が終わるとすぐにシャットダウンしてリソースを解放することができます。
Hive, HBase, MapReduceなどのHadoopベースのアプリケーションを使用している場合が多いかと思います。いずれかのHadoopクラスタにSparkをインストールすることができますが、リソース管理の問題に直面する可能性があります。一方で、Tezはリソース管理を含めてYARNアーキテクチャにうまくフィットします。
Spark vs. Tez: どちらが速い?
おそらく最大の疑問は、SparkとTezではどちらが速いかということでしょう。 様々なベンチマークによると、どちらのオプションもMapReduceのパフォーマンスを劇的に向上させています。独立したサードパーティによる評価では、まだ勝敗はついていません。
SparkはMapReduceの100倍の速度で動作すると主張しています。 UCバークレーのAmplabで行われたベンチマークでは、SparkがTezよりもはるかに高速に動作することが示されています(テストではSparkをSharkと呼んでいますが、これはSpark SQLの前身です)。
しかし、バークレーがSparkを発明したという事実を考慮すると、これらのテストは完全に公平ではないかもしれません。また、これらのベンチマークは数年前にMapReduce上で動作するHive 0.12で行われました。バージョン0.13からは、Hiveの実行エンジンにTezを採用しており、パフォーマンスが大幅に向上しています。
一方、HortonworksはSparkとTezのパフォーマンスについて独自のベンチマークを行いました。Hive 0.13をTez上で実行した場合、Hive 0.12よりも最大100倍高速に動作することが分かりました(ただし、かなりの数のテストクエリが不思議なことに消えてしまいました)。100倍速い... うーん、聞き覚えがあるかも?
総括すると、SparkとTezはどちらもHadoop MapReduceの最大100倍の性能を持っているということです。 しかし、Spark vs Tezに関して言えば、どちらが速いのでしょうか?
誰も言えない、というよりむしろ認めようとしないでしょう。IBMで働いている人に聞けば、答えはどちらでもなく、IBMのBig SQLの方が両者よりも速いと言うでしょう。私たちは、独立したパフォーマンス・テストを実行して、このスコアに決着をつける第三者を本当に必要としています。
結論
Spark vs. Tezの問題は、最終的には政治力と人気の問題になるかもしれません。これはビッグデータの巨人同士の衝突であり、ClouderaはSparkを支持し、HortonworksはTezを支持しています。Sparkは様々なディストリビューションで利用できるため、より普及していますが、TezはHortonworksのdistroでしか利用できません。
最終的には、ユーザー層がフレームワークの運命を決めることになるかもしれません。現時点では、少なくともGoogle Trendsによると、Sparkが圧倒的に勝っています。
誇大広告が薄れ、人々がSparkとTezの両方を使う経験を積んだ後、最終的にどちらがMapReduceの王座を継承するのかが明らかになるかもしれません。
Integrate.ioがお役に立てること
Spark vs Tezの議論を含むデータの世界は複雑です。Integrate.ioはSparkとTezの両方から得たインサイトを利用して、ソースとデスティネーション間の自動化されたフローのためのシンプルで可視化されたデータパイプラインを提供しています。
SparkとTez、そしてその中間の世界についての何らかのガイダンスをお探しですか?Integrate.ioのオンライン相談に申し込み、あなたのビジネスニーズと目的についてディスカッションしたり、Integrate.ioプラットフォームの無料トライアルにサインアップしてみてはいかがでしょうか?