Hadoop Source Code Reading #17

Preview:

DESCRIPTION

Slide for Japanese Hadoop community meetup

Citation preview

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

@marblejenka

自己紹介

@marblejenka

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

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

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

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

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

この豚野郎!

お題

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

視点を限定している理由

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

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

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

Tezと私

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

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

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

目次

• Tezとその周辺!

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

Tezとその周辺

Tezとその周辺

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

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

• つくっているひとたち

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

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

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

ようするに

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

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

YARN化の流れから見ると…

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

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

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

Tezまわりの理論や実装

Tezの系譜

Dryad

(2007)

Nephele/PACTs

(2010)

Hyracks

(2011)

TezSpark

RDD

(2012)

Flink (Stratosphere)

MR

(2004)

Dryad

Dryad

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

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

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

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

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

すごくむずかしい

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

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

FlinkとNephele/PACTs

FlinkとNephele/PACTs

• Flink

• Nephele/PACTsの実装

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

• Nepheleが実行エンジン!

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

PACTsの表現

↓拡張部分もあり

←MapReduceもできる

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

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

Cascadingはマネタイズ検討中?

Spark(vs Tez)

TezとSparkの違い

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

• RRDがない!

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

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

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

• それPigとかAsakusa Frameworkで…

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

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

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

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

• Bikas Sahaさん

• 元MS

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

• Hitesh Shahさん

• 元Yahoo!

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

ということで

期待できますね!

まとめ

• Tezさいつよ!

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

• 実証はしてない

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

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

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

• デプロイと実行!

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

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

Processorをつくります

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

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

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

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

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

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

WordごとにSummationするProcessor

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

ProcessorからVertexを生成して…

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

DAGを生成して…実行!

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

実装の特徴

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

• SimpleMRProcessorとか言っている

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

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

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

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

デプロイと実行

Tezのデプロイメント

• すごく簡単!

• HDFSに依存Jarを配置

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

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

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

実行状態の可視化

• Swimlanes

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

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

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

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

Swimlanesの出力イメージ

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

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

Sparkの場合

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

• まあしょうがない

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

Tezの場合

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

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

移行のしやすさ

• Pig/Hive

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

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

• 生MapReduce

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

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

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

• Incubation期はおわった!

• 0.5.0がリリース済み!

• 1.0.0とか待つ?

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

ところが

DAGがTopologyになったら…

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

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

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

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

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

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

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

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

まとめ

Tezどうなんでしょう?

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

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

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

ご参考

• 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/

Thank You

Recommended