apache hiveの今とこれから - 2016
TRANSCRIPT
Apache Hiveの今とこれからJoeOoura&YutaImai2016/4/22
©HortonworksInc.2011–2015.AllRightsReserved
2 ©HortonworksInc.2011–2016.AllRightsReserved
はじめに
à 質問はQUESTIONSというボタンからお願いします。プレゼンター以外には⾒えません。
à Twitter経由でもコメント、質問、⼤歓迎です! #hwxjp
3 ©HortonworksInc.2011–2016.AllRightsReserved
自己紹介 Ã ⼤浦 譲太郎 Twitter:@JOOOURAÃ 5歳児と8歳児の⽗Ã サーバ、ストレージのシステム営業を経て2011年に フラッシュメモリストレージ企業の⽇本法⼈⽴ち上げに参画。Evangelist、プリセールスSE、広報、営業など⼀通りをカバーエンタープライズフラッシュの代名詞ともなるioDriveシリーズを⽇本国内の通信キャリア、⾦融機関、WEBサービス事業者、アドテク、DC事業者に多数導⼊。Ã 2016年1⽉より、ホートンワークスジャパンの⼆⼈⽬の
営業として参画。現在はエヴァンジェリスト活動及びエンタープライズ向けセールス、パートナー⽀援を⾏なっている。
4 ©HortonworksInc.2011–2016.AllRightsReserved
About Hortonworks
お客様との歩み • ~800社(2016年2月現在)• 152社は2015年第三四半期で• 2015年10月NASDAQへ上場:HDP
The Leader in Connected Data Platforms • HortonworksDataFlowfordatainmoNon• HortonworksDataPlaOormfordataatrest• PoweringnewmoderndataapplicaNons
Partner for Customer Success • Leaderinopen-sourcecommunity,focusedoninnovaNontomeetenterpriseneeds
• UnrivaledsupportsubscripNons
Founded in 2011
Yahoo! で初代の Hadoop 開発を手がけたアーキテクト、デベロッパー、オ
ペレータ 24名によって創立
1000+ E M P L O Y E E S
1500+ E C O S Y S T E M
PA R T N E R S
5 ©HortonworksInc.2011–2016.AllRightsReserved
Our Model: Drive an Enterprise-focused Roadmap
1. InnovateExis6ngProjects– Hive/SNnger,YARN,HDFS,commonops&securityviaAmbari&Ranger
2. IncubateNewProjects– Metron(wasOpenSOC),Ranger,Knox,Atlas,Falcon,Ambari,Tez,etc.
3. AcquireIP&Contribute
– AcquiredXASecureandcreatedApacheRanger;contributedOpenSOC
4. Partner&DeliverJointSolu6ons– Microsod,EMC,HP,SAS,Pivotal,RedHat,Teradata,etc.
5. RallytheEcosystem
– FastSQLviaSNngeriniNaNve,DataGovernanceiniNaNve,ODPi
Data
Acce
ss
(batc
h, int
erac
tive,
real
time)
Int
egra
tion &
Go
vern
ance
Op
erati
ons
Secu
rity
ApacheProject HortonworksCommiNers
HortonworksPMC
HWX%ofCommiNers
Hadoop 29 24 31%Accumulo 2 2 9%Calcite 6 3 43%HBase 8 5 17%Hive 19 11 38%NiFi 5 5 42%
Phoenix 5 5 22%Pig 5 5 24%
Slider 12 12 100%Spark 1 0 2%Storm 4 4 19%Tez 15 15 44%Atlas 7 0 35%Falcon 7 5 41%Flume 1 1 4%KaZa 0 0 0%Sqoop 1 1 4%Ambari 39 30 76%Oozie 4 2 22%
Zookeeper 2 1 13%Knox 12 2 80%Ranger 13 11 76%
TOTAL 197 144
Source:ApacheSodwareFoundaNon.AsofOctober5,2015.Acommi'erissomeonewhohas“earnedtheirstripes”withintheApachecommunityandhastheability
tocommitcodedirectlytotheircorrespondingApacheprojectsourcecoderepository
6 ©HortonworksInc.2011–2016.AllRightsReservedPage6 ©HortonworksInc.2011–2015.AllRightsReserved
100%OpenSourceConnectedDataPlaaorms
Eliminates Risk ofvendorlock-inbydelivering100%Apacheopensourcetechnology
Maximizes Community Innovation withhundredsofdevelopersacrosshundredsofcompanies
IntegratesSeamlesslythroughcommijedco-engineeringpartnershipswithotherleadingtechnologies
M A X I M U M C O M M U N I T Y I N N O VAT I O N
T H E I N N O VAT I O N A D VA N TA G E
P R O P R I E T A R Y H A D O O P
T I M E
INN
OV
AT
ION
O P E N C O M M U N I T Y
7 ©HortonworksInc.2011–2016.AllRightsReserved
自己紹介 à 今井 雄太 Twijer:@imai_factoryà SoluNonsEngineerà 広告配信サーバーのレポート作成のためにMapReduce(perl+streaming!)を使ったのがHadoopとの出会い。
à その後、AWSにてアドテクやゲームのお客様を担当しつつ、EMRやS3などのビッグデータなプロダクトを主に担当。そんなつながりでHortonworksに入社してHadoopをやっています。
8 ©HortonworksInc.2011–2016.AllRightsReserved
à ~Hive1.2.1– Tez– Cost Based Optimizer(CBO)– ORC File format– Vectorization
à Hive2.0– LLAP
最近のApache Hive: Key highlights
9 ©HortonworksInc.2011–2016.AllRightsReserved
最近のApache Hive: Key highlights
à ~Hive1.2.1– Tez– Cost Based Optimizer(CBO)– ORC File format– Vectorization
à Hive2.0– LLAP
Stinger InitiativeHiveを100倍以上⾼速化
Already available on HDP!
10 ©HortonworksInc.2011–2016.AllRightsReserved
Sub-secondショートクエリで
1秒以下のレスポンスを⽬指す
à ~Hive1.2.1– Tez– Cost Based Optimizer(CBO)– ORC File format– Vectorization
à Hive2.0– LLAP
Stinger InitiativeHiveを100倍以上⾼速化
Already available on HDP!
最近のApache Hive: Key highlights
11 ©HortonworksInc.2011–2016.AllRightsReserved
à いずれの改善も数⾏の設定もしくはコマンドで利⽤可能です。– Hive2.0については現時点(4/22)においてまだHDPに取り込まれていません。
à 今⽇は、それらの仕組みにフォーカスしてお話します。
最近のApache Hive: Key highlights
12 ©HortonworksInc.2011–2016.AllRightsReserved
Hive performance recap • Stinger: • ApacheHiveのパフォーマンスを100倍にするというゴールのもとに始まったプロジェクト
VectorizedSQLEngine,TezExecuNonEngine,ORCColumnarformatCostBasedOpNmizer
Hive0.10BatchProcessing
100-150xQuerySpeedupHive0.14HumanInteracNve(5seconds)
13 ©HortonworksInc.2011–2016.AllRightsReserved
TPC-DS Benchmark at 30 Terabyte Scale
• TPC-DSより 50 のサンプルクエリを 30 terabyte のスケールで実⾏• 平均 52 倍の速度アップ, 最⼤ 160 倍の速度アップ• ベンチマークの総実⾏時間が 7.8 ⽇ から 9.3 時間に短縮• Hive 14に追加された Cost-Based Optimizer が更に 2.5倍の速度アップ実現
14 ©HortonworksInc.2011–2016.AllRightsReserved
TezBeyond MapReduce
15 ©HortonworksInc.2011–2016.AllRightsReserved
Apache Tez
Page 15
à データ処理アプリのための汎⽤分散処理エンジン– アプリ(フレームワーク)向け、エンドユーザー向けではない– Hive on Tez, Pig on Tez, Cascading on Tez, …
à MapReduceの教訓を活かした結果– ⼤幅なパフォーマンス改善– バッチ、インタラクティブ– Petabytesスケール
à YARNの上で動かす– クラスタリソースの活⽤ DAG(無閉路有向グラフ)
16 ©HortonworksInc.2011–2016.AllRightsReserved
MapReduce & Tez
M M M
R R
M M
R
M M
R
M M
R
HDFS
HDFS
HDFS
M M M
R R
R
M M
R
R
Map – Reduce Intermediate results in HDFS
Tez Optimized Pipeline
• 中間データをHDFSに書き出さない
• Map-Reduce-Reduceのような構成を取ることができる
• セッションによるコンテナの再利⽤
• ジョブを通してのパイプラインの最適化
17 ©HortonworksInc.2011–2016.AllRightsReserved
What is DAG & Why DAG
ProjectionFilterGroupBy…
JoinUnionIntersect…
Split…
• Directed Acyclic Graph(無閉路有向グラフ)• どんなに複雑なDAGでも、基本的には以下の3つのパターンに分類ができる– Sequential– Merge– Divide
18 ©HortonworksInc.2011–2016.AllRightsReserved
Tezの⼤まかな動き
ProcessorInput Output
19 ©HortonworksInc.2011–2016.AllRightsReserved
Tez – Key benefits
• DAGの表現⼒• Easier to express computation in DAG
• 中間データをHDFSに吐き出さない• レイテンシ• NameNodeへの負荷
• Tezセッション/コンテナ再利⽤• AM/タスクコンテナアロケーションのオーバーヘッド• ResourceManagerの負荷• Object Registryによるデータ使い回し(MapJoin⽤のテーブルなど)• JITによる実⾏コードの最適化
• DAG全体を⾒渡しての最適化
20 ©HortonworksInc.2011–2016.AllRightsReserved
Tez - architecture
à Client– Starts session– Submits DAG
à Application Master– DAG Scheduler– Task Scheduler– Vertex Manager
à TezTask Containers– Execution
21 ©HortonworksInc.2011–2016.AllRightsReserved
Tez - architecture
à Client– Starts session– Submits DAG
à Application Master– DAG Scheduler– Task Scheduler– Vertex Manager
à TezTask Containers– Execution
22 ©HortonworksInc.2011–2016.AllRightsReserved
23 ©HortonworksInc.2011–2016.AllRightsReserved
ORCOptimized Row Columnar
24 ©HortonworksInc.2011–2016.AllRightsReserved
Hadoopで使われるファイルフォーマット
• Text• SequenceFile• RCFile
• + Can be read required column• + Compression on each column• - type-free binary blobs• - no index• - Compression by stream-based codec
25 ©HortonworksInc.2011–2016.AllRightsReserved
ORCFile – Hiveのためのカラム型ストレージ
à High Compression– カラムごとに適⽤されるデータの型スペシフィックな圧縮– ストリーム単位でのZLIBやSNAPPYによる圧縮
à High Performance– File, Stripe, Rowそれぞれのレベルでのインデックス、メタデータ– Predicate Pushdown
à Flexible Data Model– Complex types(struct, list, map, union)– New types(datetime, decimal)
Page 25
26 ©HortonworksInc.2011–2016.AllRightsReserved
ORC at Facebook
Savedmorethan1,400serversworthofstorage.(2)
Compressioni CompressionraNoincreasedfrom5xto8xglobally.(2)
Compressioni
27 ©HortonworksInc.2011–2016.AllRightsReserved
ORC at Spotify
16xlessHDFSreadwhenusingORCversusAvro.(3)
IOi 32xlessCPUwhenusingORCversusAvro.(3)
CPUi
28 ©HortonworksInc.2011–2016.AllRightsReserved
ORC at Yahoo!
6-50xspeedupwhenusingORCversusTextFile.(4)
Speedupi 1.6-30xspeedupwhenusingORCversusRCFile.(4)
Speedupi
29 ©HortonworksInc.2011–2016.AllRightsReserved
ORCFile – ファイルフォーマット
30 ©HortonworksInc.2011–2016.AllRightsReserved
ORCFile – ファイルフォーマット
デフォルトで256MBという⼤きなチャンクサイズでファイルの中⾝を分割
Stripe
31 ©HortonworksInc.2011–2016.AllRightsReserved
ORCFile – ファイルフォーマット
それぞれのStripeの場所、スキーマ、ファイル全体におけるそれぞれのカラムのmin/max/sum値を保持
File Footer
32 ©HortonworksInc.2011–2016.AllRightsReserved
ファイルの圧縮形式と、圧縮済みのFooterのサイズを保持。その他カスタムメタデータも保持可能。最初にここだけ読み取られる。
Post Script
ORCFile – ファイルフォーマット
33 ©HortonworksInc.2011–2016.AllRightsReservedPage 33
…
…
…
…
…
Stream: INDEX
Stream: BROOM FILTER
Stream: DATA
Stream: LENGTH
Stream: DICTIONARY
Row Group(Default: 10K records for each RG)
ORCFile – ファイルフォーマット
34 ©HortonworksInc.2011–2016.AllRightsReserved
File-Column1-min-max-sum-hasNull-Column2-Column3-ColumnN-Compression-FooterLength
Stripe1-Column1-min-max-sum-hasNull-Column2-Column3-ColumnN
Column1
RG1-min-max-sum-hasNull-pos
RG1-min-max-sum-hasNull-pos
…
ColumnN
RG1-min-max-sum-hasNull-pos
RG1-min-max-sum-hasNull-pos
……
StripeN
…
ORCFile – ファイルフォーマット
35 ©HortonworksInc.2011–2016.AllRightsReserved
Compression
à データの型スペシフィックな圧縮(Light-Weight Compression)– カラムごとに適⽤される圧縮– 必ず適⽤される– RLE, Direct, Patch Base, Delta
à データストリームの圧縮(Generic Compression)– ファイル全体を通して共通で適⽤される圧縮– 実際にはそれぞれのStream、Footerに適⽤される– 上記のLight-Weight Compressionが適⽤された上に適⽤される– NONE, ZLIB, SNAPPY, LZO
Page 35
36 ©HortonworksInc.2011–2016.AllRightsReservedPage 36
High Compression
37 ©HortonworksInc.2011–2016.AllRightsReserved
High Performance
FileレベルのIndex
StripeレベルのIndex
RowGroupレベルのIndex
38 ©HortonworksInc.2011–2016.AllRightsReserved
ORCの情報をダンプする
orcfiledumphive --service orcfiledump /apps/hive/warehouse/rankings/000045_0
RowGroupごとのインデックス情報を含めるには rowindex <カラム番号> を指定。0を指定すれば全カラムの情報がとれるhive --service orcfiledump --rowindex 1 /apps/hive/warehouse/rankings/000045_0
Page 38
39 ©HortonworksInc.2011–2016.AllRightsReserved
File Statistics
File Statistics: Column 0: count: 1620325 hasNull: false Column 1: count: 1620325 hasNull: false min: 1.0.100.215 max: 99.99.97.199 sum: 21531540 Column 2: count: 1620325 hasNull: false min…max: …sum: 88890214 Column 3: count: 1620325 hasNull: false min: 1970-01-01 max: 2012-04-30 Column 4: count: 1620325 hasNull: false min: …-8 max: …sum: 810757.3001111746 Column 5: count: 1620325 hasNull: false min… max: … sum: 85357610 Column 6: count: 1620325 hasNull: false min: ALB max: ZAF sum: 4860975
Page 39
40 ©HortonworksInc.2011–2016.AllRightsReserved
Stripe Statistics
Stripe Statistics: Stripe 1: Column 0: count: 1545000 hasNull: false Column 1: count: 1545000 hasNull: false min: 1.0.100.215 max: 99.99.97.199 sum: 20530443 Column 2: count: 1545000 hasNull: false min: … max: … sum: 84763272 Column 3: count: 1545000 hasNull: false min: 1970-01-01 max: 2012-04-30 Column 4: count: 1545000 hasNull: false min: … max: … sum: 773016.625769496 Column 5: count: 1545000 hasNull: false min: … max: … sum: 81385950 Column 6: count: 1545000 hasNull: false min: ALB max: ZAF sum: 4635000
Page 40
41 ©HortonworksInc.2011–2016.AllRightsReserved
Row Group Indexes
Row group indices for column 1: Entry 0: count: 10000 hasNull: false min: 1.101.125.195 max: 99.98.152.204 sum: 132919 positions: 0,0,0,0,0 Entry 1: count: 10000 hasNull: false min: 1.104.147.167 max: 99.85.51.213 sum: 132976 positions: 0,132919,0,6119,52 Entry 2: count: 10000 hasNull: false min: 1.1.228.147 max: 99.88.166.75 sum: 132826 positions: 120403,3751,0,12339,3
Entry 3: count: 10000 hasNull: false min: 1.104.90.89 max: 99.96.30.136 sum: 132853 positions: 120403,136577,0,18482,4 Entry 4: count: 10000 hasNull: false min: 1.11.252.134 max: 99.71.248.30 sum: 132856 positions: 240743,7286,0,24600,2 Entry 5: count: 10000 hasNull: false min: 1.119.19.221 max: 99.96.184.74 sum: 132977 positions: 240743,140142,0,30713,8 Entry 6: count: 10000 hasNull: false min: 1.1.244.95 max: 99.99.242.168 sum: 132735 positions: 360961,10975,0,36946,1
Entry 7: count: 10000 hasNull: false min: 1.1.146.20 max: 99.93.105.159 sum: 132869 positions: 360961,143710,0,43145,2
Page 41
42 ©HortonworksInc.2011–2016.AllRightsReserved
SARG & Predicate Pushdown
à SARG: Search ARGument
à SELECT COUNT(*) FROM CUSTOMER WHERE CUSTOMER.state = ʻCAʼ;
à 上記のようなクエリにおいて、RecordReaderはwhere clauseにマッチするORCファイル、Stripe、RowGroupだけをストレージから読み出す
Page 42
43 ©HortonworksInc.2011–2016.AllRightsReserved
Bloom Filter Index
1 0 1 110 1 0 11
x y z
w
m=10k=3
m個の要素を持つ配列に対して⼊⼒値に対してk回のハッシュ関数をかけて結果を格納しておく。
確認対象の値をk回ハッシュして、結果がすべて1であれば、そのインデックスに値が含まれる。そうでなければ含まれないのでスキップする。偽陽性の結果になる可能性もある。
44 ©HortonworksInc.2011–2016.AllRightsReserved
Bloom Filter Indexes Improvements
5999989709
540,000
10,000
NoIndexes Min-MaxIndexes BloomfilterIndexes
select*fromtpch_1000.lineitemwherel_orderkey=1212000001;(logscale–smallerisbeNer)
RowsRead
45 ©HortonworksInc.2011–2016.AllRightsReserved
Bloom Filter Indexes Improvements
74
4.51.34
NoIndexes Min-MaxIndexes BloomfilterIndexes
select*fromtpch_1000.lineitemwherel_orderkey=1212000001;(smallerisbeNer)
TimeTaken(seconds)
~16ximprovement
~3.3ximprovement
46 ©HortonworksInc.2011–2016.AllRightsReserved
ORCFile – テーブル定義の例
à テーブルまたはパーティション別に定義à 選べられる圧縮コーデック
Page 46
create table Addresses ( name string, street string, city string, state string, zip int) stored as orc tblproperties ("orc.compress"=”ZLIB");
47 ©HortonworksInc.2011–2016.AllRightsReserved
ORCFile – テキストからORCに変換
à ORCを使わない理由はないà SQL 1つでテキストからORCに変換
Page 47
-- Create Text & ORC tablesCREATE TABLE test_details_txt( visit_id INT, store_id SMALLINT) STORED AS TEXTFILE;CREATE TABLE test_details_orc( visit_id INT, store_id SMALLINT) STORED AS ORC;
-- Load into Text tableLOAD DATA LOCAL INPATH '/home/user/test_details.csv' INTO TABLE test_details_txt;
-- Copy to ORC tableINSERT OVERWRITE INTO test_details_orc SELECT * FROM test_details_txt;
48 ©HortonworksInc.2011–2016.AllRightsReserved
Vectorized Query ExecutionProcess 1024 Rows at a Time
49 ©HortonworksInc.2011–2016.AllRightsReserved
Vectorization – ベクターSQLエンジン
à 機能:– 1⾏づつの代わりに、⼀回に1024⾏を処理– モーデンなハードウェア アーキテクチャの活⽤
à 利点:– ⼤きいクエリは最⼤3倍早い– CPU使⽤時間を削減、クラスタリソースの有効利⽤
Page 49
50 ©HortonworksInc.2011–2016.AllRightsReserved
Column Store Layout
Table
Row Store Column Store
A B1 A1 B12 A2 B2
1A1B1
2A2B2
AA1A2
BB1B2
51 ©HortonworksInc.2011–2016.AllRightsReserved
Column Store Characteristics
Row Store• TextFile, SequenceFile, Avro• Slower read performance• Reads whole columns
• Lower compression ratio• Higher local cardinality
Column Store• RCFile, Parquet, ORC• Faster read performance• Reads needed columns only
• Higher compression ratio• Lower local cardinality
• Room for further optimization• Vectorization
52 ©HortonworksInc.2011–2016.AllRightsReserved
Hive Vectorization 2014
Rewriting Hive execution engine for performance• No method calls• Low instruction count• Cache locality to 1,024 values• No pipeline stalls• SIMD in Java 8But not excellent without SIMD
set hive.vectorized.execution.enabled = true;J. Sompolski, M. Zukowski, P. Boncz. Vectorization vs. Compilation in Query Execution. 2011
53 ©HortonworksInc.2011–2016.AllRightsReserved
Cost Based Optimizer
54 ©HortonworksInc.2011–2016.AllRightsReserved
Cost Based Optimizer
à Apache Calciteを利⽤à 何をしてくれるもの?
– Ordering joins– Bushy Join Tree– Converting join algorithms
à Paper: https://cwiki.apache.org/confluence/display/Hive/Cost-based+optimization+in+Hive
à Anatomy: http://hortonworks.com/blog/hive-0-14-cost-based-optimizer-cbo-technical-overview/
55 ©HortonworksInc.2011–2016.AllRightsReserved
MySQL
Splunk
Expression treeSELECT p.“product_name”, COUNT(*) AS cFROM “splunk”.”splunk” AS s JOIN “mysql”.”products” AS p ON s.”product_id” = p.”product_id”WHERE s.“action” = 'purchase'GROUP BY p.”product_name”ORDER BY c DESC
join
Key: product_id
group
Key: product_nameAgg: count
filter
Condition:action =
'purchase'
sort
Key: c DESC
scan
scan
Table: splunk
Table: products
56 ©HortonworksInc.2011–2016.AllRightsReserved
Splunk
Expression tree(optimized)
SELECT p.“product_name”, COUNT(*) AS cFROM “splunk”.”splunk” AS s JOIN “mysql”.”products” AS p ON s.”product_id” = p.”product_id”WHERE s.“action” = 'purchase'GROUP BY p.”product_name”ORDER BY c DESC
join
Key: product_id
group
Key: product_nameAgg: count
filter
Condition:action =
'purchase'
sort
Key: c DESC
scan
Table: splunk
MySQL
scan
Table: products
57 ©HortonworksInc.2011–2016.AllRightsReserved
Query preparation – Hive 0.13
SQL parser
Semantic analyzer
Logical Optimizer
Physical Optimizer
Abstract Syntax Tree
(AST)
Hive SQL
AnnotatedAST
Plan
Tez
Tuned Plan
58 ©HortonworksInc.2011–2016.AllRightsReserved
Query preparation – Hive 0.14
SQL parser
Semantic analyzer
Logical Optimizer
Physical Optimizer
Hive SQL
AST with optimized join-
ordering
Tez
Tuned Plan
Translate to
algebra
Optiq optimize
r
59 ©HortonworksInc.2011–2016.AllRightsReserved
Star schema
Sales Inventory
Time
Product
Customer
Warehouse
KeyFact tableDimension table Many-to-one relationship
60 ©HortonworksInc.2011–2016.AllRightsReserved
Query combining two stars
SELECT product.id, sum(sales.units), sum(inventory.on_hand)FROM sales ON …JOIN customer ON …JOIN time ON …JOIN product ON …JOIN inventory ON …JOIN warehouse ON …WHERE time.year = 2014AND time.quarter = ̒Q1ʼAND product.color = ̒RedʼAND warehouse.state = ̒WA̓GROUP BY …
Sales InventoryTime
Product
Customer
Warehouse
61 ©HortonworksInc.2011–2016.AllRightsReserved
Left-deep tree
“left-deep”ツリーすべてのジョインがシリアルに⾏われる。ジョインの順番は考慮されているが、ツリーの形は考慮されていない。
よくあるプラン:• 最⼤のテーブルを左下に置いてスタート• 絞り込みの⼤きいJoinから適⽤していく
Sales Customer
Time
Product
Inventory
Warehouse
62 ©HortonworksInc.2011–2016.AllRightsReserved
Bushy tree (Bush:低⽊、茂み)
Joinがどこで⾏われるかに制約をかけない“Bushes” はファクトテーブル (Sales and Inventory)と関連するディメンションテーブルで形成されるディメンションテーブルがフィルターの役割を果たす結果としてデータの読み込み⾏数やネットワークを介してのやり取りを少なくしていける
Sales Customer
Time
Product
Inventory Warehouse
63 ©HortonworksInc.2011–2016.AllRightsReserved
Cost variables
à Hr - This is the cost of Reading 1 byte from HDFS in nano seconds.à Hw - This is the cost of Writing 1 byte to HDFS in nano seconds.à Lr - This is the cost of Reading 1 byte from Local FS in nano seconds.à Lw - This is the cost of writing 1 byte to Local FS in nano seconds.à NEt – This is the average cost of transferring 1 byte over network in
the Hadoop cluster from any node to any node; expressed in nano seconds.
à T(R) - This is the number of tuples in the relation.à Tsz – Average size of the tuple in the relationà V(R, a) –The number of distinct values for attribute a in relation Rà CPUc – CPU cost for a comparison in nano seconds
64 ©HortonworksInc.2011–2016.AllRightsReserved
Assumed values
à CPUc = 1 nano secà NEt = 150 * CPUc nano secsà Lw = 4 * Netà Lr = 4 * Netà Hw = 10 * Lwà Hr = 1.5 * Lr
65 ©HortonworksInc.2011–2016.AllRightsReserved
Profile Hive queries
à hive.tez.exec.print.summary=true
←このへんで仕事してる
66 ©HortonworksInc.2011–2016.AllRightsReserved
LLAP: Live Long And ProcessChallenge for Sub-Second
67 ©HortonworksInc.2011–2016.AllRightsReserved
What is LLAP?• Hiveの処理実⾏のための常駐型プロセス• タスクの起動コストの低減• JITオプティマイザがより利きやすい
• プロセスではなくスレッド型のExecutor• メタデータやMapJoinのテーブルなどをタスク間で共
有できる
• IOの⾮同期化とキャッシュの導⼊• Query fragment API
Node
LLAP Process
Cache
Query Fragment
HDFS
Query Fragment
68 ©HortonworksInc.2011–2016.AllRightsReserved
What LLAP isn't• Hive execution engine (like Tez, MR, Spark…)• Execution enginesは処理の組み⽴てやを⾏う
• Not a storage layer• LLAPデーモンはステートレスで、データはHDFSをsource of truth
として利⽤する• Does not supersede existing Hive• Containerベースの実⾏も引き続き進化していく
69 ©HortonworksInc.2011–2016.AllRightsReserved
Example execution: MR vs Tez vs Tez+LLAP
M M M
R R
M MR
M M
R
M M
R
HDFS
HDFSHDFS
T T T
R R
R
T T
T
R
M M M
R R
R
M M
R
R
HDFSIn-Memorycolumnar cache
Map – ReduceIntermediate results in HDFS
TezOptimized Pipeline
Tez with LLAPResident process on Nodes
Map tasks read HDFS
70 ©HortonworksInc.2011–2016.AllRightsReserved
LLAP in your cluster• LLAPデーモンはYARN上で実⾏される• Apache Sliderがデーモン⽤コンテナのプロビジョンとリ
カバリを⾏う• Resource management via YARN delegation model
(WIP)• LLAP and containers dynamically balance resource
usage (WIP)
71 ©HortonworksInc.2011–2016.AllRightsReserved
Queryexecu6on
72 ©HortonworksInc.2011–2016.AllRightsReserved
• DAGによる処理の組み⽴てはそのまま利⽤される。Tezのランタイムもそのまま利⽤される。
• フラグメント/タスクはLLAPもしくは通常のコンテナ、AM内のいずれでも実⾏可能
• どこで実⾏されるかはHive Clientによって決定される• Configurable – all in LLAP, none in LLAP, intelligent mix
• LLAPにタスクを割り当てるポリシー(in auto mode)• No user code (or only blessed user code)• Data source – HDFS• ORC and vectorized execution (for now)
• Others can still run in LLAP in "all" mode, w/o IO elevator and cache• Data size limitations (avoid heavy / long running processing within LLAP)
Tez + LLAP – overview
73 ©HortonworksInc.2011–2016.AllRightsReserved
So…
M M M
R R
R
M M
R
R
Tez
74 ©HortonworksInc.2011–2016.AllRightsReserved
AM
So…
T T T
R R
R
T T
T
R
M M M
R R
R
M M
R
R
Tez Tez with LLAP (auto)
auto
75 ©HortonworksInc.2011–2016.AllRightsReserved
AM
AM
So…
T T T
R R
R
T T
T
R
M M M
R R
R
M M
R
R
Tez Tez with LLAP (auto)
T T T
R R
R
T T
T
R
Tez with LLAP (all)
allauto
76 ©HortonworksInc.2011–2016.AllRightsReserved
Scheduling for LLAP in Tez AM• Greedy scheduling per query• クラスタ全体が利⽤可能な前提でスケジューリングが⾏われる
• Schedule work to preferred location (HDFS locality)• 同じデータにアクセスする複数のクエリ間で、preferred locationの設定に
よって同じデーモン上でタスクを実⾏させることができる
77 ©HortonworksInc.2011–2016.AllRightsReserved
LLAP
Queue
Queuing fragments• LLAPデーモンはスレッドプールを使って
タスク/フラグメントを実⾏する
• 内部にキューを持っており、プラガブルな優先度付の仕組みもある
Executor Q1 Reducer 2
Executor Q1 Map 1
Executor Q1 Map 1
Executor Q3 Map 19
Q1 Reducer 2
Q1 Map 1
Q3 Map 19
Q1 Reducer 2
78 ©HortonworksInc.2011–2016.AllRightsReserved
LLAP Scheduling – pipelining and preemption• フラグメントは⼊⼒データが揃いきって
いなくても実⾏開始できる• ⼊⼒データが揃った時点で”finishable”と
いうフラグが付与される
LLAP
Queue Executor
Executor
Interactive query map 1/3
…
Interactive query map 3/3
Executor
Interactive query map 2/3
Wide query reduce
Well,10mapperoutof100aredone!
79 ©HortonworksInc.2011–2016.AllRightsReserved
LLAP Scheduling – pipelining and preemption• フラグメントは⼊⼒データが揃いきって
いなくても実⾏開始できる• ⼊⼒データが揃った時点で”finishable”と
いうフラグが付与される• finishableになるまでexecutorを解放はしない
LLAP
Queue Executor
Executor
Interactive query map 1/3
…
Interactive query map 3/3
Executor
Interactive query map 2/3
Wide query reduce
80 ©HortonworksInc.2011–2016.AllRightsReserved
LLAP Scheduling – pipelining and preemption• フラグメントは⼊⼒データが揃いきって
いなくても実⾏開始できる• ⼊⼒データが揃った時点で”finishable”と
いうフラグが付与される• finishableになるまでexecutorを解放はしない
LLAP
Queue Executor
Executor
Interactive query map 1/3
…
Interactive query map 3/3
Executor
Interactive query map 2/3
Wide query reduce
81 ©HortonworksInc.2011–2016.AllRightsReserved
LLAP Scheduling – pipelining and preemption• フラグメントは⼊⼒データが揃いきって
いなくても実⾏開始できる• ⼊⼒データが揃った時点で”finishable”と
いうフラグが付与される• finishableになるまでexecutorを解放はしない
• Non-finishableなフラグメントはプリエンプションされる
LLAP
Queue Executor
Executor
Interactive query map 1/3
…
Interactive query map 3/3
Executor
Interactive query map 2/3
Wide query reduce
82 ©HortonworksInc.2011–2016.AllRightsReserved
IOelevatorandotherinternals
83 ©HortonworksInc.2011–2016.AllRightsReserved
Asynchronous IO• これまでのHiveでは、IO
は同期的に⾏われていた• データの圧縮、⾮圧縮も
同期型だった
84 ©HortonworksInc.2011–2016.AllRightsReserved
Asynchronous IO• LLAPでは、IOエレベー
タースレッドがディスクIO、圧縮、などを⾮同期に執り⾏う
• IO threads can be spindle aware (WIP)
• Depending on workload, IO and processing threads can balance resource usage (throttle IO, etc.) (WIP)
85 ©HortonworksInc.2011–2016.AllRightsReserved
Caching and off-heap data• 解凍されたデータはoff-heapにキャッシュされる• キャッシュについてはGCを気にしないでいいように• HDFSのIOと解凍コストを排除。特にディメンションテーブ
ルに有効
• プラガブルなEviction Policy• 現在はFIFO, LRFUをサポート
86 ©HortonworksInc.2011–2016.AllRightsReserved
Other benefits• ファイルのメタデータやインデックスもキャッシュされる• Predicate Pushdownの⾼速化
• MapJoin⽤のハッシュテーブルやフラグメントの実⾏計画もJVM内で共有される
• タスク/フラグメントごとに実⾏計画のデシリアライズのコストが減る• Better use of JIT optimizer• 起動しっぱなしのデーモンなので、JITが仕事をするための時間がよ
り⻑く取れる• Especially good with vectorization!
87 ©HortonworksInc.2011–2016.AllRightsReserved
まとめ
88 ©HortonworksInc.2011–2016.AllRightsReserved
Sub-secondショートクエリで
1秒以下のレスポンスを⽬指す
à ~Hive1.2.1– Tez– Cost Based Optimizer(CBO)– ORC File format– Vectorization
à Hive2.0– LLAP
Stinger InitiativeHiveを100倍以上⾼速化
Already available on HDP!
最近のApache Hive: Key highlights