SQL-on-Hadoop ツールを厳選し、紹介

本記事は、XplentyのCTOであるMark Smallcombeにより、2020/10/6に公開された[記事](https://www.xplenty.com/blog/12-sql-on-hadoop-tools)の翻訳になります。

最高のSQL-on-Hadoopツールに興味をお持ちですか？前回の記事「8 SQL-on-Hadoop Challenges」では、SQLとHadoopという2つのテクノロジー間のギャップを埋めるのに役立ついくつかのツールの概要を説明しましたが、あまり詳細には触れませんでした。今回は、SQLをHadoopにもたらしてくれる12のツールについて、オープンソースと商用のソリューションの両方を網羅して紹介します。

これらのツールは、価格、機能、有用なユースケース、アクセス性、将来性などの理由から選んだものです。それでは、SQL-on-Hadoopに不可欠な12のツールをご紹介します。

#オープンソースのSQL-on-Hadoopツール
##1. Apache Hive

[Apache Hive](https://hive.apache.org/?utm_source=xp&utm_medium=blog&utm_campaign=content)は、SQL-on-Hadoopツールの中でもトップレベルのツールです。当初Facebookによって開発されたHiveは、Hadoop上に構築されたデータウェアハウス基盤です。HDFSに格納されたデータをHQL（MapReduceのジョブに翻訳されたSQLのような言語）を介して、分析のためのクエリを実行することができます。

SQL機能を提供しているように見えますが、HiveはHadoop上でバッチ処理を行い、インタラクティブなクエリ機能は提供していません。メタデータをリレーショナルデータベースに格納し、そのデータに対してスキーマを維持する必要があります。 Hiveはいくつかのファイル形式をサポートしており、ユーザー定義ファンクションとともにHadoop上で圧縮データを処理することもできます。

**要点**：HiveはSQLライクな言語でHadoop上でのバッチ処理を提供します。

Hive vs. HBaseをどっちを選ぶべきか迷ってますか？こちらのブログ「[Hive vs. HBase 比較](https://www.xplenty.com/jp/blog/hive-vs-hbase-ja/)」をチェックしてください。

##2. Apache Sqoop

最も価値のあるSQL-on-Hadoopツールの一つである[Apache Sqoop](https://sqoop.apache.org/?utm_source=xp&utm_medium=blog&utm_campaign=content)は、Javaでデータベースに接続するための標準APIであるJDBCを介して、リレーショナルデータベースからHadoopへのデータのインポートとエクスポートを可能にします。関連するツールでデータの一括インポート/エクスポートが可能な場合には、JDBCなしでも動作します。

Sqoopは、リレーショナルデータベース上でクエリを実行し、結果の行をテキスト、バイナリ、Avro、シーケンスファイルのいずれかの形式でファイルにエクスポートすることで動作します。これらのファイルはHadoopのHDFSに保存され、Hadoopからリレーショナルデータベースに戻すこともできます。最後に、SqoopはHadoop用のテーブルおよびストレージ管理サービスである[HCatalogと統合](https://sqoop.apache.org/docs/1.4.4/SqoopUserGuide.html#_sqoop_hcatalog_integration?utm_source=xp&utm_medium=blog&utm_campaign=content)されており、HiveまたはPig経由でSqoopのインポートされたファイルを照会することができます。(詳細は[Sqoopのブログ記事](https://www.xplenty.com/blog/integrating-relational-databases-with-apache-hadoop/)を参照してください)。

**要点**： Sqoopを使うと、SQLデータベースからApache Hadoopにデータをインポートしたり、Apache Hadoopからデータをエクスポートしたりすることができます。


##3. Apache Phoenix

[Apache Phoenix](https://phoenix.apache.org/?utm_source=xp&utm_medium=blog&utm_campaign=content)は、HBase上での対話的なクエリのための SQLスキンです。SQLクエリを一連のHBaseスキャンにコンパイルし、JDBCの結果セットを生成します。

Phoenixは、スクラッチから構築するか、既存のHBaseテーブルからマップしたスキーマを維持する必要がある点に注意してください。さらに、Phoenix がサポートしていない機能がいくつかあります: 完全なトランザクションのサポート、派生テーブル、一部のリレーショナル演算子（Intersect、Minus）、および雑多なビルトイン関数 (手動で追加することはできますが)。このプロジェクトは主にSalesforce、Intel、Hortonworksによってメンテナンスされています。

**要点**： Apache Phoenix は HBase 上で対話的な SQLクエリを提供します。

##4. Apache Impala


[Apache Impala](https://impala.apache.org/?utm_source=xp&utm_medium=blog&utm_campaign=content)は、Hadoopの上で動作し、HDFSとHBase上でインタラクティブなSQLクエリを実行するクエリエンジンです。バッチ処理を使用するApache Hiveとは異なり、Impalaはリアルタイムでクエリを実行するため、SQLベースのビジネスインテリジェンスツールとHadoopを統合することができます。

元々はエンタープライズデータクラウド企業のClouderaによって開発されたImpalaは、その後Apacheのオープンソース・ソフトウェア・エコシステムの一部となっています。Impalaは、テキスト、LZO、シーケンスファイル、Avro、RCFileを含む、[すべての標準的なHadoopファイルフォーマット](https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/introduction_fileformats.html?utm_source=xp&utm_medium=blog&utm_campaign=content)をサポートしています。また、Impalaは[Amazon Elastic MapReduce (EMR)](https://aws.amazon.com/jp/emr/?utm_source=xp&utm_medium=blog&utm_campaign=content)を介してクラウド上で実行することも可能です。

**要点**： Impalaは、HDFSとHBaseを介した対話型SQLクエリのためのオープンソースソリューションです。

##5. Apache Spark SQL
[Apache Spark SQL](https://spark.apache.org/sql/?utm_source=xp&utm_medium=blog&utm_campaign=content)は、オープンソースのビッグデータ処理エンジンであるApache Sparkのモジュールで、Sparkプログラム内で構造化されたデータをクエリするのに役立ちます。これは、数年前に頓挫したApache Spark用の大規模データウェアハウスシステムであるApache Sharkの後継モジュールです。

Spark SQLでは、[DataFrames](https://spark.apache.org/docs/latest/sql-programming-guide.html?utm_source=xp&utm_medium=blog&utm_campaign=content)と呼ばれる概念が導入されており、リレーショナルデータベースのテーブルと同等のもので、追加の機能強化と最適化が施されています。Spark SQLモジュールは、Hive、Avro、Parquet、ORC、JSON、JDBCを含む多くの異なるデータソースおよび、Java、Scala、Python、Rを含むプログラミング言語と互換性があります。

**要点**： Apache Spark SQLは、Apache Spark内でSQL-on-Hadoop機能が必要な場合に最適な選択肢です。

##6. Apache Drill
[Apache Drill](https://drill.apache.org/?utm_source=xp&utm_medium=blog&utm_campaign=content)は 「Hadoop、NoSQL、クラウドストレージのためのスキーマフリーのSQLクエリエンジン」と謳っています。Drillは、複雑で入れ子になったデータや非リレーショナルテーブルに対するSQLクエリを可能にするJSONデータモデルを利用しています。Drillでは、リレーショナルデータベースにクエリを実行するのと同じように、標準的なSQLクエリを使用することができます。

オープンソースの Drill プロジェクトは、大規模で分散したデータセットをクエリするための Google の Dremel システムをベースにしています。DrillにはREST APIがあり、Tableau、Qlik、SAS、Microsoft Excelなどのビジネスインテリジェンスアプリケーションと統合されています。

**要点**： Apache Drill はSQLを使用して Hadoop や NoSQL データベースをクエリすることができます。

##7. Presto

[Presto](https://prestodb.io/?utm_source=xp&utm_medium=blog&utm_campaign=content)は、Hive、HBase、さらにはリレーショナルデータベースや独自のデータストアの上で動作するインタラクティブな SQL クエリエンジンで、企業や組織全体で複数のソースからのデータを結合するのに役立ちます。プロジェクトのウェブサイトによると、Prestoは「[Hadoop上で最も高速なSQLエンジン](https://prestosql.io/blog/2019/04/23/even-faster-orc.html?utm_source=xp&utm_medium=blog&utm_campaign=content)」であり、それを裏付けるベンチマークがあります。

FacebookはPrestoの主な開発者であり、同社は[300ペタバイトのデータウェアハウス](https://www.facebook.com/notes/facebook-engineering/presto-interacting-with-petabytes-of-data-at-facebook/10151786197628920/?utm_source=xp&utm_medium=blog&utm_campaign=content)を含む社内のデータストアに対するクエリにそれを使用しています。AirbnbやDropboxのような他の大企業も、技術スタックでPrestoを使用しています。

**要点**： Presto は、Hive や HBase を介した対話的な SQL クエリのための Facebook のエンタープライズクラスのソリューションです。

##8. Citusdata
[Citus Data](https://www.citusdata.com/?utm_source=xp&utm_medium=blog&utm_campaign=content)は、Hadoop上で動作するSQLライクな機能を持つもう一つの対話型クエリエンジンです。Citusは、ビッグデータを処理するためのリアルタイム分析データベースのGoogle版であるDremelをベースにしています。2019年にMicrosoftに買収されて以来、Citusはオープンソースのソフトウェアとして、また[Azure Database for PostgreSQL](https://azure.microsoft.com/en-us/services/postgresql/?utm_source=xp&utm_medium=blog&utm_campaign=content)の[Hyperscale（Citus）](https://www.citusdata.com/product/hyperscale-citus/?utm_source=xp&utm_medium=blog&utm_campaign=content)のデプロイメントオプションとして利用できるようになりました。

ImpalaやPrestoとは異なり、Citusは裏側で動作するSQLエンジンとしてPostgreSQLを使用しています。Citusはオンプレミスでもクラウドでも実行でき、全文検索、ジオ検索、ODBC/JDBC互換性などの機能をサポートしています。分析データベースであるCitusは、データの一括読み込みしかサポートしていません。

**要点**：CitusはPostgreSQLを使ったSQL-on-Hadoopの対話型のクエリを提供しています。

#商用ライセンスのSQL-on-Hadoopツール
##9. Jethro


[Jethro](https://jethro.io/?utm_source=xp&utm_medium=blog&utm_campaign=content)は、データがHadoopに書き込まれるとすぐに自動的にインデックスを作成するHadoop用のSQLエンジンを提供することで、「[BIのための最速のSQL-on-Hadoopエンジン](https://jethro.io/sql-on-hadoop?utm_source=xp&utm_medium=blog&utm_campaign=content)」を提供すると謳っています。Jethroのウェブサイトによると、このツールはHiveやImpalaなどのツールよりも「[最大100倍速いクエリ](https://info.jethro.io/press-releases/jethrodata-announces-general-availability-of-solution-for-accelerating-bi-on-hadoop?utm_source=xp&utm_medium=blog&utm_campaign=content)」を提供できると述べています。インストールと使用方法は簡単です。Jethroは既存のHadoopクラスタに追加することができ、侵入することもなく、Hadoopストレージノードにインストールする必要もありません。

**要点**： Jethroは、自動インデックスにより、高速で利用者に負担のかからないSQL-on-Hadoopを提供します。

##10. HAWQ
[HAWQ](https://hawq.apache.org/?utm_source=xp&utm_medium=blog&utm_campaign=content)は、EMCの子会社であるPivotal社の商用SQL-on-Hadoopプラットフォームです。PivotalのGreenplum Analytic DatabaseとHadoopのHDFSをデータストレージに使用した並列SQLクエリエンジンを提供します。HAWQエンジンは、フルトランザクションをサポートしたアナリティクスに有用で、[テキスト、Hive、HBase、Parquetを読み取る外部テーブルをHDFS上で作成する機能](http://www.greenplumguru.com/?p=642?utm_source=xp&utm_medium=blog&utm_campaign=content)をサポートしています。

**要点**：HAWQはPivotalのSQL-on-Hadoopソリューションです。

##11. BigSQL


[Big SQL by IBM](https://www.ibm.com/products/db2-big-sql?utm_source=xp&utm_medium=blog&utm_campaign=content) (Postgres by BigSQLと混同しないように、現在は廃止されているようですが、オープンソースのプロジェクトです。) は、大規模並列処理(MPP)や高度なデータクエリのためのIBMのSQL-on-Hadoopエンジンです。IBM Big SQLを使用して、リレーショナル・データベース、NoSQL データベース、HDFS、オブジェクト・ストアなど、さまざまな形式にアクセスすることができます。

IBM Big SQLは、クラスタ内の複数のノードにクエリを分散させることで、クエリのパフォーマンスを向上させます。Big SQLのユースケースには、既存の Oracle や IBM データウェアハウスからのデータのオフロードや、Hadoop に移行できないデータが保存されたリレーショナル・データベースへのフェデレーティッド・アクセスなどがあります。

**要点**： IBM Big SQLは、大企業向けに Hadoop 上の堅牢な SQL ツールを提供します。

##12. PolyBase
[PolyBase](https://docs.microsoft.com/en-us/sql/relational-databases/polybase/polybase-guide?view=sql-server-ver15&utm_medium=blog&utm_campaign=content&viewFallbackFrom=sql-server-ver15%3Futm_source%3Dxp)は、SQLクエリを処理するためのMicrosoftのSQL-on-Hadoopツールです。Microsoft SQL Serverのお客様は、PolyBaseを使用して、HadoopやAzure Blob Storage、SQL Server、Oracle、Teradata、MongoDBデータベースのデータにアクセスできます。

Transact-SQL言語を使用することで、PolyBaseのユーザーは、Hadoopに格納されたデータをクエリしたり、Hadoopからデータをインポートしたり、Hadoopにデータをエクスポートしたりすることができます。PolyBaseのクエリオプティマイザは、計算をHadoopにプッシュするかどうかを判断し、Hadoopの分散性を活かしたMapReduceジョブを作成することができます。

**要点**： PolyBase は、Microsoft SQL Server のユーザーにとって強力な SQL-on-Hadoop ツールです。

#SQL on Hadoopのガイダンスをお探しですか？ Xplentyがサポートします。
Hadoopの世界のビッグデータガイドが必要ですか？Xplentyのデータ統合のエキスパートは、ビッグデータのワークフローを最適化する方法を知っています。私たちのクラウドベースのETL(extract, transform, load)ソリューションは、膨大な範囲のソースとデスティネーションにわたって自動化されたデータフローのためのシンプルで可視化されたデータパイプラインを提供します。

[XplentyのHP](https://www.xplenty.com/jp)にアクセスし、[オンラインデモとリスクフリーのトライアル](https://try.xplenty.com/jp-demo/?utm_source=xp&utm_medium=blog&utm_campaign=12-sql-on-hadoop-tools-ja)をスケジュールし、Xplentyプラットフォームの使い勝手をご自身で体験してみてください。