「象本」の名前で親しまれる『Hadoop』の改訂版です。
Hadoopの基礎から応用までを包括的に解説する初版の充実をそのままに、Pig、HBase、Hive、Sqoop、Avroなどサブプロジェクトやセキュリティについても大幅に加筆、より実務に対応できる内容になりました。Hadoop 0.1系に加え、0.2系に関する情報も併記。日本語版では「NTTデータの実証事業におけるHadoop活用のポイント」を付録として掲載しています。Hadoopの全体像を網羅し、かつ実践的なトピックを盛り込んだ本書は、Hadoopに関心あるすべての人に必携の一冊です。
Hadoop 第2版
Tom White 著、玉川 竜司、兼田 聖士 訳
![[cover photo]](https://www.oreilly.co.jp/books/images/picture_large978-4-87311-503-0.jpeg)
- TOPICS
- Programming , Database
- 発行年月日
- 2011年07月
- PRINT LENGTH
- 672
- ISBN
- 978-4-87311-503-0
- 原書
- Hadoop: The Definitive Guide 2nd Edition
- FORMAT
目次
序文 訳者まえがき はじめに 1章 Hadoop事始め 1.1 データ! 1.2 データの保管と分析 1.3 他のシステムとの比較 1.3.1 RDBMS 1.3.2 グリッドコンピューティング 1.3.3 ボランティアコンピューティング 1.4 Hadoopの歴史 1.5 Apache HadoopとHadoopのエコシステム 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.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 distcpによる並列コピー 3.7.1 HDFSクラスタのバランス調整 3.8 Hadoopアーカイブ 3.8.1 Hadoopアーカイブの使用 3.8.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.3.5 Avro 4.4 ファイルベースのデータ構造 4.4.1 SequenceFile 4.4.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 ユニットテストの作成 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 リモートデバッガの利用 5.6 ジョブのチューニング 5.6.1 タスクのプロファイリング 5.7 MapReduceのワークフロー 5.7.1 MapReduceジョブへの問題の分割 5.7.2 依存ジョブの実行 6章 MapReduceの動作 6.1 MapReduceジョブの実行の内幕 6.1.1 ジョブの投入 6.1.2 ジョブの初期化 6.1.3 タスクの割り当て 6.1.4 タスクの実行 6.1.5 進行状況とステータスの更新 6.1.6 ジョブの完了 6.2 障害 6.2.1 タスクの障害 6.2.2 tasktrackerの障害 6.2.3 jobtrackerの障害 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 タスクJVMの再利用 6.5.3 不良レコードのスキップ 6.5.4 タスクの実行環境 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 セキュリティ 9.5.1 KerberosとHadoop 9.5.2 トークンの委譲 9.5.3 セキュリティに関するその他の拡張 9.6 Hadoopクラスタのベンチマーク 9.6.1 Hadoopのベンチマーク 9.6.2 ユーザーのジョブ 9.7 クラウドにおけるHadoop 9.7.1 Amazon EC2でのHadoop 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.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.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 インポートのサンプル 15.3 コードの生成 15.3.1 その他のシリアライゼーションシステム 15.4 データベースのインポートの詳細 15.4.1 インポートの制御 15.4.2 インポートと一貫性 15.4.3 ダイレクトモードでのインポート 15.5 インポートしたデータの処理 15.5.1 インポートされたデータとHive 15.6 ラージオブジェクトのインポート 15.7 エクスポートの実行 15.8 エクスポートの詳細 15.8.1 エクスポートとトランザクション性 15.8.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 イントロダクション 16.2.2 FaceBookにおけるHadoop 16.2.3 仮想的なユースケースの研究 16.2.4 Hive 16.2.5 課題と今後の活動 16.3 Nutch検索エンジン 16.3.1 背景 16.3.2 データ構造 16.3.3 NutchにおけるHadoopデータ処理の例 16.3.4 まとめ 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のDistribution including Apache Hadoopについて 付録C NCDC気象情報データの準備 付録D NTTデータの実証事業におけるHadoop活用のポイント D.1 Hadoopクラスタの構築 D.2 Hadoopクラスタの可視化 D.3 Hadoopクラスタの信頼性向上 D.4 MapReduceアプリケーションのためのチューニング D.5 まとめ 索引 コラム目次 「Hadoop」という名前の由来 Yahoo!でのHadoop なぜHDFSのブロックはそれほど大きいのか? HDFSにおけるファイルパーミッション ネットワークトポロジとHadoop レプリカの配置 どの圧縮フォーマットを使えばよいのか? なぜJava Object Serializationを使わないのか? ユーザー識別情報の設定 設定できるプロパティ ジョブ、タスク、タスク試行ID ジョブヒストリ Hadoopのユーザーログ MapReduceで進行状況を知らせるのは? reducer数の選択 入力スプリットとHDFSブロックの関係 MultipleOutputFormatとMultipleOutputsとはどう違う? ソート順序の制御 RAIDを使わないのはなぜ? Kerberos認証をサポートしているのは、どのバージョンのHadoopか? メトリクスとカウンターの違いは? バージョン間の互換性 マルチクエリの実行 HiveはどのバージョンのHadoopと使えるのか? Hive Webインターフェース(HWI) 複数データベース/スキーマのサポート スキャナ 同期と非同期、どちらのAPIを使うべき? ZooKeeperはPaxosを使っているのか?