Apache Hadoopを企業に導入するのは困難です。従業員はSQLと統合する分析ツールについて訓練を受け、経験を積んでいるとします。しかし、データがMySQLサーバーにとっては大きすぎるという段階に達すると、ビッグデータの世界へのステップアップが必要になります。

ビッグデータの重要な要素の1つは、データの多様性です。構造化されたデータと非構造化されたデータを、事前に定義されたスキーマなしで保存できるようになります。SQLベースのテクノロジーは、事前に定義されたスキーマを持つ構造化データのみを扱います。データベースにあらかじめパッケージされた追加エンジンを利用して、JSON、XML、またはBLOBなどの半構造化データをSQLに格納することはできますが、収集できるデータタイプはまだ限られています。また、スキーマを最新の状態に保つためのメンテナンスのオーバーヘッドも増加します。ビッグデータはアジャイルな方法論と予測不可能なスキーマをサポートしているため、これらの追加されたメンテナンス作業を排除できます。 ビッグデータに移行する企業では、Hadoopが一般的に使用されています。

Hadoopとは?

Hadoopは、分散処理によってビッグデータへの取り組みをサポートするオープンソースのフレームワークです。Apache Software Foundationがこのオープンソースプロジェクトを管理しており、元々はDoug Cutting、Mike Cafarella、Yahoo!によって開発されました。

あらゆるタイプのデータを保存し、大規模な並列処理を活用し、増え続けるデータのコレクションから価値を得ることができます。このフレームワークは、分散コンピューティングモデルを用いたスケーラビリティ用に設定されているため、コモディティハードウェア上で現在および将来のワークロードを処理することができます。Hadoopは、Hadoop Distributed File System(HDFS)とMapReduceプログラミングモデルを使用して、半構造化されたデータをその規模に応じてクエリ処理します。

このフレームワークを構成する4つの要素があります。

  • HDFS
  • Hadoop Common
  • MapReduce
  • Yet Another Resource Negotiator (YARN)

Hadoopフレームワークは、フォールトトレランス、データストレージコストの削減、構造化データと非構造化データを必要なだけ保存できることなど、企業のデータ戦略に多くのメリットをもたらします。しかし、特に移行を始めようとしているときには、いくつかの明確な欠点があります。

MapReduceのプログラミングは、高度なアナリティクスのニーズに対応できるほど効率的ではありません。反復的なアプローチを使用したい場合は、複数のシャッフルとソートのフェーズを経るファイル集約的なプロセスを使用しなければなりません。

また、企業内にHadoopをサポートするために必要な技術的な人材がいるかどうかも考慮する必要があります。この分野のスペシャリストは需要が高く、SQLに比べて候補者の数が多くありません。Hadoopプロジェクトのための人材を見つけるのに苦労するかもしれませんが、既存のスキルセットを活用して、より効率的なアナリティクスを設定しながら、このフレームワークのビッグデータのパワーを得るという選択肢もあります。それは、SQL-on-Hadoopソリューションです。

Hadoopがビッグデータとデータスケーラビリティを支える方法

企業内のデータストアにデータレイクやデータウェアハウスを使用することを検討し始めると、これらの大規模なデータセットを扱う方法が必要になります。Hadoopエコシステムは、スケーラブルな分析プロセスを作成し、ビッグデータ環境で運用するための強力な基盤となる多くの機能を備えています。

  • コモディティハードウェアを含む最大4,500台の接続マシンをサポート。
  • すべてのマシンには、データノードとタスクトラッカーが含まれる。
  • 高可用性のためにレプリケーションを自動的に使用し、アプリケーション層を介してフォールトトレランスのためのバックアップデータセットを作成。
  • スケーラブルな並列処理により、大量データを扱う際に安定したスループットを提供。
  • 水平・垂直方向のスケール。

SQL-on-Hadoopとは?

SQL-on-Hadoop定義は、その名の通り、分析要件にHadoopを活用しながら、構造化データに対してSQLライクなクエリを使用することができるツールです。新たに採用する必要のある Hadoop スペシャリストの数を減らし、このフレームワーク上でより早く立ち上げて稼働させることができます。

各ソリューションは、HadoopでSQLクエリを実行するための独自のアプローチを持っていますが、一般的には以下の方法のうち1つ以上を使用しています。

  • SQLからMapReduceへの変換コネクター
  • SQLをHadoopクラスタにプッシュダウンする
  • SQLクエリの実行にMapReduce-HDFSとHDFSクラスタそのものの両方を使用する

Apache Hadoop内でMapReduceはどのように動作する?

ここでは、SQL-on-Hadoopツールの1つであるApache Hiveがどのように機能するかの例を紹介します。これはHQLというSQLに似た言語を使用しており、Hadoop上でMapReduceに翻訳されます。これは、チームが新しいコードを覚える必要なくジョブを実行するのに役立ち、既存のSQLベースのツールと統合することができます。

しかし、MapReduceのジョブはバッチデータ処理として実行されるため、結果を返すのに想定以上に時間がかかる可能性があります。SQLユーザーは、結果が返ってくるまでに数秒から数分かかるインタラクティブなクエリに慣れているため、ユーザーはそうした経験にイライラしてしまう可能性がある。

利用可能な特定のソリューションの詳細については、12 SQL-on-Hadoop tools のガイドをご覧ください。

HDFSはどのように動作する?

他のSQL-on-HadoopテクノロジーにはHadapt、Impala、Presto、Jethroなどがありますが、これらの多くはHadoop上での対話的なクエリをサポートしています。これらのツールは役に立ちますが、依然それらのツールはHDFSの上で動作します。HDFSはSQLのリレーショナルテーブルや他のリレーショナルデータベースとは異なる動作をします。HDFSはファイルをデータのブロックに切り分け、それをマシンのクラスタに分散して保存します。HDFS はデータの複製を保持し、自動的に整合性を維持します。この構成のため、以下のような一般的な SQL-on-Hadoop の課題に直面する可能性があります。

 

よくあるSQL-on-Hadoopの課題

1) サポートされないファイルフォーマット

Hadoopはすべてのファイル形式のストレージをサポートしていますが、SQL-on-Hadoopテクノロジーでは、データを処理するためにデータ形式を厳密に定義する必要があります。さまざまな形式で届くこともあれば、まったく形式がないこともある企業のデータについて保存したり、クエリするのをサポートしていない場合があるといった場面に陥ることがあります。

Jethroや他のツールでは、独自のファイル構造を使用する必要があります。Impalaは、テキストファイルとHadoop用のカラム型ストレージ形式であるParquetと完全に互換性がありますが、その他の形式については部分的にサポートしています。Prestoは、text、RCFile、SequenceFileなどのHadoopファイル形式で動作します。Hiveは、任意のファイル形式を読み書きできるカスタムシリアライザ/デシリアライザ関数の実装をサポートしています。ただし、そのオプションを設定するにはプログラミングにリソースを割く必要があります。

2) サーバーメンテナンスの複雑さが高まる

CitusDB、Hadapt、BigSQLなどのSQL-on-Hadoop技術の中には、Hadoopクラスタ内の各ノードにPostgreSQLをインストールする必要があるものもあります。クラスタの規模や量が大きくなるにつれて、PostgreSQLの導入と保守が面倒になってきます。これらの要件に対応するために保守チームの規模を拡大する必要があるかもしれません。

サーバのメンテナンスが複雑であればあるほど、何かを見落とす可能性が高くなります。パッチが適用されていないデータベースはハッカーを招くことになり、データ漏洩はリソースを大量に消費し、コストがかかります。

3) スキーマメンテナンス要件の増加

Hadoopのセールスポイントの1つは、スキーマがないことです。しかし、HadoopでSQLを使いたい場合は、スキーマを定義して管理する必要があります。このスキーマに収まらない新しいデータが入ってきた場合、問題が発生します。Hadaptは、自己記述的なJSONやXMLフォーマットのためのスキーマ定義を必要としないと主張していますが、標準SQLデータベースはすでにこの機能を持っているので、それらと比較して何か新しいものをもたらしていると言うわけではありません。

4) ACIDコンプライアンスの欠如

SQL データベースは、信頼性の高いデータベーストランザクションを保証するために、Atomicity、Consistency、Isolation、Durability、いわゆる ACID をサポートしています。HadoopはACID準拠を提供していないため、ACID準拠を提供するサードパーティ製ツールが必要です。HiveはオプションとしてACID準拠を提供するSQL-on-Hadoopツールの1つであり、他のオプションはACIDの1つ以上の側面に似た機能を持っています。

5) OLTPをサポートしていない

Hadoopはシーケンシャルリードをベースにしており、更新をサポートしていないため、オンライン分析処理(OLAP)の方が便利です。MapReduceをベースにしたSQL-on-HadoopツールであるHiveは、オンライントランザクション処理(OLTP)をサポートしていません。他のツールはMapReduceをベースにしていませんが、それでも分析クエリを対象としています。HBaseはトランザクション機能を提供しますが、ACIDに準拠していないので、信頼性の高いデータベーストランザクションを保証するために利用することはできません。

6) 高度なSQL関数を使用できない

SQL は、ビュー、ストアドプロシージャ、ユーザー定義関数など、クエリを超える多くの機能を提供しています。ほとんどのSQL-on-Hadoopツールはこれらの高度な機能をサポートしておらず、これらの問題を解決するためには開発リソースを割く必要があります。例えば、Hive用にJavaコードを書き、Impala用にC++を書く必要があります。

7) Update文をサポートしていない

HDFSはSQLとは異なり、Update文をサポートしていません。SQL-on-Hadoopツールの中にはそれを実装しているものもありますが、Hadoop上のすべてのデータへのランダムな読み書きアクセスを必要とするため、どのようにしてそれを実現しているのかは正確には明らかではありません。Hadoopはその機能を提供していません。HBaseのように実装されている可能性もありますが、インメモリインデックスを使用し、古いバージョンを削除するために時々ファイルを圧縮しています。

8) マニュアルジョインや Dimensionがない

HDFSはクラスタ上のデータブロックの分散方法を自動的に管理するため、結合やディメンションを手動で制御することはできません。場合によっては、これが SQL-on-Hadoop の本来目指すべきところにとって足手まといになることもあります。製品名、カテゴリ、クライアントなどのデータの結合やディメンジョンをより効率的に実行するためには、複数のデータを同じノードまたはすべてのクラスタノードにまとめて保存することが必要になる場合があります。手動で制御しないと、ネットワーク全体からすべての関連データをまとめるのに時間がかかります。

9) ディスクベースのクエリーエンジンによるクエリ速度の低下

SQL-on-Hadoopソリューションの中には、ディスクベースのクエリエンジンを使用しているものがあり、インメモリエンジンに比べてクエリ処理が遅くなります。ビッグデータ分析のために大規模なデータセットをリアルタイムで処理する場合、処理速度のわずかな遅延でも大きな違いが出てきます。キャッシュは、こうしたソリューションがこの問題に対処しようとする一つの手法ですが、クエリオプティマイザは、必要なデータがメモリ内にあることを自動的に理解するのではないので、キャッシュの検証プロセスを経る必要があります。

一部の企業では、Apache Sparkと呼ばれる別のオープンソースのデータ処理フレームワークを使用してインメモリ操作を実装しています。このアプローチは、利用可能なメモリに収まる小さなデータセットに最適で、機械学習やSQL機能をカバーするライブラリが含まれています。また、RやJavaなどのAPIも提供しています。

10) HadoopディストリビューションとSQL-on-Hadoopソリューションの最適な組み合わせを見つけられない

Hadoopはオープンソースのソフトウェアなので、さまざまなディストリビューションが用意されています。HadoopとSQL-on-Hadoopの組み合わせを選択しても、ユースケースに合わない場合は、この技術のメリットの実現に問題が生じる可能性があります。多くのベンダーが推奨ディストリビューションを用意していますが、それが必ずしもお客様の要件に最適なものとは限りません。異なるディストリビューションと SQL-on-Hadoopツールをテストするのは、時間とリソースを消費するプロセスです。

 

SQL-on-Hadoopか、それともETLか?:アナリティクスに適したオプションは?

SQL-on-Hadoopソリューションは、ビッグデータオペレーションをより効率的に行うための唯一の方法ではありません。Integrate.ioのような抽出、変換、ロード、またはETLのようなツールは、データパイプラインを強力にし、貴重なデータへのアクセスをより速くすることができます。このソリューションは、データソースを接続し、クレンジング、マスキング、フォーマット、その他の変換を通してデータを準備し、データストアにロードします。この自動化されたプロセスにより、クリーンで安全なデータの分析に多くの時間を割くことができ、データがソースからストレージへどのように転送するかを気にかける時間を減らすことができます。 

Integrate.ioでは、2週間の無償トライアルを提供しております。トライアルをお試しになるには、オンラインデモにお申し込みください。