SQL-on-Apache Hadoop — ジョブの特性に適したツールの選択

投稿: Devadutta Ghat:2016年5月12日
カテゴリー:製品

SQL on Hadoop選択のガイドライン

SQL-on-Hadoop、つまりHadoop上でSQLを実行するためのツールは、エコシステム内に多数存在し、その選択に迷うことも少なくありません。しかし、目的さえはっきりしていれば、対象となるジョブに最適なツールの選択は簡単です。担当者の肩書やチームの役割を見れば、それが明らかになることさえ多いのです。SQL on Hadoopのためのツールには、主に3つのクラスがあります。ETLやデータ準備用ツール、分析データベース、そしてデータエンジニアリング用ツールです。この3つのクラスにおけるHadoopエコシステムで突出したツールと言えば、それぞれApache Hive、Apache Impala(インキュベーション中)、Spark SQLです。

概要は次のとおりです:

スクリーンショット 2016-05-10 05.30.57

それでは、それぞれの詳細を見てみましょう。

ETLおよびデータ準備用ツール: Hive

Hiveは、SQLライクな言語であるHiveQLを提供し、多くのユーザーがMapReduceを使ってバッチ処理を行なえるようデザインされています。このためHiveは、MapReduceと同じユースケースに対して最適なものと言えます。Hive-on-Sparkは、Hive同様の優れた機能を提供しながら、処理速度の大幅な向上を目的として、MapReduceの代わりにApache Sparkの次世代のMRスタイル処理エンジンを使用します(Hive-on-Tezも同様の機能を提供しますが、SparkではなくTezを使用しています)。Sparkは、MapReduceに比べてJavaによる豊富なAPIを提供して容易な開発を可能にするうえ、ScalaやPythonによるSparkのDAGエンジンの使用で、データのインメモリキャッシングによる高速な処理を実現します。

ソートやジョインなどを行なう大規模なETLをバッチとしてスケジュール処理できることで、HiveはHadoop向けのデータ準備ツールとして幅広く利用されているほか、ImpalaのBIユーザーに提供されるほとんどのデータは、ETL開発者がHiveを使って用意したものです。

データエンジニアリングツール: SparkとSpark SQL

Sparkは、強力なデータエンジニアリング・フレームワークとして、コアSparkプリミティブ、SQL API、MLlibなどの機械学習アルゴリズム、ストリーミングAPI、Spark-RやPySparkなどのPython/R インタフェースなど、開発者向けAPIを豊富に備えています。

Sparkのコアとなっているのが、次世代のMRスタイルのシステムです。MapとReduceのオペレータに限定することなく、Shuffleフェーズ実行の代わりにRDDを代替のオペレータとして使用することで、より強力なSparkオペレータを開発することができます。Sparkの他の部分同様、SparkSQLがSQLをRDDのSparkオペレータに変換するため、SQLとSpark APIを混在できるようになります。データエンジニアは、Spark APIを使用しているSparkアプリケーションでも、データの集約、ジョイン、フィルタリングといったSQLを使って通常のデータ準備処理を行ない、さらにMLlibを使用して機械学習アルゴリズムにデータを引き渡すことができます。

例えば、同じデータセットに対するロジスティック回帰の反復を、Sparkを使う場合とMapReduceの場合で比較してみましょう。Sparkであれば、ScalaかJavaで書かれたSparkのアプリにSQLを埋め込み、MLlibを使って回帰モデルを作成することができます。下のグラフにあるように、Sparkはメモリ内にデータをキャッシングすることで、MapReduceより遙かに優れた性能を発揮します。

スクリーンショット 2016-05-10 05.26.32

ロジスティック回帰のパフォーマンス(データがメモリに収まる場合)

最近Clouderaが発表したOne Platform Initiativeのロードマップでは、Sparkのセキュリティ、拡張性、管理性能、ストリーミング対応の大幅な強化が示唆されています。開発者にとっての馴染みやすさや優れたパフォーマンスといった点で、SparkはMapReduceに取って替わるものになります。既にAllStateCox AutomotiveといったClouderaのお客様はSparkを利用してデータ処理の幅を広げています。

分析データベース: Impala

Impalaは、HadoopのインタラクティブなBIやSQL分析向けに開発された最新のMPPクエリエンジンです。データアナリストやBIユーザーは、通常、Impalaのような分析データベースをTableauやZoomdata、Microstrategyといったツールと併用しています。クリックするだけで、レポートの作成や可視化を数分ではなく数秒で完了できることは、ユーザーにとって非常に大きなメリットです。また、こうしたインタラクティブなやり取りが重要であるばかりでなく、ツールのユーザーを数百あるいは数千にまで拡大しても、このような状態を維持できることが必要です。

Clouderaでは、分析ワークロードに対するHive、ImpalaおよびSpark SQLのパフォーマンス比較を最近実施しました。今さらとは言え、ここでの結論は、分析ワークロード向けに設計されたImpalaが、複数のユーザーでのインタラクティブクエリのレイテンシが重要な環境において最高のパフォーマンスを発揮するということでした。

1ユーザー 対 10ユーザーのレスポンス時間比較(対Impala比)(数値は低いほど優位)

スクリーンショット 2016-05-10 05.26.43

Impalaは、SQL-on-Hadoopのエンジンとして唯一、分単位ではなく秒単位でのレスポンスを提供できるのみならず、従来のDBMSや分析データベースと比較しても、優れたパフォーマンスを発揮します。QuaeroEpsilonといったClouderaの多くのお客様が、Netezzaのような従来からのシステムと比較して、Impalaの優れたパフォーマンスの恩恵を直接受けています。以前に説明した通り、Impalaのパフォーマンス向上は依然として重要で、上記のベンチマークで使用した以前のバージョンに比べ、最新のImpala 2.5リリースでは、4倍のパフォーマンスを提供することができます。マルチコアを使ったジョインや集約機能や、さまざまなパフォーマンス向上対策によって、分析ワークロードに対するImpalaのパフォーマンスはさらに大きく他を引き離す結果になると考えます。

まとめ

以上のように、Hive、Impala、SparkSQLは最高の組み合わせと言えますが、さまざまなワークロードに対応するためのHadoopプラットフォームの中では、それぞれが異なる機能を提供し役割を果たすものです。データの準備やBI、あるいはデータサイエンスであろうと、そのタスクや役目に関係なく、エコシステムには最適なツールというものが存在します。実際、多くのClouderaのお客様にも、3つのテクノロジーを併用する異なるユーザーグループが存在しています。Impalaが分析に使用するほとんどのデータがHiveから提供され、Sparkのお客様の80%もまたImpalaを使ってデータを分析し、データエンジニアやデータサイエンティストは、同じデータを使用しながらSparkで統計分析を行っているのです。

以上のテクノロジーの詳細については、ウェビナー「SQL-on-Hadoop Technologies in Cloudera」をご覧ください。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.