hadoop source code reading #17

64
アプリケーションエンジニアからみたTez @marblejenka

Upload: shingo-furuyama

Post on 25-Jan-2015

2.247 views

Category:

Technology


0 download

DESCRIPTION

Slide for Japanese Hadoop community meetup

TRANSCRIPT

Page 1: Hadoop Source Code Reading #17

アプリケーションエンジニアからみたTez!

@marblejenka

Page 2: Hadoop Source Code Reading #17

自己紹介

Page 3: Hadoop Source Code Reading #17

@marblejenka

• アプリケーション開発(分析と実装)が生業!

• Simplex Technology→個人事業主→Nautilus Technologies→個人事業主→ナウでヤングなウェッブ企業←いまここ!

• いまの勤め先に共有のHadoopクラスタがあるものの、維持管理には関与していない

Page 4: Hadoop Source Code Reading #17

本のレビューとかしました

https://www.packtpub.com/big-data-and-business-intelligence/pig-design-patterns

Page 5: Hadoop Source Code Reading #17

この豚野郎!

Page 6: Hadoop Source Code Reading #17

お題

Page 7: Hadoop Source Code Reading #17

アプリケーションエンジニアからみたTez

Page 8: Hadoop Source Code Reading #17

視点を限定している理由

• とくにないです(⌒▽⌒)

• あまりお題は気にせず僕が気にしてたところをまとめて説明する感じで!

• とはいえ気にするところがアプリケーションエンジニア的感があるかもくらい

Page 9: Hadoop Source Code Reading #17

Tezと私

• あまり本格的にさわってません!

• お仕事だと手元に要件に合うアプリケーションがない(転職したばかりなので)!

• もしかして:MapReduceでもいいかも

Page 10: Hadoop Source Code Reading #17

目次

• Tezとその周辺!

• Tezによるアプリケーションの開発

Page 11: Hadoop Source Code Reading #17

Tezとその周辺

Page 12: Hadoop Source Code Reading #17

Tezとその周辺

• Tezをつくりはじめたモチベーション!

• Tezまわりの理論や実装!

• つくっているひとたち

Page 13: Hadoop Source Code Reading #17

Tezをつくりはじめたモチベーション

Page 14: Hadoop Source Code Reading #17

Proposalによると…

Tez is a proposal to develop a generic application which can be used to process complex data-processing task DAGs and runs natively on Apache Hadoop YARN. YARN is a generic

resource-management system on which currently applications like MapReduce already

exist. MapReduce is a specific, and constrained, DAG - which is not optimal for several frameworks like

Apache Hive and Apache Pig. Furthermore, we propose to develop a re-usable set of libraries of data-processing primitives such as sorting, merging, data-shuffling,

intermediate data management etc. which are necessary for Tez which we envision can be used directly by other

projects. http://wiki.apache.org/incubator/TezProposal

Page 15: Hadoop Source Code Reading #17

Backgroundは…

Apache Hadoop MapReduce has emerged as the assembly-language on which other frameworks like

Apache Pig and Apache Hive have been built. However, it has been well accepted that MapReduce produces very constrained task DAGs for each job which results in Apache Pig and Apache Hive requiring multiple MapReduce jobs for several queries. By providing a more expressive DAG of

tasks for a job, Tez attempts to provide significantly enhanced data-processing capabilities for projects

like Apache Pig, Apache Hive, Cascading etc.http://wiki.apache.org/incubator/TezProposal

Page 16: Hadoop Source Code Reading #17

ようするに

• HiveやPig にMapReuceを生成させようとするのは不自然!

• HiveやPigにもっといけてる(中間)表現を与えたい

Page 17: Hadoop Source Code Reading #17

YARN化の流れから見ると…

• YARN化によって大規模なクラスタに対応できるようになった!

• YARN上のHadoop MapReduceではジョブ起動時にApplication Masterを起動させにいくのでMRv1よりも起動シーケンスがヘビーになる問題を抱えることに!

• YARNにあわせて実行エンジンを再設計したのがTez

Page 18: Hadoop Source Code Reading #17

Tezまわりの理論や実装

Page 19: Hadoop Source Code Reading #17

Tezの系譜

Dryad

(2007)

Nephele/PACTs

(2010)

Hyracks

(2011)

TezSpark

RDD

(2012)

Flink (Stratosphere)

MR

(2004)

Page 20: Hadoop Source Code Reading #17

Dryad

Page 21: Hadoop Source Code Reading #17

Dryad

• 演算の組み合わせをデータフローとして表現する!

• チャネルが多様で動的な最適化までする!

• TezやFlink、 (たぶん) Sparkをインスパイア!

• 実装(開発が頓挫したタイミングのもの?)もある!

• https://github.com/MicrosoftResearch/Dryad

Page 22: Hadoop Source Code Reading #17

すごくむずかしい

• パフォーマンス計測のためのクエリがじゅうりょくれんずこうか

• えんざんしがたくさんあってむずかしい

Page 23: Hadoop Source Code Reading #17

FlinkとNephele/PACTs

Page 24: Hadoop Source Code Reading #17

FlinkとNephele/PACTs

• Flink

• Nephele/PACTsの実装

• 商標権?かなにかの都合で、Apache Incubatorになった際にStratosphereから名前が変わった

• Nepheleが実行エンジン!

• PACTsがデータフロー(中間表現)の契約的なもの

Page 25: Hadoop Source Code Reading #17

PACTsの表現

↓拡張部分もあり

←MapReduceもできる

Page 26: Hadoop Source Code Reading #17

FlinkがTezの上位層的立ち位置になる?

http://berlinbuzzwords.de/sites/berlinbuzzwords.de/files/media/documents/stephan_ewen_-_stratosphere_at_bbuzz_2014.pdf #34

Page 27: Hadoop Source Code Reading #17

Cascadingはマネタイズ検討中?

Page 28: Hadoop Source Code Reading #17

Spark(vs Tez)

Page 29: Hadoop Source Code Reading #17

TezとSparkの違い

• データフローの(動的)最適化がある!

• RRDがない!

• 既存のHadoop MapReduce実装を使いまわせる(Sparkではたぶんできないはず)

Page 30: Hadoop Source Code Reading #17

Sparkと比べてTezの強いところ

• たぶんSparkより複雑なデータフローに強いはず!

• それPigとかAsakusa Frameworkで…

• とはいえ、MRR最適化が入らないのでAsakusa/MRよりはTezのほうがいけてるはず

• たぶんチューニングはSparkよりシビアでないはず(特にメモリ)

Page 31: Hadoop Source Code Reading #17

Tezをつくっているひとたち

Page 32: Hadoop Source Code Reading #17

Tezをつくっているひとたち

• Bikas Sahaさん

• 元MS

• http://www.linkedin.com/in/bikassaha

• Hitesh Shahさん

• 元Yahoo!

• http://www.linkedin.com/pub/hitesh-shah/2/573/961

Page 33: Hadoop Source Code Reading #17

ということで

Page 34: Hadoop Source Code Reading #17

期待できますね!

Page 35: Hadoop Source Code Reading #17

まとめ

• Tezさいつよ!

• 上位層はFlinkがいいかも?!

• 実証はしてない

Page 36: Hadoop Source Code Reading #17

Tezによるアプリケーションの開発

Page 37: Hadoop Source Code Reading #17

Tezによるアプリケーションの開発

• アプリケーションのつくりかた!

• デプロイと実行!

• 既存アプリケーションの移行

Page 38: Hadoop Source Code Reading #17

アプリケーションのつくりかた

Page 39: Hadoop Source Code Reading #17

Processorをつくります

• MapReduceでいうところのMaper/Reducer的なもの

Page 40: Hadoop Source Code Reading #17

Processorを組み合わせてDAGをつくります

• Hadoop MapReuceでいうところのJob的なもの

Page 41: Hadoop Source Code Reading #17

それではここでTezによるWordCountを..

Page 42: Hadoop Source Code Reading #17

テキストをトークンに分割するProcessor

https://github.com/marblejenka/tez/blob/master/tez-examples/src/main/java/org/apache/tez/examples/WordCount.java

Page 43: Hadoop Source Code Reading #17

WordごとにSummationするProcessor

https://github.com/marblejenka/tez/blob/master/tez-examples/src/main/java/org/apache/tez/examples/WordCount.java

Page 44: Hadoop Source Code Reading #17

ProcessorからVertexを生成して…

https://github.com/marblejenka/tez/blob/master/tez-examples/src/main/java/org/apache/tez/examples/WordCount.java

Page 45: Hadoop Source Code Reading #17

DAGを生成して…実行!

https://github.com/marblejenka/tez/blob/master/tez-examples/src/main/java/org/apache/tez/examples/WordCount.java

Page 46: Hadoop Source Code Reading #17

実装の特徴

• このへんまでだとあまりMapReduceとかわらない!

• SimpleMRProcessorとか言っている

• テストは書きやすくなさそう

• もともとMapReduceの拡張がモチベーションなので…

• Eventの概念があるんだけど使い方/使っているところが見つからなかった!

• 動的最適化と関連して重要なはず

Page 47: Hadoop Source Code Reading #17

デプロイと実行

Page 48: Hadoop Source Code Reading #17

Tezのデプロイメント

• すごく簡単!

• HDFSに依存Jarを配置

• Tezクライアント(アプリケーションを実行するプロセス)で、依存Jarをclasspathに通しておく

Page 49: Hadoop Source Code Reading #17

Tez方式のいいところ• 複数のバージョンをインストールできるので、共用クラスタでも他のユーザーの都合を気にする必要がない!

• リソースはYARNで分離されているので気にしなくてもよい(気にしなくてもいい運用になっていれば)

Page 50: Hadoop Source Code Reading #17

実行状態の可視化

• Swimlanes

• アプリケーションの実行状態を可視化するもの

• History Logをつかうので、実行中のアプリケーションの可視化はたぶんむり

• https://github.com/marblejenka/tez/tree/master/tez-tools/swimlanes

• 性能のトレーサビリティが担保できる点で有用

Page 51: Hadoop Source Code Reading #17

Swimlanesの出力イメージ

https://issues.apache.org/jira/browse/TEZ-1332 http://people.apache.org/~gopalv/query27.svg

Page 52: Hadoop Source Code Reading #17

既存アプリケーションの移行

Page 53: Hadoop Source Code Reading #17

Sparkの場合

• アプリケーションの書き直しが必要になる(はず)!

• まあしょうがない

http://blog.cloudera.com/blog/2014/09/how-to-translate-from-mapreduce-to-apache-spark/

Page 54: Hadoop Source Code Reading #17

Tezの場合

• TezはMR用のProcessorを用意して吸収

https://github.com/marblejenka/tez/blob/master/tez-mapreduce/src/main/java/org/apache/tez/mapreduce/processor/map/MapProcessor.java

Page 55: Hadoop Source Code Reading #17

移行のしやすさ

• Pig/Hive

• たぶんxxx.execution.engine=tezとかでおk

• ほかにもやるべきことはありそう

• 生MapReduce

• Jobを生成しているところをTez風に実装しなおす必要あり

• OozieでMRを分割して呼び出し順序をXMLで制御させていると大変かも

Page 56: Hadoop Source Code Reading #17

どのタイミングで移行するか?

• Incubation期はおわった!

• 0.5.0がリリース済み!

• 1.0.0とか待つ?

Page 57: Hadoop Source Code Reading #17

0.2.0-incubatorのころ

• 結構いまいちだった!

• やたらアプリケーションコードで実行制御させようという感じ(下記リンク参照)

• だいぶつかえる感でてきたと思う

https://github.com/apache/incubator-tez/blob/branch-0.2.0/tez-mapreduce-examples/src/main/java/org/apache/tez/mapreduce/examples/OrderedWordCount.java#L286

Page 58: Hadoop Source Code Reading #17

ところが

Page 59: Hadoop Source Code Reading #17

DAGがTopologyになったら…

• 本気だそうと思ってたけど…

• https://issues.apache.org/jira/browse/TEZ-699

https://github.com/marblejenka/tez/commit/7aa927a72f8142a5d6e05531fd948dbff85493a9#diff-32668c1a051521255d6efb32e41f0621L65

Page 60: Hadoop Source Code Reading #17

とはいえ• 黙ってても勝手に各ディストリビューションに入るのではないかと思われる!

• HortonworksがMapReduceをLegacy Batchとか言いはじめたらデフォルトが変わるフラグかも

• それでも、MapReduceをなくすということも考えづらいので、クリティカルにはならないはず

• あんまり導入にセンシティブにならなくてもよいと思う!

• ただし並行稼働は必須だと思います

Page 61: Hadoop Source Code Reading #17

まとめ

Page 62: Hadoop Source Code Reading #17

Tezどうなんでしょう?

• Dryadの流れを汲んだMapReduceの正統継承者的存在で発展に期待がもてますね!!

• Processorを生で書くのは時期尚早感ありなのでPigやHive、あとはFlinkをつかおう!

• Hadoop MapReduceより取り回しがよさそうな仕組みもあるよ

Page 63: Hadoop Source Code Reading #17

ご参考

• Dryadもとネタ!

• http://dl.acm.org/citation.cfm?id=1273005

• Nephele/PACTsもとネタ!

• http://dl.acm.org/citation.cfm?id=1807148

• TezとDryadの関係について!

• http://yhemanth.wordpress.com/2013/11/07/comparing-apache-tez-and-microsoft-dryad/

Page 64: Hadoop Source Code Reading #17

Thank You