データベース・エンジニアの ための Hadoop 活用術
Oracle Big Data SQL
日本オラクル株式会社
データベース事業統括 製品戦略統括本部
プリンシパル・セールスコンサルタント 能仁 信亮 プリンシパル・セールスコンサルタント 立山 重幸
Oracle DBA & Developer Days 2014
for your Skill
使える実践的なノウハウがここにある
#odddtky
• 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明する ものです。また、情報提供を唯一の目的とするものであり、いかなる契約 にも組み込むことはできません。以下の事項は、マテリアルやコード、機 能を提供することをコミットメント(確約)するものではないため、購買決定 を行う際の判断材料になさらないで下さい。オラクル製品に関して記載さ れている機能の開発、リリースおよび時期については、弊社の裁量により 決定されます。
Oracle
とJava
は、Oracle Corporation
及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
本セッションのアジェンダ
1
2
3
4
Big Data SQL が生まれた背景
Big Data SQL を理解するための Hadoop 再入門 Big Data SQL Technical Overview
Big Data SQL Demo
Big Data SQL が生まれた背景
Hadoop の活用例 – Skybox Imaging
•
参考情報:
– http://blog.cloudera.com/blog/2012/10/sneak-peek-into-skybox-imagings-cloudera-powered-satellite-system/
http://www.skyboximaging.com/
Hadoop の活用例 – データウェアハウスの拡張
論理データウェアハウス (Logical Data Warehouse)
Gartner
が提唱旧来のデータストアに加えて、
Hadoop
などの複数の最適な技術を組あわせて データウェアハウスを構築Hadoop
を組み合わせて大規模データウェアハウスを構築している例Facebook 300PB
https://code.facebook.com/posts/229861827208629/scaling- the-facebook-data-warehouse-to-300-pb/
Nokia 数 PB
Strata NY 2012
にて講演典型的なデータ活用パターン
データの特性や活用目的にあわせ、最適なテクノロジーを組み合わせる
NoSQL
• Key
とValue
のシンプルな構造•
低コストでのスケールアウトRDBMS
•業務トランザクション
•
データ分析•
ミッション・クリティカル環境Hadoop
•分散ファイルシステム
•
並列分散処理用フレームワークHadoop
Exadata
for
Oracle Database
Big Data Appliance
for
Hadoop, NoSQL Database
究極のパフォーマンス
高いセキュリティ
豊富な連携ツール群
幅広いカバー範囲
低コストでの拡張性
オープンプラットフォーム
急速な技術的な進化Big Data Management Systems
Oracle Big Data Appliance
事前に設定/最適化されたビッグデータ用
Hadoop
プラットフォーム 最適化済み
低リスク、事前構築/調整済みEngineered System
製品DIY
と比べて21%
のコスト削減、30%
の構築 期間短縮処理時間の短縮
独自機能Perfect Balance
により、MapReduce
の処理時間を短縮
最大15
倍MapReduce
処理を高速化Oracle Database
との親和性Oracle Big Data SQL
との活用により、RDBMS
とHadoop
の利点を組み合わせた統 合DWH
をシンプル、かつ迅速に、セキュア に構築可能 Oracle Big Data Connectors
との活用によ高度なセキュリティ
Kerberos
/LDAP
認証、Apache Sentry
による 認可、ネットワークおよびHDFS
データのHDD
暗 号化をサポートOracle Audit Vault & Database Firewall
によ る一元化された監査Full Rack : 18
ノードOracle Big Data Appliance
ソフトウェア•40Gb/sec InfiniBand
合計100 port (
内部接続とExadata
への接続で利用)
•10Gb/sec Ethernet
合計16 ports (
データセンターの機器との接続)
•288 Intel® Xeon® E5 Processor cores
•1152 GB
メモリ•864TB
の合計ディスク容量Starter Rack : 6
ノード•96 Intel® Xeon® E5 Processor cores
•384 GB
メモリ•288TB
の合計ディスク容量Big Data Appliance
ノードSun X4-2L Server
•2
×8Core Intel® Xeon® E5-2650 V2 Processors (2.6 GHz)
•12 x 4 TB 7.2K RPM
高容量SAS (hot-swap)
•64 GB (8 x 8GB) 512GB
まで拡張可能InfiniBand Network
•Oracle Linux
•Oracle Java VM
•Cloudera Distribution of Apache Hadoop (CDH)
•Cloudera Manager
•Cloudera Impala, Search, Navigator, HBase & BDR
•Oracle R Distribution
•Oracle NoSQL Database
事前に設定/最適化されたビッグデータ用
Hadoop
プラットフォームOracle Big Data Appliance
*ハードウェアのサポート契約で、上記ソフトウェアのサポート
In-Rack Expansion
を利用して6
ノードずつ追加可能データ分析の課題
分断されたサイロな環境を対象に分析を実施する必要がある
Hadoop
データ分析の課題
それぞれが異なるデータアクセスインターフェースをもつ
Hadoop
SQL on Hadoop は時代の流れ
• Apache Hive
• Stinger
• Presto
• Impala
• Spark SQL
データ分析の課題
統合された
SQL
インターフェースが存在しないHadoop
未対応の SQL 機能の例 : Impala
SQL Language Feature Oracle Impala
ORDER BY ✔ ✔
UNION ALL ✔ ✔
BETWEEN ✔ ✔
SQL-2003 Window
関数(moving average, LEAD/LAG
等) ✔ 2.0(
最新バージョン)
で実装WHERE
句の中でのサブクエリー✔ 2.0(
最新バージョン)
で実装集合演算子
(MINUS, INTERSECT) ✔ ✖
SQL-1999
集計関数(ROLLUP, GROUPING SET) ✔ ✖
Recursive WITH ✔ ✖
SQL Pattern Matching ✔ ✖
User defined Table-functions ✔ ✖
SQL の書き換えが必要な例 : Hive
UNION ALL
の例•
アプリケーションの改修が必要であったり、ツールによっては対応できない場合もある•
オプティマイザが未成熟なため、SQL
の書き方によってパフォーマンスが大きく影響される。結果としてSQL
の書換 が必要となるケースもある> SELECT a, b FROM test1 UNION ALL SELECT a,b FROM test2
; このままだとHive
ではエラーが発生以下の
SQL
に書換えが必要> SELECT * FROM (SELECT a, b FROM test1 UNION ALL SELECT a,b FROMtest2) t;
Oracle Big Data Management
Big Data
分析でもSQL
による既存資産が流用可能NoSQL Hadoop
Before After
統合されたクエリーによるメリット
Data Science
専任
エンジニア
???
すべての
ユーザー
Before After
統合されたクエリーによるメリット
アプリケーション開発
Hadoop
Hadoop
HDFS Data Node
HDFS Data Node Local Process Local Process
Oracle
Storage Server
Oracle
Storage Server Local Process Local Process
Oracle SQL Big Data Appliance
+ Hadoop
Exadata
+
Oracle Database
全てのデータにOracle DBから Oracle SQLでアクセス可能Oracle Big Data SQL
Oracle Database
とHadoop
のデータをSQL
で有効活用
Smart Scan機能をHadoopの ノードに実装
Oracle Databaseのセキュリティ 機能をHadoop上のデータにも 適用Big Data SQL を理解するための
Hadoop 再入門
分散ファイルシステム
.
分散処理フレームワークHadoop
Big Data SQL を理解する上で必要となる知識
ある程度の知識が必要 不要
HDFS MapReduce
HDFS
Node-A Node-B Node-C Node-D Node-E Node-F
元ファイル
1 2 3 4
1 3
2 4
1 3
3 2
1 4
2 4
Hadoop Distributed File System (HDFS)
分散配置
HDFS の構成 ( クライアントからの読込み )
クライアント/ プログラム
NameNode (Active) NameNode
(Standby)
DataNode
③各ブロックを管理するノードにデータをリクエスト
①ファイルを管理する ノードを問合せ
②ファイルに含まれる各ブロックを 管理するノード名を返却
DataNode DataNode DataNode
補足
• Hadoop
では、データの格納とデータの処理を同一ノードで行います
(Exadata
のようなデータベース・サー バーとストレージ・サーバーのような区分けがない)
•
ネットワークの転送量を抑えるために、可能な限りブ ロックが存在するノードで、そのブロックに対する処理 を行います (=データ・ローカリティ)Q1 Hadoop って非構造データを扱うんですよね?
Hadoop
で利用される代表的なデータフォーマット• HDFS(Hadoop 分散ファイルシステム ) は「ファイルシステム」です
–
ファイルとして扱えるものであれば、なんでも扱えます–
ということで、非構造データ「も」扱うことができますYes or No?
Schema-on-Write と Schema-on-Read
Schema-on-Write Schema-on-Read
• データの保存時に専用フォーマット
に変換してデータを保存 • データを読み取る際に、格納され
たデータフォーマットを動的に解釈
最近の Hadoop 界隈での流行
• 旧来は、 Hadoop では Schema-on-Read が主流だった
• 読み取り時のパフォーマンスが ( 柔軟性よりも ) 重要なデータに関しては、
Hadoop でも列指向データ型に格納する流れがでてきた
– ORC File(Facebook
などで利用される), Parquet(Twitter
がOSS
として公開)
などの列指 向フォーマットが代表格–
最適化されたデータフォーマットにあらかじめ変換しておくという意味では、Schema- on-Write
のアプローチ• 「柔軟性 vs 読み取り時の性能」を考慮して、最適なフォーマットを選択
Big Data SQL では?
• 多様なフォーマットが扱えます。
• 詳しくは、本セッションの後半で扱います。
Q2 じゃあ、 HDFS にあるデータをどう利用するの?
データの読取り方式
HDFS 上のファイルを分散処理するために何が必要か?
• 分散処理を行うためには ?
–
巨大なファイルを分割(
スプリット)
する•
並列処理のための分割–
分割されたスプリットからレコード(
キー・バリューのペア)
を認識するテキストファイルの処理例 ー TextInputFormat
{"custId":1185972,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:07","recommended":null,"activity":8}
{"custId":1354924,"movieId":1948,"genreId":9,"time":"2012-07-01:00:00:22","recommended":"N","activity":7}
{"custId":1083711,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:26","recommended":null,"activity":9}
{"custId":1234182,"movieId":11547,"genreId":44,"time":"2012-07-01:00:00:32","recommended":"Y","activity":7}
{"custId":1010220,"movieId":11547,"genreId":44,"time":"2012-07-01:00:00:42","recommended":"Y","activity":6}
{"custId":1143971,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:43","recommended":null,"activity":8}
{"custId":1253676,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:50","recommended":null,"activity":9}
{"custId":1351777,"movieId":608,"genreId":6,"time":"2012-07-01:00:01:03","recommended":"N","activity":7}
{"custId":1143971,"movieId":null,"genreId":null,"time":"2012-07-01:00:01:07","recommended":null,"activity":9}
{"custId":1363545,"movieId":27205,"genreId":9,"time":"2012-07-01:00:01:18","recommended":"Y","activity":7}
{"custId":1067283,"movieId":1124,"genreId":9,"time":"2012-07-01:00:01:26","recommended":"Y","activity":7}
{"custId":1126174,"movieId":16309,"genreId":9,"time":"2012-07-01:00:01:35","recommended":"N","activity":7}
{"custId":1234182,"movieId":11547,"genreId":44,"time":"2012-07-01:00:01:39","recommended":"Y","activity":7}}
{"custId":1346299,"movieId":424,"genreId":1,"time":"2012-07-01:00:05:02","recommended":"Y","activity":4}
例
: 100GB
のファイルBlock B1
Block B2 Block B3
Key: 1256
Value: {"custId":1067283,"movieId":1124,
"genreId”9,"time":"2012-07-01:00:01:26",
"recommended":"Y","activity":7}
ファイルを分割する
TextInputFormat
テキストファイル用の
TextInputFormat
では、分割の単位はブロックBig Data Appliance
では、デフォルトブロックサイズ256MB
100GB
のファイルであれば、400
個の(Split
に)
分割されて処理されるキーとバリューの組として レコード
(
行)
を生成するLineRecordReader
ファイルの中の何行目か
行に含まれる内容
レコードを行と列として認識する仕組みは?
• プログラム (MapReduce) では、キーとバリューとして扱えれば十分
– Value
がJSON
形式でそのまま入っているが、プログラムの中で解釈すればよい• SQL として扱うのであれば、キーとバリューではなく、列としてレコードを解 釈する必要がある
• Hadoop 上の SQL エンジン Hive では、レコードを列として解釈する SerDe( シ リアライズ・デシリアライズ用のクラス ) の仕組みを持つ
–
前ページの例では、JSON
形式のデータを列として解釈するJSON
用のSerDe
を利用し て、データを行と列として解釈Big Data SQL では?
• 以下の 2 つの方式をサポート
–
ネイティブ(C
言語での独自)
実装の読取り方式•
高速•
現在のバージョンではデリミタ区切りのフォーマットのみに対応– InputFormat, SerDe(
この節の内容)
を利用した読取り•
既存のものや、新規に作成したものを活用することで、任意のフォーマットに対応可能•
この場合でも、データを読取る仕組みを利用するだけでMapReduce
は利用しないQ3 データってどうやってとりこむの?
データ取り込みから加工
Hadoop のデータソースってなんでしょうか?
• ファイルとして生成されるデータ
– Web
ログ,
システム・ログ• 機器の生成するデータ
–
自動車や複合機などの製品が生成するデータ–
製造機器など工場内で生成するデータ• リレーショナルデータベース (OLTP)
Apache Flume, fluentd など
独自アプリケーションや Apache Flume など
Sqoop や
Oracle GoldenGate など
データソース 典型的な取込み方法
Apache Flume
• データ収集のための効率的な基盤
– Big Data Appliance
に含まれる–
特にログファイルの準リアルタイムの収集に強みをもつ•
ファイル単位ではなくログに出力されたものを順次収集(TailSource)
Agent1
HDFS
Agent
ログの転送Agent Agent2
Agent3 Agent4
収集したデータの格納先は
Oracle Database からのデータ収集
Oracle Data Integrator, Oracle GoldenGate
Load to Oracle
OLH/OSCH Transform
Hive
Oracle Data Integrator
Hive/HDFS Federate Hive/HDFS to Oracle
Big Data SQL Oracle DB
OLTP
Hive/HDFS GoldenGate
Hive/HDFS
をターゲットとする連携はOracle GoldenGate Java Adapter
の サンプル実装として提供Hadoop
Big Data SQL では?
• この節で紹介したツールなどで取り込んだデータを利用
• Oracle Database からのデータの移動に対応予定 ( 次ページ )
Exadata から Big Data Appliance へのデータの移動
Big Data SQL
の今後の機能拡張予定Big Data Appliance Cloudera Hadoop
Exadata Oracle Database
Copy to BDA
Oracle Big Data SQL
直近
13
ヶ月分の14
ヶ月目以降の データデータ
今後の拡張予定機能
まとめ
• Q1: Hadoop
って非構造データを扱うんですよね–
非構造データも扱うことができるが、HDFS
はファイルシステムなため任意のデータの格納が可能。最 近は、列指向の(
極めて構造的な)
データフォーマットも登場している• Q2:
じゃあ、HDFS
にあるデータをどう利用するの?–
ファイルフォーマットを解釈する仕組み(InputFormat/RecordReader),
それを行・列として解釈する仕組み
(Hive SerDe)
などを利用して多様なフォーマットを利用可能に– Big Data SQL
もそれらの仕組みを活用することが可能• Q3:
データってどうやってとりこむの?–
準リアルタイムにデータを収集する仕組み(Apache Flume)
や、Oracle Data Integrator
、Golden Gate
のHadoop
対応機能を活用Big Data SQL Technical Overview
Oracle Big Data SQL
• パワフルな SQL on Hadoop
– Oracle SQL
問い合わせがHadoop
上で使える– Hadoop
のリソースを有効活用したSQL
処理• Hadoop と Oracle Database のシンプルな統合
– Exadata
にアクセスすれば、全てのデータにクエリ可能– Hadoop
とRDBMS
データの結合• 最適化されたハードウェア
– Hadoop
用に最適化されたBig Data Appliance
上で稼働Oracle Big Data SQL
HDFS Data Node
HDFS Data Node Local Process Local Process
Oracle
Storage Server
Oracle
Storage Server Local Process Local Process
Oracle SQL Big Data Appliance
+ Hadoop
Exadata
+
Oracle Database
どのような仕組みなのか ?
ポイント 1 :
Hive のメタデータを利用した外部表作成 ポイント 2 :
パフォーマンス最適化のための Smart Scan 機能 ポイント 3 :
アーキテクチャ
Hive (おさらい兼ねて)
• HDFS に格納されたデータに対して SQL ライクなインタフェース (HiveQL) を提供
• 様々なフォーマットに対応可能
• ファイルの保存場所やパースするための設定をメタデータとして保持
• HiveQL は内部的に MapReduce を実行
• Big Data SQL は、管理をシンプルにするために Hive のメ タデータを利用します。ただし、必須ではありません。
• Big Data SQL は、クエリの実行には Hive を利用しません。
HDFS にファイルを置きます
Hadoop
{"custId":1185972,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:07","recommended":null,"activity":8}
{"custId":1354924,"movieId":1948,"genreId":9,"time":"2012-07-01:00:00:22","recommended":"N","activity":7}
{"custId":1083711,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:26","recommended":null,"activity":9}
{"custId":1234182,"movieId":11547,"genreId":44,"time":"2012-07-01:00:00:32","recommended":"Y","activity":7}
{"custId":1010220,"movieId":11547,"genreId":44,"time":"2012-07-01:00:00:42","recommended":"Y","activity":6}
{"custId":1143971,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:43","recommended":null,"activity":8}
{"custId":1253676,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:50","recommended":null,"activity":9}
{"custId":1351777,"movieId":608,"genreId":6,"time":"2012-07-01:00:01:03","recommended":"N","activity":7}
{"custId":1143971,"movieId":null,"genreId":null,"time":"2012-07-01:00:01:07","recommended":null,"activity":9}
{"custId":1363545,"movieId":27205,"genreId":9,"time":"2012-07-01:00:01:18","recommended":"Y","activity":7}
{"custId":1067283,"movieId":1124,"genreId":9,"time":"2012-07-01:00:01:26","recommended":"Y","activity":7}
{"custId":1126174,"movieId":16309,"genreId":9,"time":"2012-07-01:00:01:35","recommended":"N","activity":7}
{"custId":1234182,"movieId":11547,"genreId":44,"time":"2012-07-01:00:01:39","recommended":"Y","activity":7}}
{"custId":1346299,"movieId":424,"genreId":1,"time":"2012-07-01:00:05:02","recommended":"Y","activity":4}
例
: JSON
形式のログファイルHive 表を定義します( Schema on Read )
一つのカラムとして読み込む場合
> select * from movieapp_log_json
{"custId":1185972,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:07",…
{"custId":1354924,"movieId":1948,"genreId":9,"time":"2012-07-01:00:00:22",…
{"custId":1083711,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:26",…
{"custId":1234182,"movieId":11547,"genreId":44,"time":"2012-07-01:00:00:32”,…
{"custId":1010220,"movieId":11547,"genreId":44,"time":"2012-07-01:00:00:42",…
{"custId":1143971,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:43",…
{"custId":1253676,"movieId":null,"genreId":null,"time":"2012-07-01:00:00:50",…
{"custId":1351777,"movieId":608,"genreId":6,"time":"2012-07-01:00:01:03”,…
HiveQL:
CREATE EXTERNAL TABLE movieapp_log_json (
click STRING )
ROW FORMAT DELIMITED
LINES TERMINATED BY '¥n' STORED AS TEXTFILE
LOCATION '/user/oracle/applog';
Classic DDL Data source metadata
Hive 表を定義します( Schema on Read )
SerDe
を使って、カラム定義する場合> select * from movielog_cols
HiveQL:
CREATE EXTERNAL TABLE movielog_cols ( custid int,
movieid int, activity int, …)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION
'/user/oracle/applog_json';
Hive Metadata
ほとんどの
SQL on Hadoop
のエンジンはHive Metadata
を共有しますHive Metastore
Hive Impala
Shark (Spark)
Oracle Big Data SQL …
Table
定義:
movieapp_log_json movielog
movieapp_log_avro
Hive のメタデータを利用した外部表作成
CREATE TABLE movieapp_log_json (click VARCHAR2(4000))
ORGANIZATION EXTERNAL (TYPE ORACLE_HIVE
DEFAULT DIRECTORY DEFAULT_DIR )
REJECT LIMIT UNLIMITED;
Big Data Appliance
+
Exadata
+
Oracle Catalog
外部表
Hive metadata
外部表
Hive Metastore
今までの Oracle 外部表の書き方にちょっと付け足すだけ
CREATE TABLE movielog (click VARCHAR2(4000)) ORGANIZATION EXTERNAL ( TYPE ORACLE_HIVE
DEFAULT DIRECTORY Dir1 ACCESS PARAMETERS
(
com.oracle.bigdata.tablename=logs com.oracle.bigdata.cluster=mycluster) )
REJECT LIMIT UNLIMITED
• 新しい定義項目
–
アクセスドライバタイプ• ORACLE_HIVE : Hive
のメタストアからメタデータを引き継ぐ• ORACLE_HDFS
:メタデータをCreate Table
文の中で定義–
アクセスパラメータ• tablename
• Hadoop cluster
• column mapping
• error handling
• overflow handling
• Logging
など社内検証結果:
様々な形式での動作が確認できています
分類 検証項目
HDFS
ドライバHive
ドライバファイル形式 テキスト ○ ○
JSON
○ ○XML
○ ○正規表現(
Apache Access Log
) ○ ○格納方式
Sequence File
○ ○Avro
○ ○RC
○ ○ORC
○ ○圧縮
gzip , LZO
○ ○クエリ
Hadoop
内結合 ○ ○Hadoop – Exadata
結合 ○ ○社内検証結果 :
例) CSV ファイル HDFS Access Driver
元データ
テーブル 作成
クエリ結果
bango,namae
123,tateyama 456,nounin 789,suzuki
CREATE TABLE sample11 (
bango number , namae VARCHAR2(10)) ORGANIZATION EXTERNAL
(TYPE ORACLE_HDFS
DEFAULT DIRECTORY default_dir ACCESS PARAMETERS(
com.oracle.bigdata.rowformat
=Delimited fields terminated by ',’ ) LOCATION
('hdfs://cluster1-ns/user/hive/warehouse/sample‘));
社内検証結果 :
例) Json SerDe を利用した Hive Access Driver
元データ
{"field1":"data1","field2":100,"field3":"more data1","field4":123.001}
{"field1":"data2","field2":200,"field3":"more data2","field4":123.002}
{"field1":"data3","field2":300,"field3":"more data3","field4":123.003}
{"field1":"data4","field2":400,"field3":"more data4","field4":123.004}
CREATE TABLE test_json(
field1 varchar2(20), field2 number, field3 varchar2(20), field4 number )
ORGANIZATION EXTERNAL ( TYPE ORACLE_HIVE
DEFAULT DIRECTORY DEFAULT_DIR ACCESS PARAMETERS(
com.oracle.bigdata.cluster=cluster1
テーブル作成
クエリ結果
・・・・
型変換
• Hive のデータ型は、以下の対応表の通り Oracle 型に変換できます
https://docs.oracle.com/cd/E55905_01/doc.40/e55814/bigsql.htm#BJEIDGHC
どのような仕組みなのか ?
ポイント 1 :
Hive のメタデータを利用した外部表作成 ポイント 2 :
パフォーマンス最適化のための Smart Scan 機能 ポイント 3 :
アーキテクチャ
Exadata でお馴染みの Smart Scan 機能を Hadoop に実装
RDBMS
とHadoop
に対するクエリOracle SQL
HDFSData Node BDS Server HDFS Data Node BDS Server
Oracle Database Storage Server Oracle Database Storage Server
Fast
大規模並列分散処理 ローカルでの絞り込み 転送データの極小化
大規模並列分散処理:
• 並列度の指定が可能
– Oracle Database
の並列度設定が自動的にHadoop
側の並列設定に反映されます例
)
左記のSQL
でOracle Database
の並列度を20
に 設定することで、Hadoop
側のBig Data SQL
の処理も20
並列で動作しますCREATE TABLE movieapp_log_json (click VARCHAR2(4000))
ORGANIZATION EXTERNAL (TYPE ORACLE_HIVE
DEFAULT DIRECTORY DEFAULT_DIR )
PARALLEL 20
REJECT LIMIT UNLIMITED;
ローカルでの絞り込み・データ転送の極小化:
select last_name, state, movie, genre
from movielog m, customer c where genre=‘comedy’
and c.custid = m.custid
Hadoop
上での実行1
NameNode/Hive Metastore
から 以下の情報取得:
•
データの保持場所•
データの構造•
対象のブロック数1
2
Big Data SQL Server
が並列読込み:
• DataNode
が並列にデータアクセス•
行と列の絞り込み2
Hive Metastore HDFS
NameNode
3
データベースサーバーでの処理
•
関連するデータのみ転送されてくる•
データベースのテーブルとジョイン•
データベースセキュリティポリシーの適用3
HDFS Data Node BDS Server
HDFS Data Node BDS Server
movielog
customer
DB
Hadoop
Smart Scan の実行モード 1/2
• Big Data SQL
のSmart Scan
機能は、パフォーマンスに影響を与える2
種類のMode
があり ます。C :
独自実装の高速処理モード 現バージョンではデリミタ区切りのテキストのみに対応Java :
内部的にHive
のStorageHandler
を利用したデータの読取りを行う• Data Mode
は、Create Table
時にcom.oracle.bigdata.datamode
で指定します。無指定の場合は、
auto(
デフォルト)
となりC , Java mode
が自動適用されます(C
優先)
CREATE TABLE BDS_SAMPLE
Col1 VARCHAR2(30) , Col2 NUMBER(30) ORGANIZATION EXTERNAL (
TYPE ORACLE_HDFS
DEFAULT DIRECTORY DEFAULT_DIR ACCESS PARAMETERS(
com.oracle.bigdata.cluster=cluster1
Smart Scan の実行モード 2/2
Data mode
内部処理C
Java
データ
Hive
データ型
Oracle
データ型 処理
Oracle
データ型 処理
変換
変換
(SerDe)
変換• Java data mode
はSerDe
を利用するため、利便性に優れるものの、内部的には一度、Hive
データ型に変換された後に、Oracle
データ型への変換が行われるため、C data
mode
より実行速度が劣ります。どのような仕組みなのか ?
ポイント 1 :
Hive のメタデータを利用した外部表作成 ポイント 2 :
パフォーマンス最適化のための Smart Scan 機能 ポイント 3 :
アーキテクチャ
IB
En terpri se Manager
Oracle Big Data SQL 導入の前提条件
Big Data SQL
に接続するためには、Exadata
上で稼働するOracle 12.1.0.2
以 上が必須になりますハードウェア・ネットワーク
OS (Oracle Linux), JDK
Cloudera’s Distribution including Apache Hadoop
Cl oude ra Mana ger
Big Data SQL (Option)
自動構成ツール
Perfect Balance
Big Data Connectors
(別ライセンス)
カスタム・アプリケーション
MySQL
(Cloudera Manager, Hive
等のレポジトリ)
Oracle Big Data SQL
は、Hadoop
を利用したEngineered System
である、Oracle Big Data
Appliance
上で稼働するオプションソフトウェアですOracle Big Data Appliance
Oracle Exadata
Oracle 12c
Exadata – Big Data Appliance
間は、Infiniband
で結線されている必要がありますBig Data SQL のプロセス
Data Data Data
BDSQLSRV
BDSQLRS BDSQLMS
InfiniBand
RDBMS HDFS
BDSCLI
Data Node
Config
接続情報Agent
Oracle Big Data Appliance Exadata Database Server
$ORACLE_HOME /bigdatasql
extprocbds_
クラスタ名•Big Data SQL Server(BDSQLSRV)
は、DB Server
との通信を担う。Data Node
と通信する事でHDFS
からデータを取得する•Management Server (BDSQLMS)
はBDSCLI
から設定変更、アラート履歴表示、メトリック表示、メンテナンス操作等を管理ソフトウェア設定手順
項番 設定対象 設定項目 設定概要
1 Exadata 12.1.0.2
へのバージョンアップOracle Database
の12.1.0.2
へのバージョンアップおよび対 応するStorage Server Software
へのバージョンアップ2 Exadata Big Data SQL
用前提パッチの適用
(Oracle Database
側)
Big Data SQL
利用の前提となるOracle Database
側のパッチpatch#19377855
の適用(opatch
によるパッチ適用)
3 Big Data Appliance Big Data SQL
用前提パッチの 適用(Big Data Appliance
側)
Big Data SQL
利用の前提となるOracle Database
側のパッチpatch#19607796
の適用4 Big Data Appliance Big Data Appliance
側でのBig Data SQL
の有効化Big Data Appliance
の有効化コマンドを実行し、Big Data Appliance
側でBig Data SQL
を利用可能にします5 Exadata Exadata
側でのBig Data SQL
の 設定Big Data Appliance
で生成されるコマンドを、Exadata
の各Database Server
で実行し、Exadata
側にBig Data SQL
の設 定を行います前提:
Exadata
およびBig Data Appliance
は設置済Big Data Appliance
はVersion4.0
でセットアップ済み運用・監視 (Cloudera Manager)
監視 リソース制御
Cloudera Manager
でプ ロセスのステータス監 視や起動・停止が可能CPU
やメモリなどの リソース制御はcgroup
により行うOracle Enterprise Manager と Cloudera Manager の連携方式
Big Data Appliance Enterprise Manager
(Oracle Management Service)
Enterprise Manager
for Big Data Appliance
Plugin
Cloudera Manager
サービス監視 ヘルスチェック
リソース監視 サービス設定 サービス 起動・停止 サービス追加
リソース・死活監視
インシデント管理
Cloudera Manager
からの管理が必要な項目 サーバー・スイッチ・PDU
AWR レポートの例
Big Data Appliance
側でのSmart Scan
に関する待機イベント1 2 3
統計値
①
cell XT granule bytes requested for predicate offload BDS
がSelect
対象とするデータのサイズ(バイト)②
cell XT granules requested for predicate offload BDS
のリクエスト数③