Hadoop in Practiceを読んだよ

そういやあるなあとは思いつつ、特にモチベーションもなかったので読んでなかったけど、 http://blog.cloudera.com/blog/2012/11/the-new-hadoop-in-practice-book-a-chat-with-the-author/ でその存在を思い出したので、読んでみました。全体的にわかりやすいし勉強になりました。ベリサインの(たぶんかなりの)Hadoopヘビーユーザーが書いたと言うこともあるのだろうけど解説に違和感もないし、著者のブログ http://grepalex.com であるような絵にコメントを入れるスタイルもなかなかいい感じです。

解説の中には基本的な事柄をHadoop in Actionを参照するようにとしているところもそれなりにあるため、Hadoop初心者というよりは一定以上の経験がある人向けと思います。例外的に、Capter1は20ページ程度で細かすぎず概観過ぎずなHadoopのイントロダクションがあり、ここについては初心者向けです。象本はいきなり無駄に細部に入るようなところがあるので、そういうのが苦手な人もいいかもしれないです。

章立てはおおむねHadoop Hacksと同様の問題解決形式ですが、やや恣意的に問いを立てている箇所もありますが、Hadoopのエコシステムだとほぼ似たような問題解決をするようなツールが複数あることがあり、その辺のツール側の比較をやっているのがよさげポイントです。個別の論点では、経験があるところについては経験の方が強いくらいの詳しさにだいたいなると思いますが、解説している分野が広いのでためになります。Hadoop HacksにあってHadoop in Practiceにないのは、HBaseとZookeeperくらいですかね。

読み始めたときは、ClouderaのブログでみたのでClouderaの人が書いたものだと思っていて、やや網羅感に欠けた記述があったのであれだなあとか思いましたが、正直この内容の本を一人で書ける技術レベルと根性は尊敬に値すると思います。

あとは備忘録をまとめておきます。

Part 1 Background and Fundamentals
・HDFSとJobTrackerの仕組みを簡潔にまとめつつ、インストールと疑似分散モードでの実行まで20ページでまとめていて、非エンジニアでもこのくらいの内容は理解していて欲しい位のちょうど良さです
・Figure 1.4の"Job Parts"が明らかに"Task"なので語用が誤用であるように見えますが、まあそのくらいです

Part 2 Data Logistics
・第二部ですがまず名前がかっこいいです。転送とフォーマットの話なので適切かと
・Flume/Chukwa/Scribeの比較があり、そういえばChkwaとか存在したよなあというのが思い出せます
・slurper https://github.com/alexholmes/hdfs-file-slurper というかなりナイーブだけどライトなデータ転送ツールの紹介とか
・フォーマットとリーダーのあたりはソースも交えつついい感じに解説されています。この辺の話題を確認するのに象本とかよりこっちのほうがいいのではないでしょうか。そこそこわかってたらHadoopのソースをみたほうが速いという話もありますが
・ネストの深いJSONのテキストを入力としてどうあつかうかという話題は、この手の話で悩むようなことをしていないので、参考になりました
・Sequence File/Protocol Buffer/Thrift/Avroの比較とか。Trevniの話題もあったと思いますが読み返したら書いてなかったです。余談ですがTrevniは今はAvroにマージされたっぽいです https://github.com/cutting/trevni
・あとはImput Formatを自分で書くとか

Part 3 Big Data Patterns
・名前がだめそうですが、第二部の補になってる感じで、データを動かした後の話です。一部そういうくくりじゃないところもありますが
・結合戦略では、Repertition Join(Merge Join)/Replicated Join(Hash Join)/Semi Joinの解説があります。Semi Joinはあんまり解説してくれているところがなかったのですが、Hadoop MapReduceでの実装方法と、別の章でBloom Filterを使用した効率化(効率化される場合における効率化、、というかこのへんの機微ははどう書いたものやら)をやっていてくれていい感じです。skewの考慮は別立てであとで出てきます
・ソートは象本と比較して目立った話題はないです
・サンプリングを章で切ってますが、これも目立った話題はないです。たぶんreduce inputのskew考慮の話題と絡めてこの辺を整理しようとして、記述バランスが悪いけどタイムアウトした感じのあれだったと思います
・小さいファイルがたくさんある場合の問題をどう解消するかという話題。主に解説されているのはAvroでまとめる方法だけど、CombineFileInputFormat/mapred.job.reuse.jvm.num.tasks/tar/har/Federationにもちょっとだけ触れている
・圧縮のコーデックの話。これも目立った話題はなく、splitしたいならLZOPだけどインデックスめんどいならbzip2で、splitいらないならsnappyで、という
・あとは性能周りのはなしで、ヒストリログをつかった性能分析という観点で何かと詳しい。あと自分がもってるツールとかぶるところもあったけどまあそれはそれ
・こういう問題があったらJobTrackerのWebUIのこのへんをみてね、という整理なので、このへんを真面目に見たことない人にも良さそう
Hadoopのチューニングパラメーターの話題は貧弱だけど、最低限で余計なことをしない、という振り方ならこのぐらいがいいのかも、という感も。Clouderaのマテリアルとかぶるというあれもあると思いますが。そういえばdfs.datanode.drop.cache.behind.writesとかのとかはどうなんですかね
・観点としてOSのメトリクスをちゃんと見ようというのがあって、ちゃんとOSのメトリクスは見ましょうね、というのが確認できてよい
・Techinique 46 Avoid the Reducer、というのが何ともいえない雰囲気を醸し出すけど、これも基本なんだよね。何ともいえない雰囲気だけど
・skewの話題は分析がめんどいので悩ましいけど、悩ましいですね
・あとはオブジェクトのメモリ消費量の話題で、このへん本来的にはセンシティブだという話。データが巨大だとこの程度の内容でも性能にはねるので

Part 4 Data Science
・Data Scienceってかっこいいですね
・グラフの話。別にデータ量がよほどでかくなければHadoopじゃなくていいというのはあると思いますが、みんな好きですよね。あんまり詳しくないけど、FoFの分析とかをケーススタディとして見ると、そんなに詳しくない人にとっては面白いと思います。僕とか
・Bloom Fileterをつくる話と、Bloom FilterでSemi Joinを効率化するというのが227p以降で書いてある
・Rとの統合の話。この辺も詳しくないのでわかめ。ていうかRでMapReduce書けてなにがうれしいのか理解できない
・Mahoutも詳しくないので真面目に読んでない。Mahout in Actionが邦訳されているので、そっちみたほうがいいんじゃないかとは思う
・個人的には、この辺の話題はここで整理されているところまでは追試してキャッチアップしておきたい

Part 5 Taming the Elephant
・Hive/Pig/Crunch/Cascadingとテスト周りの話
・Hiveのパーティションとバケツは僕的にクリアになっていなかったので、そのへんの概念的なものがサンプリングとか実用的な観点で説明されているのはよかった
・Hiveの結合戦略にはなぜかBucket Joinの解説がのってない。別にいいけど
・このぶたやろう!このへんも概念的なところの整理がちゃんとしてていい感じ。気づいたけど象本って文法解説的な感じなんだよね。あんまクリアじゃない。触る前に読んでたからかもしれないけど
Crunch/Cascadingは位置づけとしてイマイチ腑に落ちないところはありましたが、MapReduceの抽象化に寄せているのがCrunchで、データフローの抽象化に寄せてるのがCascadingという整理でよいと思った。どっちかというとScrunth/Scaldingに興味はあるけど、このへんも触ってない

appendix
Hadoop built-in ingress and egress toolsはそんなに有益ではないと思うけど、どういう手段があるかについて網羅的な気がするので、そういう時に見ると思う。あと、ちらっとHoop/WehHDFSがのってる
・Optimized MapReduce join frameworksのは、Part3でも触れられているcontribのやつで、むかししょぼかったけど改善されている気もするので、気が向いたら

という感じでした。象本も新しいのが日本語ででたら読んでもいいなあと常々思ってますが、まあそういう感じです。Part4のあたりは気を向けて追試したいと思います。