Mais conteúdo relacionado
Semelhante a Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会) (20)
Mais de Takeshi Mikami (20)
Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)
- 1. takemikami’s note – http://takemikami.com/
三上 威 (フリーランスITエンジニア) twitter: @takemikami
マーケティングデータ分析基盤技術勉強会
『Apache Hadoop & Hive 入門』
ApacheHadoop&Hiveの概要とAWSでの構成イメージ
1
Hadoop Hive AWS
2016.11.4 株式会社フロムスクラッチ 社内勉強会
Copyright (C) 2016 Takeshi Mikami. All rights reserved.
フロムスクラッチ
社内勉強会
- 2. takemikami’s note – http://takemikami.com/
アジェンダ
• Apache Hadoopとは
– Apache Hadoopとは
– HDFSとは
– MapReduceとは
– YARNとは
– Hadoop Clusterの全体像
– AWS上でのHadoop
• Apache Hiveとは
– Apache Hiveとは
– metastoreとは
– Partitionとは
– external tableとは
– AWS上でのHive
2Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoop&Hive入門のアジェンダを示します。
- 3. takemikami’s note – http://takemikami.com/
Apache Hadoopとは
• 「データ保存のための分散ファイルシステム」
「データ処理のための並列処理システム」
によってビッグデータの分散処理を実現する
• 4つのモジュールで構成される
– 共通ユーティリティ (Hadoop Common)
– 分散ファイルシステム (Hadoop HDFS)
– クラスタリソース・ジョブ管理 (Hadoop YARN)
– 並列データ処理システム (Hadoop MapReduce)
3Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoopとは
Apache Hadoopの紹介をします。
ビッグデータ分散処理のフレームワーク
- 4. takemikami’s note – http://takemikami.com/
HDFS(Hadoop Distributed File System)とは
• HDFSとはHadoop独自の分散ファイルシステム。NameNodeとDataNode
で構成される
4Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoopとは
HDFS(Hadoop Distributed File SYstem)の紹介をします。
NameNode DataNode
Hadoop Cluster
DataNode
DataNode
・・・
DataNode管理
メタ情報管理 分散して
ファイルを保存
Client
※同じファイルを3つ以上のDataNodeに保持し、
DataNodeの障害に対応できるように設定するのが一般的
①NameNodeにメタ情報を問い合わせ
②DataNode上のファイルにアクセス
①
②
- 5. takemikami’s note – http://takemikami.com/
MapReduceとは
• MapReduceとはデータの並列処理を行うためのアルゴリズム
• 『○○単位に』『××する』という処理を並列に行うことができる
5Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoopとは
MapReduceについて説明します。
入力ファイル
例) 「訪問者毎に」「PV数を数える」
時間 訪問者ID 種別
00:00 Visitor1 PV
00:03 Visitor1 CLICK
00:04 Visitor7 PV
00:05 Visitor1 PV
訪問者ID PV数
Visitor1 1
Visitor1 0
Visitor7 1
Visitor1 1
訪問者ID PV数
Visitor1 2
Visitor7 1
訪問者ID PV数
Visitor1 2
Map Reduce
他の入力ファイルに対しても
並行してMapReduce
Visitor1 2
Visitor2 1
Visitor2 1
Visitor1 1
訪問者ID PV数
Visitor1 5
Visitor2 2
Reduce
他も
同様にReduce
Shuffle
※ここではVisitor1,2を集めている
HadoopMapReduceは
アルゴリズムの実装
- 6. takemikami’s note – http://takemikami.com/
MapReduceの例: ①Map処理
6Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoopとは
MapReduceについて説明します。
入力ファイル
例) 「訪問者毎に」「PV数を数える」
時間 訪問者ID 種別
00:00 Visitor1 PV
00:03 Visitor1 CLICK
00:04 Visitor7 PV
00:05 Visitor1 PV
訪問者ID PV数
Visitor1 1
Visitor1 0
Visitor7 1
Visitor1 1
訪問者ID PV数
Visitor1 2
Visitor7 1
訪問者ID PV数
Visitor1 2
Map Reduce
他の入力ファイルに対しても
並行してMapReduce
Visitor1 2
Visitor2 1
Visitor2 1
Visitor1 1
訪問者ID PV数
Visitor1 5
Visitor2 2
Reduce
他も
同様にReduce
Shuffle
※ここではVisitor1,2を集めている
入力ファイルの各レコードの内容からPV数を算出する。
種別がPVなら1、それ以外なら0とする
- 7. takemikami’s note – http://takemikami.com/
MapReduceの例: ②Reduce処理(Shuffle前)
7Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoopとは
MapReduceについて説明します。
入力ファイル
例) 「訪問者毎に」「PV数を数える」
時間 訪問者ID 種別
00:00 Visitor1 PV
00:03 Visitor1 CLICK
00:04 Visitor7 PV
00:05 Visitor1 PV
訪問者ID PV数
Visitor1 1
Visitor1 0
Visitor7 1
Visitor1 1
訪問者ID PV数
Visitor1 2
Visitor7 1
訪問者ID PV数
Visitor1 2
Map Reduce
他の入力ファイルに対しても
並行してMapReduce
Visitor1 2
Visitor2 1
Visitor2 1
Visitor1 1
訪問者ID PV数
Visitor1 5
Visitor2 2
Reduce
他も
同様にReduce
Shuffle
※ここではVisitor1,2を集めている
Visitor毎にPV数を合計する。
Visitor1は1+0+1=2, Visitor7は1となる
- 8. takemikami’s note – http://takemikami.com/
MapReduceの例: ③Shuffle処理
8Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoopとは
MapReduceについて説明します。
入力ファイル
例) 「訪問者毎に」「PV数を数える」
時間 訪問者ID 種別
00:00 Visitor1 PV
00:03 Visitor1 CLICK
00:04 Visitor7 PV
00:05 Visitor1 PV
訪問者ID PV数
Visitor1 1
Visitor1 0
Visitor7 1
Visitor1 1
訪問者ID PV数
Visitor1 2
Visitor7 1
訪問者ID PV数
Visitor1 2
Map Reduce
他の入力ファイルに対しても
並行してMapReduce
Visitor1 2
Visitor2 1
Visitor2 1
Visitor1 1
訪問者ID PV数
Visitor1 5
Visitor2 2
Reduce
他も
同様にReduce
Shuffle
※ここではVisitor1,2を集めている
並列に実行した②の処理結果を、VisitorID毎に集めてくる。
ここではVisitor1,2の結果を集めている(逆にVisitor7は他の処理に任せている)
- 9. takemikami’s note – http://takemikami.com/
MapReduceの例: ④Reduce処理(Shuffle後)
9Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoopとは
MapReduceについて説明します。
入力ファイル
例) 「訪問者毎に」「PV数を数える」
時間 訪問者ID 種別
00:00 Visitor1 PV
00:03 Visitor1 CLICK
00:04 Visitor7 PV
00:05 Visitor1 PV
訪問者ID PV数
Visitor1 1
Visitor1 0
Visitor7 1
Visitor1 1
訪問者ID PV数
Visitor1 2
Visitor7 1
訪問者ID PV数
Visitor1 2
Map Reduce
他の入力ファイルに対しても
並行してMapReduce
Visitor1 2
Visitor2 1
Visitor2 1
Visitor1 1
訪問者ID PV数
Visitor1 5
Visitor2 2
Reduce
他も
同様にReduce
Shuffle
※ここではVisitor1,2を集めている
Visitor毎にPV数を合計する。
Visitor1は2+2+1=5, Visitor2は1+1=2となる
- 10. takemikami’s note – http://takemikami.com/
YARN(Yet Another Resource Negotiator)とは
• YARNはHadoopクラスタのリソース管理と、ジョブスケジューリングを行
う。ResourceManagerとNodeManagerで構成される
10Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoopとは
YARN(Yet Another Resource Negotiator)の紹介をします。
ResourceManager NodeManager
Hadoop Cluster
NodeManager
NodeManager
・・・
リソース管理
ジョブスケジューリング Jobを
並列実行
Client
MapReduceのJobを投入
JobJobJob
JobJobJob
JobJobJob
Map, Reduce, Shuffleを実施
- 11. takemikami’s note – http://takemikami.com/
Hadoop Clusterの全体像
• Hadoop Clusterは『分散ファイルシステム』『並列処理システム』の組み合わせ
構造になる
11Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoopとは
Hadoop Clusterの全体像を示します。
Hadoop Cluster
Client NameNode
ResourceManager
DataNode
NodeManager
DataNode
NodeManager
DataNode
NodeManager
JobJobJob
JobJobJob
JobJobJob
Master node Slave node
各Nodeに
あるデータ
を処理
Hadoop Clusterは、
各Nodeに分散保存されているデータに対して、
そのNode上で処理を実施できるので効率が良い。
(処理対象データを取得するための通信が不要)
- 12. takemikami’s note – http://takemikami.com/
EMR (Elastic MapReduce)
AWS上でのHadoop
• EMR=HadoopCluster、S3=HDFSと同等だが、以下の点に気をつける。
– EMRは処理完了後Shutdownするので永続的に使用するデータはS3に配置する
– S3上のデータを直接処理すると遅いので、
中間データや何度も参照するデータはEMRのHDFSに配置する
12Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hadoopとは
AWS上でHadoopをどのように扱うかについて説明します。
NameNode
ResourceManager
DataNode
NodeManager
DataNode
NodeManager
DataNode
NodeManager
JobJobJob
JobJobJob
JobJobJob
Master node Slave node S3
NameNode DataNode
DataNode
DataNode
Master node Slave node
※S3にNameNodeやDataNodeの用語を使うのは正しく無いですが、
HDFSと似たものというイメージで書いています。処理結果を永続化
入力データを取得
- 13. takemikami’s note – http://takemikami.com/
Apache Hiveとは
• Hadoopのファイルシステム上に格納されたファイルに対して、
データの問い合わせを行うことができる
• HiveQLというSQLライクな言語を、MapReduceジョブに変換し、
Hadoopに渡し実行する
• コマンドでの実行(hive)、
またはサーバプロセスで実行する(hiveserver2)
13Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hiveとは
Apache Hiveの紹介をします。
Hadoop上のファイルに対するクエリ実行環境
- 14. takemikami’s note – http://takemikami.com/
Hiveのシステム構成 〜hiveコマンドの場合
• hiveコマンドは、以下の処理を行う
– HiveQLの受け付け
– HiveQL→MapReduceジョブの変換
– 変換してMapReduceジョブをHadoopに渡す(処理はHadoopで実行)
14Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hiveとは
EMR (Elastic MapReduce)
NameNode
ResourceManager
DataNode
NodeManager
DataNode
NodeManager
DataNode
NodeManager
JobJobJob
JobJobJob
JobJobJob
Master node Slave node
Hiveのシステム構成を説明します。
hiveコマンド
metastore
MapReduce
ジョブHiveQL
メタ情報 (テーブル定義)
→RDBへのSQL問い合わせと同じ感覚で、Hadoop上のファイルに問い合わせができる
- 15. takemikami’s note – http://takemikami.com/
beelineなど
Hiveのシステム構成 〜hiveserver2の場合
• hiveserver2の場合も、hiveコマンドと行う処理は同じ
• サーバプロセスになるので、thriftやJDBCドライバ経由でクライアントプ
ログラムからHiveQLを投げることができる
15Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hiveとは
EMR (Elastic MapReduce)
NameNode
ResourceManager
DataNode
NodeManager
DataNode
NodeManager
DataNode
NodeManager
JobJobJob
JobJobJob
JobJobJob
Master node Slave node
Hiveのシステム構成を説明します。
hiveserver2
metastore
MapReduce
ジョブHiveQL
メタ情報 (テーブル定義)
- 16. takemikami’s note – http://takemikami.com/
metastoreとは
• metastoreは、HiveQLでクエリでみるテーブル定義情報を格納
• 実体はHadoopクラスタ上、メタ情報はRDBに格納
16Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hiveとは
Hiveのmetastoreについて説明します。
EMR (Elastic MapReduce)
NameNode
ResourceManager
DataNode
NodeManager
DataNode
NodeManager
DataNode
NodeManager
JobJobJob
JobJobJob
JobJobJob
Master node Slave nodehiveコマンド
metastore
MapReduce
ジョブHiveQL
メタ情報 (テーブル定義)
時間 訪問者ID 種別
00:00 Visitor1 PV
00:03 Visitor1 CLICK
00:04 Visitor7 PV
00:05 Visitor1 PV
テーブル名 カラム名 型
access_log access_dt datetime
access_log visitor_id string
access_log access_type string
データの実体
(HDFS上のファイル)
- 17. takemikami’s note – http://takemikami.com/
Partitionとは
• hiveのテーブルは、ファイルシステムの指定ディレクトリ配下に格納
• パーティションを用いると、サブディレクトリで管理することができる
– 例えば、期間を区切った集計が多い場合は、年月日などでパーティションを切
ると、対象期間のファイルのみを対象に処理をする(=性能改善)
17Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hiveとは
Hiveのpartitionについて説明します。
テーブル(パーティション無し)
/0001
/0002
/0003
/0004
テーブル(年月日パーティション有り)
/ymd=20160101
/0001
/0002
/ymd=20160102
/0001
/0002
全ファイルを処理
指定した期間の
ファイルのみを処理
→DWHでは期間指定のクエリを多用するので、期間指定のパーティションはよく使われる
- 18. takemikami’s note – http://takemikami.com/
external tableとは
• external tableを使うと、HDFSなどに配置したファイル(tsvなど)を
hiveのテーブルとして扱うことができる
18Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hiveとは
Hiveのexternal tableについて説明します。
※ hiveのテーブルの実体は、ファイルシステム上のファイル。
通常の(externalでない)テーブルの場合、create tableでテーブルを作成してinsertするとファイルが作成される
EMR (Elastic MapReduce)
NameNode
ResourceManager
DataNode
NodeManager
DataNode
NodeManager
DataNode
NodeManager
JobJobJob
JobJobJob
JobJobJob
Master node Slave node
hiveコマンド
metastore
hive以外のバッチ
なんらかのジョブ
①バッチジョブでデータを投入
Create external table
②External tableとして定義
HiveQL ③External tableにクエリ発行
External tableの利用例
- 19. takemikami’s note – http://takemikami.com/
EMR (Elastic MapReduce)
AWS上でのHive
• AWSでHiveを使う場合は、
メタデータをRDSで永続化・S3でデータを永続化する
19Copyright (C) 2016 Takeshi Mikami. All rights reserved.
Apache Hiveとは
AWS上でHiveをどのように扱うかについて説明します。
NameNode
ResourceManager
DataNode
NodeManager
DataNode
NodeManager
DataNode
NodeManager
JobJobJob
JobJobJob
JobJobJob
Master node
Slave node
S3
NameNode DataNode
DataNode
DataNode
Master node Slave node
hiveserver2
metastore
RDSクライアント
(beelineなど)
メタ情報を永続化
データを永続化
※S3にNameNodeやDataNodeの用語を使うのは正しく無いですが、HDFSと
似たものというイメージで書いています。