はじめてのHadoop
~分散データ処理の基本から実践まで

[表紙]はじめてのHadoop ~分散データ処理の基本から実践まで

A5判/608ページ

定価(本体3,800円+税)

ISBN 978-4-7741-5389-6

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

「いままで数千時間かっていた処理が,100分の1以下の時間で終わるようになった」

など,大量/多種のデータを効率よく処理できる手段として注目されているHadoopの仕組みと利用法をやさしく解説。最も現場で利用されているディストリビューション・CDHのバージョン3と,最新のHadoop2.0をベースにしたCDH4に対応,ポイントや注意点を丁寧にフォローしています。

序文はHadoopの生みの親,Doug Cutting氏。
これからHadoopを学びたい方に最適の1冊です。

こんな方におすすめ

  • 大規模データ処理に興味のある方

著者の一言

本書を手にされたあなたは「ビッグデータ」というフレーズをどのように捉え,解釈しているでしょうか。
企業システムで蓄積されるマスターデータやトランザクションデータ,逐次通信機器/スマートデバイス/スマートメータなどの高度化による各種ログ/センサーデータなどにより,企業内にはさまざまなデータが溢れ続けています。また,企業の外では複数のソーシャルネットワークなどからも大量のデータが生成され続けています。そのようななか,企業内に蓄積され続けるデータの山を分析し,ビジネスに活用して新しい収益に変える動きがあります。
膨大かつさまざまな種類のデータの山を積み上げているだけでは,新たな発見には至りません。しかし,これらの企業内/企業外の情報を結合して多角的に分析することで新しい気づきを求め,それをビジネスドライバーとして収益につなげる動きが一般企業でも活発化しつつあります。この多種多様なデータソースを総称して「ビッグデータ」と呼んでいます。
そして,これら「ビッグデータ」の分析の手段として注目されているソフトウェアがApache Hadoop(以降 Hadoop)です。Hadoopは,これまでのソフトウェアでは容易に実現できなかった数ペタバイト(約千兆バイト)にもおよぶ大量データ処理を,「コモディティマシン」と呼ばれる一般的なハードウェアをもちい,複数のマシンを並列に並べてクラスタを構成し,データを分散配置し,処理も分散することで実現できるようになりました。これまでの方法で処理すると,何十時間/何日もかかっていた大量データを,リーズナブルな時間で扱えることを意味しています。このようなこれまで実現が難しかった,大量データ処理技術をコアにして,これまでのビジネスに新しいイノベーションを起こすことができるようになります。
そのような力を秘めたHadoopですが,リレーショナルデータベースシステムを中心したトランザクションアプリケーションとは考え方やしくみが大きく異なります。とくにMapReduceアプリケーションで利用するデータ形式がどのようなものかを学ばなければ,Hadoopが実現できることの真価は理解できません。しかしこれは,リレーショナルデータベースをHadoopが置き換えることではありませんので,注意してください。
そこで本書では,Hadoopの基本をしっかり理解して習得していただけるように,インストールから活用まで,ステップバイステップでHadoopを動作させながら確認していく構成を採っています。ITアーキテクト/プログラマ/システムエンジニア,そしてユーザー企業の情報システム部の方々に読んでいただいてもわかりやすい解説を心がけました。
本書が最先端の分散コンピューティングソフトウェアであるHadoopの正しい理解とともに,ビジネスの変革にもお役に立てることを祈っています。

目次

第1章 Hadoopを知る

1-1 Apache Hadoopとは

  • Hadoopのルーツは検索エンジンにあり
  • Hadoopの誕生

1-2 なぜHadoopが必要となるのか

  • トランザクションシステムの三種の神器とは
  • 処理の分散とデータの集中
  • 爆発的に増えるデータをいかに活用するか

1-3 アーキテクチャを理解する

  • Hadoopのマシン構成
  • データと処理,2つの分散
  • よくある誤解

1-4 さまざま視点から導入を検討する

  • Hadoopで可能性が広がる分野とは
  • ビッグデータ関連技術で役立てるには
  • 立場ごとにどのようにHadoopに取り組むか

1-5 Hadoopエコシステムを理解する

  • 中核となる3つのサブプロジェクト
  • 8つの関連プロジェクト
  • Incubatorに属するプロジェクトなど

第2章 ディストリビューションとインストール

2-1 Hadoopを利用するにあたって

  • トップページにアクセスする
  • 安定バージョンとは
  • ドキュメントサイトにアク セスする
  • Apache Hadoopをダウンロードする

2-2 ディストリビューションを確認する

  • どこからはじめればよいか
  • ディストリビューションを選択するメリットとデメリット
  • 3つのディストリビューションとは
  • CDHのバージョンを理解する
  • CDHのコンポーネントを確認する

2-3 Hadoopを使う準備をする

  • 本書での利用環境を確認する
  • 本書で利用するサンプルデータとアプリケーション
  • オペレーティングシステムを選択する
  • Java仮想マシンをインストールする
  • CDHをインストールする4つの方法
  • RPM互換パッケージ管理システムでインストールする
  • パッケージを利用してリポジトリをインストールする
  • リポジトリファイルを手動でコピーする
  • ローカルリポジトリを作成する(サーバ設定)
  • ローカルリポジトリを作成する(クライアント設定)

2-4 Hadoopをインストールする

  • インストールパッケージの一覧
  • インストール前に確認すること
  • パッケージ管理システムでのインストールにおける注意点
  • 関連コンポーネントのパッケージ一覧
  • Hadoop本体のインストール

2-5 基本設定をする

  • 3種類の動作モードを理解する
  • 設定ファイルの扱いを知る
  • デーモンの種類と役割
  • Hadoopを操作するコマンド

2-6 スタンドアローンモードで動作させる

  • 実行方法
  • 再実行する際の注意

2-7 擬似分散モードでMRv1を起動する(CDH3)

  • インストール
  • デーモンを起動
  • Grepサンプルアプリケーションを実行する
  • デーモンを停止する

2-8 擬似分散モードでYARNを起動する(CDH4)

  • インストール
  • HDFSのフォーマットと起動
  • YARNの起動と準備
  • Grepサンプルアプリケーションを実行する
  • デーモンを停止する

2-9 Webユーザーインタフェースを利用する

  • Webユーザーインタフェースの種類
  • ネームノード(HDFS)
  • ジョブトラッカー(MapReduce)
  • リソースマネージャ(YARN)
  • クラスタ
  • ノードマネージャ
  • アプリケーション

第3章 アーキテクチャを理解する

3-1 クラスタのしくみ

  • なぜクラスタが必要になるのか
  • マスターノードとスレーブノード
  • デーモンプロセスの3つの分類

3-2 HDFSのしくみ

  • ネームノードとデータノードから構成される
  • HDFSでデータが書き込まれる流れ
  • データロストを回避するしくみ
  • ネームノードの挙動を知る
  • セカンダリネームノードの役割

3-3 Hadoop2で追加されたHDFSの機能拡張

  • HDFSフェデレイション
  • 高可用性HDFS

3-4 MapReduce 1のしくみ

  • ジョブトラッカーとタスクトラッカーはどのように連携するか
  • ジョブが実行されるしくみ
  • タスクが実行されるしくみ

3-5 次世代MapReduce「YARN」とは

  • MapReduce 1とYARNを比較する
  • 今後YARNに対応されるアプリケーション
  • YARNの概要
  • リソースマネージャの役割を把握する

第4章 ファイルシステムを操作する

4-1 HDFSとは

  • そもそもファイルシステムとは
  • HDFSのブロック配置イメージ
  • HDFSのメタデータ
  • メタデータを管理する「編集ログ」
  • HDFS上でのファイル書き込みや読み込み

4-2 HDFSを操作する

  • HDFSのおもなコマンドオプション
  • ディレクトリを作成する
  • ディレクトリ/ファイル一覧を表示する
  • ローカルファイルシステムからHDFSへファイルをコピーする
  • HDFSからローカルファイルシステムへファイルをコピーする
  • ファイルを削除する
  • ディレクトリを削除する
  • HDFS上でファイルやディレクトリをコピーする
  • HDFS上でディレクトリやファイルを移動する
  • ディレクトリやファイルのパーミッションを変更する

4-3 ファイルパーミッションを設定する

  • パーミッションのチェックを無効にする
  • パーミッションをチェックする場合としない場合の動作の違い

4-4 HDFSをメンテナンスする

  • 使用率を確認する
  • ファイルシステムをチェックする
  • メタデータをバックアップする
  • メタデータをリストアする

第5章ノンプログラミングでデータを操作する

5-1 Hiveを使ってデータを操作する

  • Hiveとは
  • Hiveはどのように実行されるのか
  • Hiveのアーキテクチャ
  • Hiveを使用するための準備
  • HiveQLとSQLを比較する
  • HiveQLでサポートしているデータ型
  • Hiveを操作する準備
  • データベースを作成する
  • テーブルを作成する
  • データをインポートする
  • データを検索する
  • テーブルを結合する
  • データをエクスポートする
  • その他Hiveに関する補足事項
  • JDBCからHiveを使用する

5-2 Pigを使ってデータを操作する

  • Pigとは
  • Pigの処理イメージ
  • Pigを利用するための準備
  • Pigを起動する
  • Pig Latinで使う用語
  • Pig Latinのデータ型
  • Pigの演算子
  • データを読み込む
  • ロードされたデータを確認する
  • データを検索する
  • 商品ごとの売上件数をカウントする
  • データを結合する
  • データをエクスポートする
  • ユーザー関数(UDF)を作成する

第6章 プログラミングでMapReduceを使う

6-1 MapReduceの基礎を知る

  • MapReduceとは
  • MapとReduceの役割
  • 分散処理の流れ
  • MapReduceジョブに最低限実装すべきもの
  • MapReduceジョブにおけるデータフロー
  • キーと値のデータ型について

6-2 MapReduce ジョブの実装を理解する

  • それぞれのAPIの特色
  • 実装するメソッドの種類
  • 旧APIと新APIそれぞれでWordCountの実装を見る

6-3 コンパイルから実行までの手順を確認する

  • MapReduce実行のための準備
  • ソースコードのコンパイルから実行結果の確認まで
  • MapReduceジョブ実行時の各デーモンの動作について
  • 圧縮ファイルを利用する
  • MapReduceジョブで集計する
  • 1つのジョブでフォーマットの異なる2つの入力データを扱う
  • 分散キャッシュを利用する
  • サンプルアプリケーションのソースコード
  • サンプルの実行手順
  • 結合の種類と注意点
  • MapReduceジョブのログを出力する
  • 例外処理の注意点
  • MapReduceジョブをチューニングする
  • データ数に偏りが生じる場合の対処法(Partitioner)

6-4 テストの考え方

  • MRUnitを使うための準備
  • Mapperをテストする
  • Reducerをテストする
  • ジョブとしてテストする
  • コンパイルと実行

6-5 MapReduceジョブを操作する

  • ジョブが終了するまで待つ場合
  • ジョブの終了を待たない場合
  • 実行中のジョブを確認する
  • 実行中のジョブを停止する

6-6 Hadoop Streamingを利用する

  • Ruby版WordCountアプリケーション
  • サンプルの実行方法

第7章 ランダムアクセスできるデータベースとして使う

7-1 カラム指向データベース「HBase」を活用する

  • データベースの今と昔
  • 分散データベースとCAP定理
  • HBaseの特徴とは
  • HBaseとRDBMSを比較する

7-2 HBaseのアーキテクチャとは

  • データモデルを理解する
  • クラスタのアーキテクチャを把握する
  • データフローを追う
  • HBaseのデザイン

7-3 HBaseを利用するには

  • HBaseをインストールする
  • 追加設定のポイント
  • HBaseを起動する
  • HBaseのWeb UIを利用する

7-4 HBaseシェルとは

  • HBaseシェルでできること
  • HBaseシェルの起動と終了
  • テーブルの作成と確認
  • データにアクセスする
  • テーブルを変更/削除する
  • シェルスクリプティングを活用する

7-5 HBase APIを活用する

  • 設定ファイルを読み込む
  • テーブルを作成する
  • データを挿入する
  • データを取得する(get)
  • データを取得する(scan)
  • Filterで特定のデータに絞り込む

7-6 ブログアプリケーションを作成する

  • テーブルを設計する
  • JSPを実装する
  • デプロイする

第8章 クラスタを構成する

8-1 クラスタの構築を検討する

  • 本章での利用環境について
  • 構成を検討する
  • サーバの配置を決定する
  • デーモンを配置する
  • ハードウェアの選定とOSのインストール

8-2 CDH3でクラスタを構築する

  • 設定ファイルについて
  • パラメータを設定する
  • 構築作業の手順
  • リポジトリを準備する(オプション)
  • 共通設定をする
  • CDH3をインストールする
  • クラスタを設定する
  • CDHの起動と停止
  • クライアントノードとは
  • スレーブノードの追加と削除

8-3 CDH4でクラスタを構築する

  • 設定ファイルについて
  • パラメータを設定する
  • 構築の作業手順
  • CDH4をインストールする
  • クラスタを設定する
  • CDH4の起動と停止
  • スレーブノードの追加と削除

8-4 CDH4で高可用性HDFSを構築する

  • 構築を検討する
  • マスターノードを追加する
  • HA HDFSを設定する
  • 起動と停止

付録

A-1 Sqoopを利用する

  • Sqoopとは
  • Sqoopをインストールする
  • Sqoopをもちいてデータを転送する
  • より高度な機能と注意点

A-2 参考文献

今後の学習のポイント

  • MapReduceプログラミングの応用
  • Hadoopをベースにした製品の活用
  • Hadoopの管理と監視
  • Hadoopと他システムとのインテグレーション

著者プロフィール

田澤孝之(たざわたかゆき)

中学生のとき,父の購入したNEC PC-9801Eを使い始め,BASIC,FORTRAN77でプログラミングを学ぶ。
1989年日立製作所入社。アセンブラ,Pascalを用いた国産分散OS開発が最初の仕事。1998年からはミドルウェアを中心に外資製品ベンダでおもにプリセールス業務に従事。BEAでTuxedoとWebLogicとともに成長し,fastでサーチを学ぶ。Red HatではJBoss事業の立ち上げと拡大に成功。その後Cloudera日本事業の立ち上げに貢献。現在は,日本オラクルに所属しエンタープライズアーキテクト本部 担当ディレクターとして,EAを軸にコンサルテーションを実施している。
趣味はツーリングと飼い猫2匹との会話。尊敬する人物は矢沢 永吉,本田 宗一郎,父。著書に『EJB 2.0徹底攻略』(技術評論社),『JSP標準タグライブラリ』(同),『エンタープライズサーチ 技術と導入』(アスキー・メディアワークス)などがある。


横井浩(よこいひろし)

NTTソフトウェア株式会社 技術開発センターに所属。
学生時代は画像系の研究室に所属。透過型HMD(ヘッドマウントディスプレイ)とGPSとノートPCを片手に,AR(のようなもの)をテーマとする研究に従事(今ならスマートフォンでできてしまいますが……)
2003年,新卒としてNTTソフトウェアに入社。入社時から,JavaEEやJavaMEなど,Javaをメインとする開発に携わっていた。2年ほど前,開発でHadoopを使うことになり,象本とともに深夜まで格闘する日々を経験。それがきっかけで,Hadoopのことをより知りたいと思うようになり,自己研鑽の一環として,書籍の執筆に参加することとなった。
ここ1,2年,カンファレンスなどで英語のセッションに参加するたびに,自分の英語のできなさに愕然とし,どうしたらいいものかと思いつつ,今日に至る。趣味は子供と遊ぶこと。


松井一比良(まついかずひら)

NTT ソフトウェア株式会社 メディア・ソリューション事業部に所属。
高校時代から「将来の夢はハッカーになること」という目標を持ち,ITの世界へ足を踏み入れる。
2001年にNTTソフトウェアに入社。入社以来,ECサイト,モバイルサイト,業務系Webアプリケーションの設計/開発に従事。Javaのフレームワークを用いた開発や,パッケージのカスタマイズなどを実施してきた。2010年からHadoopを使ったシステム開発に従事。Hadoopの魅力に惹かれ,カンファレンスに参加するなど,広く情報収集に努めている。また,Iaasを利用した開発を経験したことでインフラとしての便利さに惹かれ,個人的にプライベートクラウドを構築するなどしている。
趣味は愛犬(コーギー:アル)とディスクドッグをすること。「ディスクを追い抜く」という特技を身につけ,大会ではいつも惨敗。