ビッグデータ基盤として Hadoop 環境と接続することも増えてきましたので、Hadoop 関連でよく出現するワードを押さえておきましょう。
何故 Hadoop ?
- RDB 容量に限界がある
- 大規模データを処理するにはスケールアウトが必要だ
- 全て RDB である必要はないんじゃない
- ということで、大規模データのために Google の論文より Apache Hadoop 登場
Hadoop はもともとは「バッチ処理」基盤
- Hadoop 1系 = HDFS + MapReduce
- Hadoop 2系以降 = HDFS + YARN + MapReduce
- HDFS : 分散ファイルシステム
- YARN : リソース管理、ジョブスケジューリング
- MapReduce : 分散処理フレームワーク
- HDFS (Hadoop Distributed File System)
- ファイルシステムなので、どのようなデータも保存可能。つまり非構造化データも
- ノードを増やすことで容量、性能ともに増強可能
- 実は、、、ライトワンス。つまり、追記は可能だが既存データ更新は不可
- これらを克服するために HBase が作られた。これにより、データ更新やランダムアクセスも可能に
- YARN (Yet Another Resource Negotiator)
- Hadoop 1系まではクラスタのリソース管理、ジョブスケジューリングは MapReduce が担当していた
- 大規模クラスタ化や効率化のために、これらの機能を分離
- MapReduce
- 並列分散処理を行うためのフレームワーク
- map と reduce という処理が組み合わさっているので MapReduce
分散処理フレームワークとして Spark 登場
- MapReduce よりも高速
- 機械学習やストリーミングデータの分散処理等、様々な処理に対応
- つまり、Spark は分散処理フレームワークとして MapReduce の置き換え
- 分散処理フレームワークとして Tez もあるけど、ここでは省略
Hadoop 環境に SQL アクセスするには?
- Spark SQL
- Spark 自身も Spark プログラミングの一部として SQL を持っている
- Hive
- Hadoop 用バッチ向け SQL エンジン
- SQLを動的に MapReduce ,Tez や Spark それぞれの処理用にプログラム変換
- Hive 1.0 -> Hive 2.0 と進化しているが、バッチ処理なのでインタラクティブな処理には向かない
- でも、Hive 2.0 より LLAP (Live Long and Process) 機能が追加され、インタラクティブな処理も可能に
- Impala
- Hive と違い、MapReduce や Spark の処理に変換せずに直接実行
- つまり、バッチ処理ではなく並列で高速なインタラクティブ処理が可能
- Presto
- Facebook が公開したインタラクティブ処理が可能な分散 SQL エンジン
- ANSI SQL に完全準拠
- Apache Drill
- スキーマフリーの SQLクエリエンジン。構造化データだけでなく非構造化データ等、さまざまなデータソースに対して、直接SQLクエリ実行が可能 (JSON,CSV, Parquet etc..)
データを分析するには、アドホックなクエリの結果をインタラクティブに得る必要がありますが、Hadoop環境でも様々な方法がありそうですね。
Tableau Desktop で見ると、赤枠が Hadoop 関連です。最近では、商用Hadoop ディストリビューションにおいても Presto や Drill で接続する例が増えている気がします。