プログラミング Hive

[cover photo]
TOPICS
発行年月日
PRINT LENGTH
424
ISBN
978-4-87311-617-4
原書
Programming Hive
FORMAT
PDF
Ebook
4,180円
Ebookを購入する

本書は、Hadoop上でSQLライクなクエリ操作を可能にするHiveについて、基礎から応用までを詳細に解説した書籍です。データ型とファイルフォーマット、またHiveQLのデータ定義、操作などの基礎的な事柄から、関数、ストリーミング、Thriftサービス、さらにAWSやHCatalogなどの応用まで、Hiveについて必要な事柄を豊富なサンプルとともにわかりやすく解説します。 日本語版では、Microsoftの佐藤直生氏による「Windows Azure HDInsight Service」、Clouderaの嶋内翔氏による「Cloudera Impala」、「Hive 0.10 の新機能」、「HiveServer2」を追加。ビッグデータに関心のあるすべてのエンジニア、必携の一冊です。

目次

訳者まえがき
はじめに

1章 イントロダクション
    1.1 HadoopとMapReduceの概要
        1.1.1 MapReduce
    1.2 HadoopのエコシステムにおけるHive
        1.2.1 Pig
        1.2.2 HBase
        1.2.3 Cascading、Crunchなど
    1.3 Java対Hive:ワードカウントのアルゴリズム
    1.4 使い始めましょう

2章 始めてみましょう
    2.1 設定済みの仮想マシンのインストール
    2.2 詳細なインストール方法
        2.2.1 Javaのインストール
        2.2.2 	Hadoopのインストール
        2.2.3 ローカルモード、疑似分散モード、分散モード
        2.2.4 Hadoopのテスト
        2.2.5 Hiveのインストール
    2.3 Hiveの中身は?
    2.4 Hiveの起動
    2.5 Hadoopの環境設定
        2.5.1 ローカルモードの設定
        2.5.2 分散及び疑似分散モードの設定
        2.5.3 JDBCを使ったメタストア
    2.6 Hiveコマンド
        2.6.1 コマンドのオプション群
    2.7 コマンドラインインターフェース
        2.7.1 CLIのオプション
        2.7.2 変数とプロパティ
        2.7.3 Hiveの「ワンショット」コマンド群
        2.7.4 ファイルからのHiveクエリの実行
        2.7.5 .hivercファイル
        2.7.6 更なるHive CLIの利用
        2.7.7 コマンドの履歴
        2.7.8 シェルの実行
        2.7.9 Hiveの中から使うHadoop dfsのコマンド群
        2.7.10 Hiveスクリプトでのコメント
        2.7.11 クエリ列のヘッダ

3章 データ型とファイルフォーマット
    3.1 プリミティブなデータ型
    3.2 コレクションデータ型
    3.3 データの値に対するテキストファイルのエンコーディング
    3.4 読み取り時のスキーマ適用

4章 HiveQL:データの定義
    4.1 Hiveにおけるデータベース
    4.2 データベースの変更
    4.3 テーブルの作成
        4.3.1 管理対象テーブル
        4.3.2 外部テーブル
    4.4 パーティション化された管理対象テーブル
        4.4.1 パーティション化された外部テーブル
        4.4.2 テーブルのストレージフォーマットのカスタマイズ
    4.5 テーブルの削除
    4.6 テーブルの変更
        4.6.1 テーブル名の変更
        4.6.2 テーブルパーティションの追加、変更、削除
        4.6.3 列の変更
        4.6.4 列の追加
        4.6.5 列の削除や置き換え
        4.6.6 テーブルのプロパティの変更
        4.6.7 ストレージのプロパティの変更
        4.6.8 テーブルを変更するその他の文

5章 HiveQL:データの操作
    5.1 管理対象テーブルへのデータのロード
    5.2 テーブルへのクエリからのデータ挿入
        5.2.1 動的なパーティションの挿入
    5.3 テーブルの作成とテーブルへのロードを、1つのクエリで行う
    5.4 データのエクスポート

6章 HiveQL:クエリ
    6.1 SELECT ... FROM節
        6.1.1 正規表現による列の指定
        6.1.2 列の値を使った演算
        6.1.3 数値演算子
        6.1.4 関数の利用
        6.1.5 LIMIT節
        6.1.6 列のエイリアス
        6.1.7 ネストしたSELECT文
        6.1.8 CASE ... WHEN ... THEN文
        6.1.9 HiveがMapReduceを使わずに済む場合
    6.2 WHERE節
        6.2.1 述語演算子
        6.2.2 浮動小数点数の比較に関する注意事項
        6.2.3 LIKEとRLIKE
    6.3 GROUP BY節
        6.3.1 HAVING節
    6.4 JOIN文
        6.4.1 内部結合
        6.4.2 結合の最適化
        6.4.3 左外部結合
        6.4.4 外部結合に関する注意事項
        6.4.5 右外部結合
        6.4.6 完全外部結合
        6.4.7 左セミ結合
        6.4.8 直積結合
        6.4.9 map側結合
    6.5 ORDER BYとSORT BY
    6.6 SORT BYを伴ったDISTRIBUTE BY
    6.7 CLUSTER BY
    6.8 キャスト
        6.8.1 バイナリ値のキャスト
    6.9 データのサンプリングを行うクエリ
        6.9.1 ブロックサンプリング
        6.9.2 バケットテーブルにおける入力のプルーニング
    6.10 UNION ALL

7章 HiveQL:ビュー
    7.1 ビューによるクエリの複雑さの低減
    7.2 条件に基づいてデータを制限するビュー
    7.3 動的テーブルのためのビューとmap型
    7.4 ビューに関するその他の話題

8章 HiveQL:インデックス
    8.1 インデックスの生成
        8.1.1 ビットマップインデックス
    8.2 インデックスの再構築
    8.3 インデックスの表示
    8.4 インデックスの削除
    8.5 カスタムインデックスハンドラの実装

9章 スキーマの設計
    9.1 Table-by-Day(日ごとのテーブル)
    9.2 Over Partitioning(過剰なパーティション化)
    9.3 ユニークキーと正規化
    9.4 同じデータの複数回の処理
    9.5 すべてのテーブルをパーティション化する場合
    9.6 テーブルデータストレージのバケット化
    9.7 テーブルへの列の追加
    9.8 列指向テーブルの利用
        9.8.1 繰り返しのデータ
        9.8.2 大量の列
    9.9 圧縮は(ほとんどの場合)必ず使いましょう!

10章 チューニング
    10.1 EXPLAINの利用
    10.2 EXPLAIN EXTENDED
    10.3 Limitのチューニング
    10.4 最適化された結合
    10.5 ローカルモード
    10.6 並列実行
    10.7 Strictモード
    10.8 mapper及びreducer数のチューニング
    10.9 JVMの再利用
    10.10 インデックス
    10.11 動的パーティションのチューニング
    10.12 投機的実行
    10.13 単一のMapReduceによる複数のGROUP BY
    10.14 仮想的な列

11章 その他のファイルフォーマットと圧縮
    11.1 インストールされているコーデックの判定
    11.2 圧縮コーデックの選択
    11.3 中間データの圧縮の有効化
    11.4 最終的な出力の圧縮
    11.5 シーケンスファイル
    11.6 圧縮の実際
    11.7 パーティションのアーカイブ
    11.8 圧縮のまとめ

12章 開発
    12.1 Log4Jのプロパティの変更
    12.2 JavaのデバッガのHiveへの接続
    12.3 ソースからのHiveのビルド
        12.3.1 Hiveのテストクラスの実行
        12.3.2 実行フック
    12.4 HiveとEclipseのセットアップ
    12.5 MavenプロジェクトでのHive
    12.6 hive_testを使ったHiveにおけるユニットテスト
    12.7 プラグインの開発キットの登場

13章 関数
    13.1 関数とその説明の表示
    13.2 関数の呼び出し
    13.3 標準関数
    13.4 集計関数
    13.5 テーブル生成関数
    13.6 日付から星座を求めるUDF
    13.7 UDFとGenericUDF
    13.8 恒久関数
    13.9 ユーザー定義集計関数
        13.9.1 GROUP_CONCATをエミュレートするCOLLECT UDAFの作成
    13.10 ユーザー定義テーブル生成関数
        13.10.1 複数の行を生成するUDTF
        13.10.2 複数の列を持つ行を1つ生成するUDTF
        13.10.3 複合型をシミュレートするUDTF
    13.11 分散キャッシュのUDFからのアクセス
    13.12 関数に対して使うアノテーション
        13.12.1 deterministic
        13.12.2 stateful
        13.12.3 DistinctLike
    13.13 マクロ

14章 ストリーミング
    14.1 識別子の変換
    14.2 型の変更
    14.3 変換の射影
    14.4 操作的な変換
    14.5 分散キャッシュの利用
    14.6 単一行からの複数行の生成
    14.8 CLUSTER BY、DISTRIBUTE BY、SORT BY
    14.9 JavaへストリーミングするためのGenericMRツール
    14.10 cogroupの計算

15章 Hiveのファイルとレコードフォーマットのカスタマイズ
    15.1 ファイルとレコードのフォーマット
    15.2 CREATE TABLE文を解き明かす
    15.3 ファイルフォーマット
        15.3.1 シーケンスファイル
        15.3.2 RCFile
        15.3.3 カスタム入力フォーマットの例:DualInputFormat
    15.4 レコードフォーマット:SerDe
    15.5 CSV及びTSV SerDe
    15.6 ObjectInspector
    15.7 Think BigのHive Reflection ObjectInspector
    15.8 XML UDF
    15.9 XPath関連の関数
    15.10 JSON SerDe
    15.11 Avro Hive SerDe
        15.11.1 テーブルのプロパティを使ったAvroのスキーマ定義
        15.11.2 URIからのスキーマ定義
        15.11.3 スキーマの進化
    15.12 バイナリ出力

16章 HiveのThriftサービス
    16.1 Thriftサーバーの起動
    16.2 GroovyからHiveServerへ接続するための設定
    16.3 HiveServerへの接続
    16.4 クラスタの状況の取得
    16.5 結果セットのスキーマ
    16.6 結果のフェッチ
    16.7 クエリプランの取得
    16.8 メタストアに関するメソッド
        16.8.1 テーブルチェッカの例
    16.9 HiveServerの管理
        16.9.1 HiveServiceの実運用
        16.9.2 クリーンアップ
    16.10 HiveのThriftMetastore
        16.10.1 ThriftMetastoreの設定
        16.10.2 クライアントの設定

17章 ストレージハンドラとNoSQL
    17.1 ストレージハンドラの背景
    17.2 HiveStorageHandler
    17.3 HBase
    17.4 Cassandra
        17.4.1 静的な列のマッピング
        17.4.2 動的な列のための変換列マッピング
        17.4.3 Cassandra SerDeのプロパティ
    17.5 DynamoDB

18章 セキュリティ
    18.1 Hadoopのセキュリティとの統合
    18.2 Hiveでの認証
    18.3 Hiveでの承認
        18.3.1 ユーザー、グループ、ロール
        18.3.2 付与及び削除できる権限
        18.3.3 パーティションレベルの権限
        18.3.4 権限の自動付与

19章 ロック
    19.1 ZooKeeperによるHiveでのロックのサポート
    19.2 明示的な排他ロック

20章 HiveとOozieとの結合
    20.1 Oozieのアクション
    20.2 Hive Thrift Serviceアクション
    20.3 2つのクエリからなるワークフロー
    20.4 Oozie Webコンソール
    20.5 ワークフローにおける変数
    20.6 出力のキャプチャ
    20.7 変数への出力のキャプチャ

21章 HiveとAmazon Web Services(AWS)
    21.1 Elastic MapReduceを使う理由
    21.2 インスタンス
    21.3 始める前に
    21.4 EMR Hiveクラスタの管理
    21.5 EMR HiveにおけるThriftサーバー
    21.6 EMRにおけるインスタンスグループ
    21.7 EMRクラスタの設定
        21.7.1 hive-site.xmlのデプロイ
        21.7.2 .hivercスクリプトのデプロイ
        21.7.3 メモリを大量に使用する設定のセットアップ
    21.8 EMRにおける永続化とメタストア
    21.9 EMRクラスタにおけるHDFSとS3
    21.10 S3へのリソース、設定、ブートストラップスクリプトの配置
    21.11 S3上のログ
    21.12 スポットインスタンス
    21.13 セキュリティグループ
    21.14 EMRと、EC2上のApache Hiveの比較
    21.15 まとめ

22章 HCatalog
    22.1 はじめに
    22.2 MapReduce
        22.2.1 データの読み取り
        22.2.2 データの書き込み
    22.3 コマンドラインツール
    22.4 セキュリティモデル
    22.5 アーキテクチャ

23章 ケーススタディ
    23.1 m6d.com(Media6Degrees)
        23.1.1 HiveとRを使用したM6Dにおけるデータサイエンス
        23.1.2 m6dの疑似ランクUDF
        23.1.3 m6dにおける、複数のMapReduceクラスタにまたがるHiveのデータの管理
    23.2 Outbrain
        23.2.1 In-Site Referrerの識別
        23.2.2 ユニーク数のカウント
        23.2.3 セッション化
    23.3 NASAのジェット推進研究所
        23.3.1 地域気象モデル評価システム
        23.3.2 私たちが体験したこと:なぜHiveだったのか?
        23.3.3 課題とその解決
    23.4 Photobucket
        23.4.1 Photobucketにおけるビッグデータ
        23.4.2 Hiveに利用しているハードウェア
        23.4.3 Hiveに保存している内容
        23.4.4 Hiveのサポートする対象
    23.5 SimpleReach
    23.6 顧客の現場における経験と要求
        23.6.1 Karmasphereの視点
        23.6.2 はじめに
        23.6.3 顧客の現場におけるユースケースの例

付録A Windows Azure HDInsight Service
    A.1 MicrosoftとHadoop
    A.2 HortonworksとMicrosoft HDInsight
    A.3 Windows Azure
    A.4 Windows Azure HDInsight Service
    A.5 Windows Azure HDInsight Serviceのアーキテクチャ
    A.6 Windows Azure HDInsight Serviceにおける開発
        A.6.1 Hadoopの既存ツール
        A.6.2 .NETツール
        A.6.3 ジョブの実行
        A.6.4 アプリケーション統合(REST API)
        A.6.5 デバッグとテスト
    A.7 Windows Azure無料評価版の登録
    A.8 Hadoopクラスターの新規作成
    A.9 MapReduceの実行(Web UI)
    A.10 MapReduceの実行(コマンドライン)
    A.11 Hiveの実行(Web UI)
    A.12 Hiveの実行(コマンドライン)
    A.13 まとめ

付録B Cloudera Impala
    B.1 Impalaで出来ること
    B.2 Impalaのアーキテクチャ
    B.3 Impalaのシステム要件
    B.4 Impalaのインストール
    B.5 Impalaの使い方
        B.5.1 Impala Shellによるクエリの実行
        B.5.2 Impala Web UI
    B.6 クエリ実行のためのWeb UI
    B.7 Impalaの利点と欠点
    B.8 Impalaに関する情報

付録C Hive 0.10 の新機能
    C.1 CUBEとROLLUP
    C.2 DROPしたテーブルの復元
    C.3 SHOW CREATE TABLE 構文
    C.4 メタストアがリモートかどうかの自動判定
    C.5 その他の新機能
    C.6 既知のバグ

付録D HiveServer2
    D.1 HiveServer2のインストール
    D.2 HiveServer2の起動と停止
    D.3 HiveServer2の使い方

用語集
参考文献
索引