大きい書店は、早いですね。
![Hadoop徹底入門 [大型本] / 太田 一樹, 下垣 徹, 山下 真一, 猿田 浩輔, 藤井 達朗 (著); 濱野 賢一朗 (監修); 翔泳社 (刊) Hadoop徹底入門 [大型本] / 太田 一樹, 下垣 徹, 山下 真一, 猿田 浩輔, 藤井 達朗 (著); 濱野 賢一朗 (監修); 翔泳社 (刊)](https://images-fe.ssl-images-amazon.com/images/I/616Bc1hs-IL._SL160_.jpg)
はじめに
1 Hadoop ってなんだろう?
1.1 Hadoop とは
1.2 Hadoop の概要
1.2.1 Hadoopって何?
1.2.2 用途
1.2.3 Hadoopの誕生
1.2.4 大規模なデータ処理における課題と対応
1.3 Hadoop の適用領域
1.3.1 万能型のプロダクトではない
1.3.2 DBMS とHadoopの比較
1.3.3 RDBMS とHadoopの連携
1.4 Hadoop の構成と処理概要
1.4.1 ApacheのHadoopプロジェクト
1.4.2 サーバー構成
1.4.3 HDFS:Hadoop分散ファイルシステム
1.4.4 Hadoop MapReduceフレームワーク
1.5 Hadoop の適用事例
1.5.1 Hadoopで変わるシチュエーション
1.5.2 Hadoopアプリケーションの利用事例
2 Hadoop の導入
2.1 Hadoop インストールの準備
2.1.1 Hadoopの動作モード
2.1.2 利用するHadoopのパッケージ
2.1.3 インストール前に用意するもの
2.2 コミュニティ版Hadoop のインストール
2.2.1 パッケージの入手
2.2.2 インストール手順
2.3 コミュニティ版Hadoop の起動と停止
2.4 MapReduce 実行による動作確認
2.4.1 サンプルMapReduceアプリケーション
2.4.2 ローカルモードでの実行
2.4.3 擬似分散/完全分散モードでの実行
2.5 Cloudera’s Distribution for Hadoop(CDH)の導入
2.5.1 Cloudera 社とCDH
2.5.2 CDH を利用したrpmのインストール
2.5.3 インストール先の確認
2.5.4 完全分散モードでのインストール
3 Hadoop 分散ファイルシステムHDFS
3.1 Hadoop におけるファイルシステム
3.2 HDFS の仕組み
3.2.1 HDFS のアーキテクチャ
3.2.2 HDFS の利点
3.2.3 ブロックとメタデータ
3.3 HDFS のオペレーションョン
3.3.1 ディレクトリ構成と設定ファイル
3.3.2 ファイル/ディレクトリのパーミッション
3.3.3 起動と停止
3.4 ファイル操作
3.4.1 hdfs コマンド
3.4.2 dfs サブコマンド
3.5 ログ管理
3.5.1 ログの種類
3.5.2 ログレベルの動的な変更
3.5.3 状態確認とメンテナンス
3.6 WebUI による管理
3.7 ラックアウェアネスの設定方法
3.7.1 クラスタ構成の認識
3.7.2 スクリプトを記述する
4 Hadoop MapReduce フレームワーク
4.1 MapReduce フレームワークの基礎知識
4.1.1 Map 処理とReduce 処理
4.1.2 ごく単純なMapreduce
4.1.3 分散して処理する場合
4.2 MapReduce フレームワークの構成
4.2.1 MapReduceとHDFS
4.2.2 MapReduceの特徴
4.3 JobTracker の役割
4.3.1 機能
4.3.2 3 つの動作モード
4.3.3 TaskTracker への処理割り当て
4.3.4 MapReduceジョブ設定の確認
4.4 TaskTracker の役割
4.4.1 機能
4.5 MapReduce フレームワークの連携動作/監視
4.5.1 JobClient の役割
4.5.2 死活監視とハートビート通信
4.5.3 ジョブの優先度設定とスケジューラ
4.6 MapReduce フレームワークのオペレーション
4.6.1 分散環境での起動
4.6.2 最低限必要な設定
4.6.3 設定ファイルと起動スクリプト
4.6.4 JobTracker の設定
4.6.5 ジョブとタスク
4.6.6 TaskTracker の脱退判断
4.6.7 TaskTracker の設定
4.6.8 MapReduceフレームワークの起動と停止
4.7 コマンドラインベースのMapReduce 管理
4.7.1 MapReduceジョブの管理
4.7.2 MapReduce管理者用コマンド
4.7.3 TaskTracker の追加
4.8 WebUI による管理
4.8.1 MapReduceジョブ可視化
5 MapReduce プログラミング入門
5.1 MapReduce フレームワーク
5.2 Java によるMapReduce プログラムの作成方法
5.2.1 MapReduceプログラムで記述する内容
5.2.2 MapReduceプログラムの入力と出力
5.2.3 WordCount アプリケーションの作成
5.3 ワードカウントサンプルアプリケーション
5.3.1 プログラムの作成/コンパイル/実行
5.3.2 WordCount.java 解説
5.4 MapReduce プログラム実行全体の流れ
5.4.1 InputSplits:入力データの分割単位
5.4.2 InputFormat:入力データの分割
5.4.3 Mapper:map 関数の実行
5.4.4 Partitioner:中間データの行き先を決定
5.4.5 Reducer:reduce関数の実行
5.4.6 OuputFormat
5.5 Hadoop I/O API
5.5.1 シリアライズAPI(Writable)
5.5.2 ファイル構造API(SequenceFile)
5.6 Hadoop MapReduce フレームワークAPI
5.6.1 設定API(Configuration)
5.6.2 Mapper/Reducer
5.6.3 入力フォーマット(InputFormat)
5.6.4 出力フォーマット(OutputFormat)
5.6.5 パーティショナー(Partitioner)
5.6.6 カウンター(Counter)
5.6.7 副次データの配布(DistributedCache)
5.7 MapReduce プログラムのテスト/デバッグ手法
5.7.1 MapReduceの作法に合わせた設計/記述
5.7.2 MapReduceプログラムのUnit テスト
5.7.3 MapReduceプログラムの動作環境設定
5.7.4 MapReduceプログラムのデバッグ技法
6 SQL 的インターフェイスHive
6.1 Hive 概略
6.1.1 MapReduceの容易な活用
6.1.2 Hive とは
6.2 Hive とHadoop
6.2.1 Hive とRDBMS の違い
6.2.2 テーブルの格納方式
6.2.3 MapReduceとHive
6.3 HiveQL
6.3.1 DDL
6.3.2 データの格納
6.3.3 SELECT 文
6.3.4 コマンドライン/シェルからの実行
6.3.5 EXPLAIN 文
6.3.6 ユーザー定義関数
6.4 インストール
6.4.1 Hive の導入に必要なもの
6.4.2 インストール手順
6.4.3 Hive 動作確認
6.5 Hive の設定
6.5.1 metastore 管理設定
6.5.2 データ保持方法
6.5.3 ログの確認
6.5.4 Hive でのチューニング
7 環境構築の効率化
7.1 Hadoop 環境の効率的な構築
7.1.1 Hadoop環境の自動構築の準備
7.2 kickstart によるHadoop 環境構築
7.2.1 PXE ブート
7.2.2 kickstart
7.2.3 サーバーの設定と資材の配置
7.2.4 PXE ブート関連の設定ファイルの配置
7.2.5 kickstart の設定ファイルの配置
7.2.6 OS の自動インストール
7.3 Puppet によるHadoop 環境設定
7.3.1 Puppet
7.3.2 マニフェスト
7.3.3 Puppet マスターのインストール
7.3.4 Parallel SSH のインストール
8 運用監視とシステムの可視化
8.1 Hadoop クラスタの運用監視
8.2 Hadoop で実現できる監視
8.2.1 Hadoopのログ
8.2.2 HadoopのWebUI
8.3 Ganglia によるHadoop 環境の可視化
8.3.1 Ganglia とは
8.3.2 Ganglia によるHadoopクラスタの可視化
9 可用性の向上
9.1 クラスタシステムの可用性
9.2 スレーブノードの故障による影響
9.2.1 DataNode の故障
9.2.2 TaskTracker の故障
9.3 マスターノードの故障による影響
9.3.1 NameNode の故障
9.3.2 JobTracker の故障
9.4 HA クラスタによるマスターノードの冗長化
9.4.1 Heartbeat とDRBD によるHA クラスタ
9.4.2 DRBD のインストール/設定
9.4.3 Heartbeat のインストール/設定
9.4.4 HA クラスタの挙動確認
9.5 HDFS メタデータのチェックポイントとバックアップ
9.5.1 CheckpointNode
9.5.2 BackupNode
10 性能向上のためのチューニング
10.1 Map 処理とReduce 処理に関するチューニング
10.1.1 アプリケーションのチューニングポイント
10.2 MapReduce フレームワークのチューニング
10.2.1 MapReduceジョブの動作に影響するHadoopの設定
10.2.2 Map 処理でのフレームワークのチューニング
10.2.3 Reduce 処理でのフレームワークのチューニング
10.3 その他チューニング
10.3.1 Java VM チューニング
10.3.2 OS チューニング
11 Hadoop に関連するプロダクト
11.1 分散型データベースHBase
11.1.1 HBase とは?
11.1.2 データモデル
11.1.3 アーキテクチャ
11.1.4 インストール方法
11.1.5 HBase Shell
11.1.6 MapReduceジョブからの使用
11.1.7 HBase のテーブル設計
11.2 Pig
11.2.1 Pig とは
11.2.2 Pig のインストール
11.2.3 Pig で扱うデータ型
11.2.4 Pig の処理でできること
11.2.5 Pig のコマンド操作
11.2.6 Pig で使用できるUDF
11.2.7 Pig を使用する場合に確認すること
11.3 Thrift
11.3.1 なぜThrift が必要か?
11.3.2 Thrift のサーバー/クライアント実装手順
11.3.3 Thrift を用いたHDFS へのアクセス
索引
執筆者プロフィール
![Hadoop [大型本] / Tom White (著); 玉川 竜司, 兼田 聖士 (翻訳); オライリージャパン (刊) Hadoop [大型本] / Tom White (著); 玉川 竜司, 兼田 聖士 (翻訳); オライリージャパン (刊)](https://images-fe.ssl-images-amazon.com/images/I/51ecKX5HnQL._SL160_.jpg)
序文
訳者まえがき
はじめに
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プロジェクト
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.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.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.5 インストールの後処理
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章 HBase
12.1 Hbaseの基礎
12.1.1 背景
12.2 概念
12.2.1 データモデルに関する弾丸ツアー
12.2.2 実装
12.3 インストール
12.3.1 試運転
12.4 クライアント
12.4.1 Java
12.4.2 RESTとThrift
12.5 例
12.5.1 スキーマ
12.5.2 データのロード
12.5.3 Webクエリ
12.6 HBase対RDBMS
12.6.1 サービスの成功事例
12.6.2 HBase
12.6.3 ユースケース:streamy.comにおけるHBase
12.7 実践
12.7.1 バージョン
12.7.2 愛と憎しみ:HBaseとHDFS
12.7.3 UI
12.7.4 メトリクス
12.7.5 スキーマの設計
13章 ZooKeeper
13.1 ZooKeeperのインストールと実行
13.2 例
13.2.1 ZooKeeperにおけるグループメンバーシップ
13.2.2 グループの作成
13.2.3 グループへの追加
13.2.4 グループ内のメンバーのリストアップ
13.2.5 グループの削除
13.3 ZooKeeperサービス
13.3.1 データモデル
13.3.2 操作
13.3.3 実装
13.3.4 一貫性
13.3.5 セッション
13.3.6 状態
13.4 ZooKeeperによるアプリケーションの構築
13.4.1 設定サービス
13.4.2 耐久性のあるZooKeeperアプリケーション
13.4.3 ロックサービス
13.4.4 さらなる分散データ構造とプロトコル
13.5 ZooKeeperの実用化
13.5.1 耐久性とパフォーマンス
13.5.2 設定
14章 ケーススタディ
14.1 Last.fmにおけるHadoopの利用
14.1.1 Last.fm:ソーシャルミュージック革命
14.1.2 Last.fmにおけるHadoop
14.1.3 Hadoopによるチャートの生成
14.1.4 Track Statisticsプログラム
14.1.5 まとめ
14.2 FacebookにおけるHadoopとHive
14.2.1 イントロダクション
14.2.2 FaceBookにおけるHadoop
14.2.3 仮想的なユースケースの研究
14.2.4 Hive
14.2.5 課題と今後の活動
14.3 Nutch検索エンジン
14.3.1 背景
14.3.2 データ構造
14.3.3 NutchにおけるHadoopデータ処理の例
14.3.4 まとめ
14.4 Rackspaceにおけるログの処理
14.4.1 要件/課題
14.4.2 沿革
14.4.3 Hadoopの選択
14.4.4 収集と蓄積
14.4.5 MapReduceによるログの処理
14.5 Cascading
14.5.1 フィールド、タプル、パイプ
14.5.2 操作
14.5.3 Tap、Scheme、Flow
14.5.4 Cascadingの利用
14.5.5 柔軟性
14.5.6 ShareThisにおけるHadoopとCascading
14.5.7 まとめ
14.6 Apache Hadoopでのテラバイトソート
付録A Apache Hadoopのインストール
A.1 必要事項
A.2 インストール
A.3 設定
A.3.1 スタンドアロンモード
A.3.2 擬似分散モード
A.3.3 完全分散モード
付録B ClouderaのDistribution for Hadoopについて
B.1 必要事項
B.2 スタンドアロンモード
B.3 擬似分散モード
B.4 完全分散モード
B.5 Hadoopの関連パッケージ
付録C NCDC気象情報データの準備
索引
コラム目次
「Hadoop」という名前の由来
Yahoo!でのHadoop
なぜHDFSのブロックはそれほど大きいのか?
HDFSにおけるファイルパーミッション
ネットワークトポロジとHadoop
レプリカの配置
どの圧縮フォーマットを使えばよいのか?
なぜJava Object Serializationを使わないのか?
ユーザー識別情報の設定
設定できるプロパティ
ジョブ、タスク、タスク試行ID
ジョブヒストリ
Hadoopのユーザーログ
MapReduceで進行状況を知らせるのは?
reducer数の選択
入力スプリットとHDFSブロックの関係
MultipleOutputFormatとMultipleOutputsとはどう違う?
ソート順序の制御
RAIDを使わないのはなぜ?
EC2のネットワークトポロジ
メトリクスとカウンターの違いは?
バージョン間の互換性
スキャナ
同期と非同期、どちらのAPIを使うべき?
ZooKeeperはPaxosを使っているのか?