「Hadoop ファーストガイド」 佐々木達也 2012年 秀和システム

 Hadoopの超入門の本です。とは言え、『普通のプログラマー』を対象にした本なので、JAVAでプログラムが書けない人は対象にはしていません。ちょっとしんどかったけれど、読み通すことができたのは、著者の親切な説明のお蔭です。ありがとう御座いました。

 著者はクックパッドの解析を担当しています。そして、この本は著者のHadoopの利用環境を前提とした内容となっています。その意味では、Hadoop一般をきちんと理解するものとしては不十分であることは否めません。ですが、プログラムをガリガリ書くプログラマーでない限り、このような『片手落ち』が、かえって解りやすい入門書になっているのではないかと思われます。


 「Hadoopとは、グーグルの基礎技術に対応してオープンソースとして登場した、大規模データを処理するためのフレームワーク(枠組み)です」。

 「400テラバイトのデータを、100メガバイト/秒のディスクで読み込むと46日かかります」。「サーバーを複数台用意して、並行して処理するスケールアウト」なら「処理は複雑になりますが(分散処理)、経費は安くなる」。MapReduceは、「大きな処理を細かい処理に分割して、別々のサーバーが同時並行でこなす」ものです。Hiveは、SQLライクなDSL(領域固有言語)です。

 グーグルの技術基盤とオープンソース実装を対比させれば、GFS(分散処理ファイルシステム)はHDFS(Hadoop Distributed System)、MapReduce(分散処理フレームワーク)はMapReduce、Big Table(分散データベース)はHBaseです。

 HDFSのブロックサイズのデフォルトは64メガバイト。大きいのは「シーク時間を短くする」ためです。「デフォルトで3ヶ所にレプリケーションされ」、「2つは同じラック内のサーバに、一つは異なるラックに保存する」。「一度書き込んだ内容を修整することはできない」「データの書き込みと追記のみができる」。従って、HDFSに適しない用途は、「低レイテンシ(遅延)なデータアクセス」「大量の小さなファイル」「任意のデータの修正」です。HDFSは、ノード(サーバ)によって構成されます。「ネームノード(マスターノード)は、メタデータをメモリ上に持つ」「データノードは、データの読み書きを行う」「クラスタは、束になったサーバ群」です。

=Hadoop MapReduceの手順=
Mapフェーズ(Mapperの実行)
 ジョブトラッカー:マスター
 タスクトラッカー:スレーブ
スケジューリングされる
Reduceフェーズ(Reducerの実行)
 データの集計などを行う

「Mapフェーズでは「不要な情報を取り除く」「値を別の形式に変換する」。「Mapperの出力(keyとvalueがタブ区切り)が、Shufflフェーズに渡されてShuffl&Sortされます。そして、Reducerに集められたデータが並び替えられます(Sort)」。

 HBaseは、「ノードを追加すれば線形にスケールする」分散データベース。HBaseは、「列指向データベース」「高い書き込み性能」「優れたスケーラビリティ」が特徴です。Hbaseの用途は、「書き込み頻度が高い」「列単位でデータを格納し」「特定列の一括更新」が高速で行えます。

 非RDBのKVS(Key Value Store)は、「KeyでValueを探します」「曖昧検索は行えない」。「Hadoopは、大量のデータをまとめて読み出す、データを一気に更新するなど、シーケンシャルアクセスに特化している」。「KVSやHadoopでは、トランザクション(処理に失敗するとトランザクションの全ての処理がロールバックされる)はサポートされていない」。

 「HadoopはJavaで書かれたフレームワークなので、オーバーヘッドが発生しないJavaで処理を記述するのが普通です。但し、標準入出力を持つあらゆる言語でMapper、Reducerの処理を書くことができます。DSLとしてHive、Pigも提供されています」。「Hadoopは、分散処理を実行するためのオーバーヘッドがあるので、リアルタイムには向いていません。リアルタイムに処理をしたいのであれば、HBaseを利用を検討する」。

 「Hadoopは、SSH(Secure SHell)を使用します」。

 AWS(Amazon Web Service)で、EMR(Amazon Elastic MapReduce)が提供されています。動作環境はLinux。EMRでは、EC2(Amazon Elastic Compute Cloud)を利用します。また、「ファイルシステムとしてAWSの提供しているS3(Amazon Simple Storage Service)を利用します」。

 「EMRでは、一連の処理をジョブフロー、各々の処理をステップと呼びます」「EMRを起動するとまずEMRが起動します。ジョブフローはユーザーからデータ処理の指示を受け取り、ステップを起動して作業指示を出し、進捗状態をステータスとして報告します」。

 「HiveはHadoopのラッパー」。「Hiveはフェイスブックで開発され、Hadoopプロジェクトに寄贈されました」。「EMRをHiveが使える状態で起動することができます」。「データベースやテーブルのスキーマ情報の保持をメタストアと呼び」、「メタストアを外部のMySQLに保持することが可能です」。また、「ヤフーを中心に開発が進められているPig」は、Hadoop処理が実行できるDSL」です。