#Treasure DataのHadoop
Treasure Dataでは長年Hadoop1(CDH4)を使用してきましたが、太田の投稿にもあるように今年、徐々にHadoop2(HDP2)に移行してきました。Hadoop1でのユーザも残り数社となり、いよいよHadoop1とのお別れも近いこととなりました。そこでどんなことをやったかを振り返りで書いてみようと思います。
#いろいろな問題発生
Plazma
Treasure Dataでは既にいろんなところに既に出てはいますが、HDFSを使用せず(正確には中間処理には使用している)ストレージはPlazmaというカラムナDBを使用しています。この部分ではHiveの仕様が変わったせいもありIndex Push Downが上手く機能しないなんていう問題も起こりました。
Deadlock and Livelock
Treasure Dataはマルチテナントで運営しているため、通常のHadoopの使用方法よりもかなりハードな使い方をしているはずです。これにより、やたらとDeadlockやLivelock系のバグを引き当てました。。。当初はHadoop2.2.0系を使用していたのですが、Fairschedulerのバグが多くどうしようもなかったのでHadoop 2.4.0が出るまで待ちました。それでも、やはり違うところでバグを引き当てるのですが。こうなってくるといつまでたっても移行ができないので、パッチのバックポートや、ないところは作って投げる等の作業がすさまじく増えてきました。まぁYARN自体が枯れた技術じゃないので仕方ないのですが。
YARNだけにかぎらずHiveでも同様の現象が起きたりした箇所もパッチを当てたりしています。
運用
また、Hadoop1のころにはあってHadoop2(YARN)になってから無くなった機能で運用しづらいものや(例えば、コンソールから、Appのkillが出来ない等[YARN-3249])、YARNになってこれはあったほうが良いだろうというものはパッチを作って適用しました。これらは全てApache本体にも取り込まれています。
Hiveに関してもいくつかパッチを投げているのですが、まだ一つも取り込まれていません。やはり、チケットが作成される量(毎日すさまじい勢いでチケットが作られてます)とコミッター割合があってないんじゃないかなぁと。。。
パフォーマンス
実際問題、Hadoop1からHadoop2(Hiveのバージョンも上がってる)になってからパフォーマンスが出ないなんてことも起こりました。この問題はスタックトレースを取ってみてボトルネックになりそうな箇所を特定したりなんかもしました。Hiveなんかは汎用的に使えるようにみたいな機能も入ってたりしているのですが、実はこの機能自体がボトルネックになっていてパフォーマンスが出ないなんてこともわかり、Treasure Dataでは一切使わない機能なので、このパッチ自体をあえてリバートした結果10%ほど改善した等の例もあります。。。
一つ具体例を上げるとするとこの機能です[HIVE-5795]。簡単に言うとヘッダーやフッターを扱えるようにしようぜって機能です。パッチを見てもらえればわかりますが、あまり効率の良いものではないです。。。
この辺りのHive(0.13辺り)は個人的には鬼門だと思っていて、機能変更されたものが最新版ではやはり元に戻されたりなんかも目にしましたし、最新版ではバグが他の機能に吸収されて直ってたり(パッチは存在せず他の機能として修正されている。これは結構ツラい)しています。やはり、新たな機能を入れられたりしたバージョンはバグが結構な数潜んいるだなぁと実感しました。
#今後
現在、Treasure Data内部ではPTD(Patch set Treasure Data)というものに取り組んでいます。これは上記にあるように、今まではディストリビューションを使ってきているのですが、あまりにもパッチを適用する回数が多すぎる、パッチによっては過去に遡って複数のパッチを当てていかなければならない、Treasure Data独自(Plazmaに関連するような)パッチも適用している。こうなってくるともう、Apacheのコミュニティ版をベースに独自(*1)にやっても作業量は対して変わらないんじゃないか、という結論から至ったしだいです。
また、HadoopやHive本体だけに限らず内部のしくみも大幅に変更されるようとしています。
Treasure Data Update 2015 - Prestoにもありましたが、Hiveのこの機能を早く使いたいという要望はやはり頂きますので、Hadoop系も最新を追従できていけたらいいなぁと思っています。
--
*1 誤解されそうとあったので追記: ちなみにもちろん開発は全てアップストリームですよ。内部でバージョンを上げるためにパッチの管理なんてしたくありませんし... 独自仕様なのはPlazmaに絡むとこだけです。パッチの適用しやすさを考えた結果がコミュニティ版ベースのPTDです。