パターンでわかるHadoop MapReduce ビッグデータのデータ処理入門

パターンでわかるHadoop MapReduce ビッグデータのデータ処理入門 (NEXT‐ONE)

パターンでわかるHadoop MapReduce ビッグデータのデータ処理入門 (NEXT‐ONE)

Amazonのレビューでは著者紹介がひどいということで星ひとつになっていた本。
個人的には全く気にならなかったな。
「え、著者紹介がそんなにひどいのか。てことは少なくとも某氏のjQuery Mobile本よりすごいんだよな。それならある意味楽しみだ。どれどれ著者紹介だけでも立ち読みしてみようかな」とか思って期待すると肩透かしだと思いますw 割と普通だと思うし。


さて内容のほうですが僕がぱらっと見た限り良い本だと思います。
ただしHadoopの入門書では無い気がします。どちらかというと2冊目以降に読む本。
そしてタイトルからはわかりにくいかもですがこの本は半分Pigの本です。


内容を軽く紹介しようと思いますが、まず目次はこんな感じ。

第1章 ビッグデータとデータの活用
1-1 ビッグデータってなんだろう
1-2 ビッグデータを活用するための技術
1-3 今までのデータ活用方法との違い
1-4 ビッグデータをマイニングする
1-5 データサイエンティストが足りない!
1-6 ビッグデータをHadoopでカジュアルに
第2章 Hadoopのエコシステム-Hadoopとオープンソースプロダクト-
2-1 Hadoopの発達
2-2 Hadoopの中核技術
2-3 Hadoopを活用する技術
2-4 Hadoopの開発を支援する技術
2-5 Hadoopの適用範囲を広げる技術
2-6 Hadoopと連携するための技術
2-7 Hadoopの運用を支援する技術
2-8 Hadoopを支える技術
第3章 データを分散するって、どういうこと?-分散ファイルシステム-
3-1 Hadoopはたくさんのコンピュータを使うシステム
3-2 HDFSにおけるコスト面でのメリット
3-3 たくさんのコンピュータを1つのコンピュータのように
3-4 Hadoopはデータをブツ切りにする
3-5 NameNodeとDataNodeで役割分担
3-6 Hadoopとコンピュータの故障
3-7 コンピュータを増やすと保管できるデータも増えます
3-8 HadoopはNameNodeが弱点
3-9 ほんとは怖いネットワーク障害
3-10 Hadoopではデータの内容を更新できません
3-11 Hadoopはシーケンシャルアクセスに特化しています
第4章 ばらばらか、まとめるか、それが問題だ-MapReduceの基本概念-
4-1 Hadoopはたくさんのコンピュータで並列にデータを処理します
4-2 並列処理の課題とは?
4-3 Hadoopはネットワークをなるべく使いません
4-4 JobTrackerとTaskTrackerで役割分担
4-5 Hadoopは並列処理のさまざまな障害に対処します
4-6 同期処理の問題点
4-7 MapReduceが同期の課題を軽減します
4-8 Mapフェーズ:ブツ切りデータを意味のあるレコードに
4-9 Shuffl eフェーズ:目的別にレコードを取りまとめ
4-10 Reduceフェーズ:やりたいことをやりたいように
第5章 並列処理はパターンで覚えよう-基本的な13の処理パターン-
5-1 MapReduce処理をパターン化してみる
5-2 処理パターンは大きく3つに分類できます
5-3 EMPTYパターン
5-4 EDITパターン
5-5 LIMITパターン
5-6 SAMPLEパターン
5-7 FILTERパターン
5-8 SPLITパターン
5-9 MERGEパターン
5-10 DISTINCTパターン
5-11 UNIONパターン
5-12 GROUPパターン
5-13 JOINパターン
5-14 SORTパターン
5-15 CROSSパターン
第6章 とにかく動かしてみよう!
-株価チャートの処理- 6-1 株価の変わり目を見つけよう
6-2 Hadoopのための準備をしよう
6-3 EMPTYパターンから始めよう
6-4 MapReduce処理の実行
6-5 ろうそく足の状態の計算
6-6 ろうそく足の状態の判定
6-7 MapReduce処理の最適化
6-8 仕上げに結果を書き出そう
6-9 プログラムを読みやすくする
6-10 コメントも活用しよう
第7章 単語を数えるだけでも見えてくる?-テキストの解析-
7-1 単語を処理する
7-2 Hadoopのための準備をしよう
7-3 テキストデータを読み込む
7-4 テキストデータを単語に分解する
7-5 タプルとバッグ
7-6 タプルやバッグの展開
7-7 単語別にグループ化する
7-8 グループ化されているデータに集計関数を適用する
7-9 出現回数が多い単語だけを順に並べてみよう
7-10 並べ替えのための処理はやっぱりたいへん
7-11 ファイルを出力しよう
第8章 構造がないなら意味を与えればいいじゃない?-アクセスログの分析-
8-1 アクセスログから検索語を抽出する
8-2 アクセスログから必要な情報を取り出す
8-3 項目に意味付けしよう
8-4 検索文字列を取り出す
8-5 ユーザ定義関数を使ってみよう
8-6 データの読み込みにもユーザ定義関数を使う
8-7 ユーザ定義関数の作成
8-8 ファイルを出力しよう
第9章 データとデータをくっつける!-鉄道情報の分析-
9-1 データを結合する
9-2 処理をいくつかの段階に分けてみよう
9-3 路線別の最短区間と最長区間を抽出する
9-4 駅名マスタと路線名マスタを作成する
9-5 中間データに駅名マスタ/路線名マスタを結合する
9-6 3つのプログラムを1つにまとめてみよう
第10章 簡単な分析をしてみよう-クラスタ分析-
10-1 機械学習による分析
10-2 k-means法について
10-3 区間距離を算出する
10-4 路線別の区間数と平均区間距離を算出する
10-5 特徴量をノーマライズする
10-6 最初はランダムにラベルを付けておく
10-7 ラベルごとの平均を取って中心点とする
10-8 中心点と各路線の近さを計算する
10-9 各路線ごとに一番近い中心点のラベルを採用する
10-10 繰り返し実行してみよう
10-11 クラスタ分けが完了したかどうかを確認する
10-12 繰り返し処理を自動化する
10-13 PigのプログラムをDOSコマンドやシェルコマンドから起動する
第11章 Hadoopべからず集
11-1 ファイルサーバーとして使うべからず
11-2 オンライン処理に使うべからず
11-3 リレーショナルデータベースの代用にすべからず
11-4 クラスタ運用で気を抜くべからず
11-5 セキュリティが万全と思うべからず
11-6 周辺コストを無視すべからず
11-7 法令/プライバシーを軽視すべからず
付 録 簡易環境の構築/リファレンス
A Windows PCでPigプログラムを実行するための簡易環境の構築
B PiggybankのライブラリJARのビルド方法
C Pigのステートメント/関数

第1章から第4章がHadoopの入門的な話になります。第11章はHadoopのこぼれ話的なものです。
この辺は象本や徹底入門とはまた違った書かれ方をしているので読んでいて面白いです。ここはPig関係ないです。


第5章はパターンの話(パターンといっても子象本とは違う)で第6章から第10章までがPigを用いたデータ処理の話になります。
Windows上のEclipseでPigをローカルモードで実際に動かしながら話が進みます。この本のメインはこちらでしょう。
第9章なんかは実際にありそうなデータ処理ですので個人的には興味深く読みました。


下記にあるようなPigを使う際にポイントとなりそうなことも具体例として出てくるので良いのではないでしょうか。

  • FLATTEN
  • UDF
  • UTF-8以外のファイルを読み込む場合のやり方
  • Nested Block, COGROUPの例
  • Mapでええ感じにJOINするUSING 'replicated'
  • 制御構文を扱うためのEmbedded Pig

まあ僕自身はPig初心者ですので上記がPigを使う際の本当にポイントなのかどうかはわかりません。あしからず。


この本を読んでいて思ったのがPigはフローチャートと相性良さそうだなということ。
いまどき設計書にフローチャートかよ!ってツッコミはありそうですが、フローチャートとして書いた設計書をそのままPigのコードとしてある程度表現できるので設計書とコードのギャップが少なくなりそうだなと感じました。単純なコードなら設計書要らないかもしれないですがある程度複雑になるとドキュメンテーションも必要でしょう。


Pigでない直MapReduceだとPartitionerとかComparatorとかいわゆるShuffleに関わる部分がブラックボックスになりがちでコード読んでも理解するのが難しいですよね。。。
プログラマが書いたコードが順番に実行されるというよりフレームワークから適宜呼び出される形式なので全体としてどう動くのか理解し難い。仕様がそのままコードとして表現されない。


その点Pigだとプログラマが書いたコードが順番に実行されるという形になるのでわかりやすいしドキュメンテーションもしやすいように感じるわけですよ。
まあカジュアルHadooper、Pig初心者が感じることなので合っているかどうかはわかりませんw