Hadoop 第3版

[cover photo]
TOPICS
Database , Java
発行年月日
PRINT LENGTH
736
ISBN
978-4-87311-629-7
原書
Hadoop: The Definitive Guide, 3rd Edition
FORMAT
PDF
Ebook
5,280円
Ebookを購入する

象本の名前で親しまれる『Hadoop』の第3版の登場です。今回の改訂では、Hadoop 0.22系、2.x系の記述を大幅加筆。次世代Hadoopの特徴であるYARN(Hadoop 2.x系におけるジョブ実行フレームワーク)やMapReduce 2について詳述しました。Hadoop1.x(旧0.20)の情報もカバーしているので、これまでのバージョンを使う新旧のユーザに対応しています。第3版の日本語版付録として、Clouderaの小林大輔氏による「最新の高可用性HDFSの紹介」を掲載。Hadoopの基礎から応用までを網羅し、最新の情報をカバーした本書は、Hadoopに関心のあるすべての開発者必携の一冊です。

目次

序 文
訳者まえがき
はじめに

1章 Hadoop事始め
    1.1 データ!
    1.2 データの保管と分析
    1.3 他のシステムとの比較
        1.3.1 リレーショナルデータベース管理システム
        1.3.2 グリッドコンピューティング
        1.3.3 ボランティアコンピューティング
    1.4 Hadoopの歴史
    1.5 Apache HadoopとHadoopのエコシステム
    1.6 Hadoopのリリース
        1.6.1 本書で取り上げる内容
        1.6.2 互換性

2章 MapReduce
    2.1 気象情報データセット
        2.1.1 データフォーマット
    2.2 Unixのツールによるデータ分析
    2.3 Hadoopによるデータの分析
        2.3.1 mapとreduce
        2.3.2 Java MapReduce
    2.4 スケールアウト
        2.4.1 データフロー
        2.4.2 集約関数
        2.4.3 分散MapReduceジョブの実行
    2.5 Hadoopストリーミング
        2.5.1 Ruby
        2.5.2 Python
    2.6 Hadoop Pipes
        2.6.1 コンパイルと実行

3章 Hadoop分散ファイルシステム
    3.1 HDFSの設計
    3.2 HDFSに関する概念
        3.2.1 ブロック
        3.2.2 ネームノードとデータノード
        3.2.3 HDFSフェデレーション
        3.2.4 HDFSにおける高可用性
    3.3 コマンドラインインターフェース
        3.3.1 基本的なファイルシステムの操作
    3.4 Hadoopのファイルシステム群
        3.4.1 インターフェース
    3.5 Javaインターフェース
        3.5.1 Hadoop URLからのデータの読み出し
        3.5.2 FileSystem APIを使ったデータの読み出し
        3.5.3 データの書き込み
        3.5.4 ディレクトリ
        3.5.5 ファイルシステムへの問い合わせ
        3.5.6 データの削除
    3.6 データフロー
        3.6.1 ファイル読み込みの解剖学
        3.6.2 ファイル書き込みの解剖学
        3.6.3 一貫性モデル
    3.7 FlumeおよびSqoopによるデータの取り込み
    3.8 distcpによる並列コピー
        3.8.1 HDFSクラスタのバランス調整
    3.9 Hadoopアーカイブ
        3.9.1 Hadoopアーカイブの使用
        3.9.2 制限事項

4章 HadoopのI/O
    4.1 データの整合性
        4.1.1 HDFSにおけるデータの整合性
        4.1.2 LocalFileSystem
        4.1.3 ChecksumFileSystem
    4.2 圧縮
        4.2.1 コーデック
        4.2.2 圧縮と入力スプリット
        4.2.3 MapReduceにおける圧縮の利用
    4.3 シリアライゼーション
        4.3.1 Writableインターフェース
        4.3.2 Writableクラス
        4.3.3 カスタムWritableの実装
        4.3.4 シリアライゼーションフレームワーク
    4.4 Avro
        4.4.1 Avroのデータ型とスキーマ
        4.4.2 インメモリシリアライゼーションおよびデシリアライゼーション
        4.4.3 Avroデータファイル
        4.4.4 相互運用性
        4.4.5 スキーマリゾリューション
        4.4.6 ソート順序
        4.4.7 Avro MapReduce
        4.4.8 Avro MapReduceを使ったソート
        4.4.9 他の言語におけるAvro MapReduce
    4.5 ファイルベースのデータ構造
        4.5.1 SequenceFile
        4.5.2 MapFile

5章 MapReduceアプリケーションの開発
    5.1 設定API
        5.1.1 リソースの集約
        5.1.2 変数の展開
    5.2 開発環境のセットアップ
        5.2.1 設定の管理
        5.2.2 GenericOptionsParser、Tool、ToolRunner
    5.3 MRUnitを使ったユニットテストの作成
        5.3.1 mapper
        5.3.2 reducer
    5.4 テストデータを使ったローカルでの実行
        5.4.1 ローカルJobRunnerでのジョブの実行
        5.4.2 ドライバのテスト
    5.5 クラスタでの実行
        5.5.1 ジョブのパッケージ化
        5.5.2 ジョブの起動
        5.5.3 MapReduce Web UI
        5.5.4 結果の取得
        5.5.5 ジョブのデバッグ
        5.5.6 Hadoopのログ
        5.5.7 リモートデバッガ
    5.6 ジョブのチューニング
        5.6.1 タスクのプロファイリング
    5.7 MapReduceのワークフロー
        5.7.1 MapReduceジョブへの問題の分割
        5.7.2 JobControl
        5.7.3 Apache Oozie

6章 MapReduceの動作
    6.1 MapReduceジョブの実行の内幕
        6.1.1 クラシックMapReduce(MapReduce 1)
        6.1.2 YARN(MapReduce 2)
    6.2 障害
        6.2.1 クラシックMapReduceにおける障害
        6.2.2 YARNにおける障害
    6.3 ジョブのスケジューリング
        6.3.1 フェアスケジューラ
        6.3.2 キャパシティスケジューラ
    6.4 シャッフルとソート
        6.4.1 map側
        6.4.2 reduce側
        6.4.3 設定のチューニング
    6.5 タスクの実行
        6.5.1 タスクの実行環境
        6.5.2 投機的実行
        6.5.3 出力コミッタ
        6.5.4 タスクJVMの再利用
        6.5.5 不良レコードのスキップ

7章 MapReduceの型とフォーマット
    7.1 MapReduceの型
        7.1.1 デフォルトのMapReduceジョブ
    7.2 入力フォーマット
        7.2.1 入力スプリットとレコード
        7.2.2 テキスト入力
        7.2.3 バイナリの入力
        7.2.4 複数の入力
        7.2.5 データベースからの入力(と出力)
    7.3 出力フォーマット
        7.3.1 テキスト出力
        7.3.2 バイナリ出力
        7.3.3 複数の出力
        7.3.4 遅延出力
        7.3.5 データベース出力

8章 MapReduceの機能
    8.1 カウンター
        8.1.1 組み込みカウンター
        8.1.2 ユーザー定義のJavaカウンター
        8.1.3 ユーザー定義ストリーミングカウンター
    8.2 ソート
        8.2.1 準備
        8.2.2 部分ソート
        8.2.3 全体のソート
        8.2.4 セカンダリソート
    8.3 結合
        8.3.1 map側結合
        8.3.2 reduce側結合
    8.4 サイドデータの配布
        8.4.1 ジョブ設定の利用
        8.4.2 分散キャッシュ
    8.5 MapReduceライブラリクラス

9章 Hadoopクラスタの構築
    9.1 クラスタの仕様
        9.1.1 ネットワークトポロジ
    9.2 クラスタのセットアップとインストール
        9.2.1 Javaのインストール
        9.2.2 Hadoopユーザーの生成
        9.2.3 Hadoopのインストール
        9.2.4 インストールのテスト
    9.3 SSHの設定
    9.4 Hadoopの設定
        9.4.1 設定の管理
        9.4.2 環境設定
        9.4.3 Hadoopデーモンの重要なプロパティ
        9.4.4 Hadoopデーモンのアドレスとポート
        9.4.5 Hadoopのその他のプロパティ
        9.4.6 ユーザーアカウントの作成
    9.5 YARNの設定
        9.5.1 YARNのデーモンの重要なプロパティ
        9.5.2 YARNのデーモンのアドレスとポート
    9.6 セキュリティ
        9.6.1 KerberosとHadoop
        9.6.2 トークンの委譲
        9.6.3 セキュリティに関するその他の拡張
    9.7 Hadoopクラスタのベンチマーク
        9.7.1 Hadoopのベンチマーク
        9.7.2 ユーザーのジョブ
    9.8 クラウドにおけるHadoop
        9.8.1 Apache Whirr

10章 Hadoopの管理
    10.1 HDFS
        10.1.1 永続的データ構造
        10.1.2 セーフモード
        10.1.3 監査ログ
        10.1.4 ツール
    10.2 モニタリング
        10.2.1 ロギング
        10.2.2 メトリクス
        10.2.3 Java Management Extensions
    10.3 メンテナンス
        10.3.1 ルーチンの管理手順
        10.3.2 ノードの参加と脱退
        10.3.3 アップグレード

11章 Pig
    11.1 Pigのインストールと実行
        11.1.1 実行の種類
        11.1.2 Pigプログラムの実行
        11.1.3 Grunt
        11.1.4 Pig Latinのエディタ
    11.211.2 例
        11.2.1 サンプルの生成
    11.3 データベースとの比較
    11.4 Pig Latin
        11.4.1 構造
        11.4.2 ステートメント
        11.4.3 式
        11.4.4 型
        11.4.5 スキーマ
        11.4.6 関数
        11.4.7 マクロ
    11.5 ユーザー定義関数
        11.5.1 フィルタUDF
        11.5.2 評価UDF
        11.5.3 ロードUDF
    11.6 データ処理オペレータ
        11.6.1 データのロードとストア
        11.6.2 データのフィルタリング
        11.6.3 データのグループ化と結合
        11.6.4 データのソート
        11.6.5 データのUNIONと分割
    11.7 実践Pig
        11.7.1 並列性
        11.7.2 パラメータ置換

12章 Hive
    12.1 Hiveのインストール
        12.1.1 Hiveシェル
    12.2 例
    12.3 Hiveの実行
        12.3.1 Hiveの設定
        12.3.2 Hiveのサービス
        12.3.3 メタストア
    12.4 伝統的なデータベースとの比較
        12.4.1 読み込み時のスキーマ適用と書き込み時のスキーマ適用の比較
        12.4.2 更新、トランザクション、インデックス
    12.5 HiveQL
        12.5.1 データ型
        12.5.2 演算子と関数
    12.6 テーブル
        12.6.1 管理対象テーブルと外部テーブル
        12.6.2 パーティションとバケット
        12.6.3 ストレージフォーマット
        12.6.4 データのインポート
        12.6.5 テーブルの修正
        12.6.6 テーブルのドロップ
    12.7 データのクエリ
        12.7.1 ソートと集計
        12.7.2 MapReduceのスクリプト
        12.7.3 結合
        12.7.4 サブクエリ
        12.7.5 ビュー
    12.8 ユーザー定義関数
        12.8.1 UDFの書き方
        12.8.2 UDAFの書き方

13章 HBase
    13.1 HBaseの基礎
        13.1.1 背景
    13.2 概念
        13.2.1 データモデルに関する弾丸ツアー
        13.2.2 実装
    13.3 インストール
        13.3.1 試運転
    13.4 クライアント
        13.4.1 Java
        13.4.2 Avro、REST、Thrift
    13.5 例
        13.5.1 スキーマ
        13.5.2 データのロード
        13.5.3 Webクエリ
    13.6 HBase対RDBMS
        13.6.1 サービスの成功事例
        13.6.2 HBase
        13.6.3 ユースケース:streamy.comにおけるHBase
    13.7 実践
        13.7.1 バージョン
        13.7.2 HDFS
        13.7.3 UI
        13.7.4 メトリクス
        13.7.5 スキーマの設計
        13.7.6 カウンター
        13.7.7 バルクロード

14章 ZooKeeper
    14.1 ZooKeeperのインストールと実行
    14.2 例
        14.2.1 ZooKeeperにおけるグループメンバーシップ
        14.2.2 グループの作成
        14.2.3 グループへの追加
        14.2.4 グループ内のメンバーのリストアップ
        14.2.5 グループの削除
    14.3 ZooKeeperサービス
        14.3.1 データモデル
        14.3.2 操作
        14.3.3 実装
        14.3.4 一貫性
        14.3.5 セッション
        14.3.6 状態
    14.4 ZooKeeperによるアプリケーションの構築
        14.4.1 設定サービス
        14.4.2 耐久性のあるZooKeeperアプリケーション
        14.4.3 ロックサービス
        14.4.4 さらなる分散データ構造とプロトコル
    14.5 ZooKeeperの実用化
        14.5.1 耐久性とパフォーマンス
        14.5.2 設定

15章 Sqoop
    15.1 Sqoopの入手
    15.2 Sqoopのコネクタ群
    15.3 インポートのサンプル
        15.3.1 テキストおよびバイナリファイルフォーマット
    15.4 コードの生成
        15.4.1 その他のシリアライゼーションシステム
    15.5 インポートの詳細
        15.5.1 インポートの制御
        15.5.2 インポートと一貫性
        15.5.3 ダイレクトモードでのインポート
    15.6 インポートしたデータの処理
        15.6.1 インポートされたデータとHive
    15.7 ラージオブジェクトのインポート
    15.8 エクスポートの実行
    15.9 エクスポートの詳細
        15.9.1 エクスポートとトランザクション性
        15.9.2 エクスポートとSequenceFile

16章 ケーススタディ
    16.1 Last.fmにおけるHadoopの利用
        16.1.1 Last.fm:ソーシャルミュージック革命
        16.1.2 Last.fmにおけるHadoop
        16.1.3 Hadoopによるチャートの生成
        16.1.4 Track Statisticsプログラム
        16.1.5 まとめ
    16.2 FacebookにおけるHadoopとHive
        16.2.1 FaceBookにおけるHadoop
        16.2.2 仮想的なユースケースの研究
        16.2.3 Hive
        16.2.4 課題と今後の活動
    16.3 Nutch検索エンジン
        16.3.1 データ構造
        16.3.2 NutchにおけるHadoopデータ処理の例
        16.3.3 まとめ
    16.4 Rackspaceにおけるログの処理
        16.4.1 要件/課題
        16.4.2 沿革
        16.4.3 Hadoopの選択
        16.4.4 収集と蓄積
        16.4.5 MapReduceによるログの処理
    16.5 Cascading
        16.5.1 フィールド、タプル、パイプ
        16.5.2 操作
        16.5.3 Tap、Scheme、Flow
        16.5.4 Cascadingの利用
        16.5.5 柔軟性
        16.5.6 ShareThisにおけるHadoopとCascading
        16.5.7 まとめ
    16.6 Apache Hadoopでのテラバイトソート
    16.7 PigとWukongによる、数十億の端点を持つネットワークグラフの解析
        16.7.1 コミュニティの計測
        16.7.2 誰もが私の噂をしてる:Twitterのリプライグラフ
        16.7.3 対称リンク
        16.7.4 コミュニティの抽出

付録A Apache Hadoopのインストール
    A.1 必要事項
    A.2 インストール
    A.3 設定
        A.3.1 スタンドアロンモード
        A.3.2 擬似分散モード
        A.3.3 完全分散モード

付録B Cloudera's Distribution including Apache Hadoop(CDH)について

付録C NCDC気象情報データの準備

付録D NTTデータの実証事業におけるHadoop活用のポイント
    D.1 Hadoopクラスタの構築
    D.2 Hadoopクラスタの可視化
    D.3 Hadoopクラスタの信頼性向上
    D.4 MapReduceアプリケーションのためのチューニング
    D.5 まとめ

付録E 最新の高可用性HDFSの紹介
    E.1 開発背景
    E.2 Quorum Journal Managerベースの高可用性HDFS
    E.3 エポック番号によるフェンシング

索 引