Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)

407 views

Published on

本資料では、Apache HadoopとHiveの概要とAWS上での構成イメージを説明します。

Published in: Software
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
407
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
2
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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と 似たものというイメージで書いています。

×