White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

TokibitoさんのHadoop資料の補足

Hadoopとその周辺の紹介 - BPStudy http://t.co/ywmVJOmDth

上の資料、公開頂きありがとうございます。

個人的にここは違うのではないかというのが幾つかあったので書きます。自分が書くとこも怪しいかもしれないので後ろからshiumachiせんせーとかが援護することを期待します。

> P2: Hadoopとは

分散処理基盤 というより、 大規模並列処理基盤といった方が正しいかもしれません。あと大事なのは、Hadoopプロジェクト自体がGoogleMapReduceプロジェクトの模倣品といったところです。HDFSもGFSという分散ファイルシステムの模倣品だったはず。

> P3: HDFSとは

> NameNode DataNode

Hadoop 1.0(CDH3)までは大体正しいです(Secondary NameNodeが欠けてますが)。Hadoop 2.0系だとJournalNodeが追加されてます。JournalNodeは詳しくないのでパス。

あと(1.0系から既に)でかい特徴として、1つのファイルを複数個所で持つレプリケーションという機能があります。これにより1台サーバorストレージが落ちても他でカバーできます。

> P6: MapReduceとは

> JobTracker, TaskTracker

Hadoop 1.0では合ってます。Hadoop 2のYARNというMapReduceの新しい版では名前が変わってます。尤もYARNは最早分散スケジューラでしかない感じもしますが(後述)。

>P8: Map処理とReduce処理のイメージ

この図だとReducerが1台しかないように見えますが、実際はMap処理のあとにshuffleという処理が入って複数台のReducerで処理されます。場合によっては一箇所に固まることもあります。

> P9: Apache Hive

余談ですがPigってのもあります。SQLじゃないクエリ言語ですが。

> P12: Hiveは遅い

”遅い”自体はそうです。遅さの原因に"Java VM(JVM)の起動に時間がかかる"というのを加えてください。ImpalaはJVMを使わずにllvm+c++(とシェルはpythonだっけ?)で書かれています。

> P13: Cloudera Impala

> MapReduce処理の最適化

結果としてはそう見えるんですが、実体としては最早MapReduce使われてないです。独自でcoordinaterとか用意して速度をあげています。詳細:http://linux.wwing.net/WordPress/?p=1011

ここまで散々Hadoop1.0ではとかYARNとか書いてますが、実はHadoop2.0では分散処理エンジンを選択できて、従来のMapReduceの様なスケジューラ以外にもApache HamaとかJiraphとかいう別のスケジューラも使うことができるからです。上のImpalaもその一環ですね。その為Hadoop1.0系ではImpalaは使えません(というかImpala自体ApacheじゃなくてClouderaなのでCDH4以降じゃないと使えないんじゃないかというのもあるんだけど)。

> P15: Apache HBase

KVSと言えばKVSなんですが、詳しく言うと列指向のKVS(Cassandraとか)がHadoop上で動くって感じです。これもGoogleBigTableを模倣しています。結構早くてFacebookなんかでよく使われてる感じなんですが、管理が難しいようです。

> P15: Cloudera Hue

このツールはDjangoで作られてるため、Pythonistaなら最もいじりがいのあるとこでしょう。https://github.com/cloudera/hue

あとCloudera Search(全文検索)なんかも挙げておくといいのかもしれません。もともとこれApache Solr/LuceneHadoopに対応させたやつなんですが、そもそもSolr/Luceneの作者=Hadoopの作者の一人なので。さらにHBaseがあるならZookeeper(並列同期装置)もあるといいでしょう。

> P17: CDH

rpmだけじゃなくてdebもあるよ!

> P18: Hadoopの利点, P19: 欠点

Hadoop(特にv1 のMapReduce)の利点は"一度に大量のデータを分散して処理できる"とこにあると考えています。その代わり準備に時間がかかる感じです。なのでデータ間の依存が強いようなデータ、例えば機械学習の一部なんかは、1台で処理できないサイズだろうがHadoop(MapReduce)は向いてません。このあたりJiraphとか使ったらどうなのかは把握していません。これに対してデータ間の依存に強く作られてるのがJubatus(https://preferred.jp/product/jubatus/)です。Jubatusの紹介は社員の方お願いします。

あと個人的にTezは気になってるので張っておきます。ここの図を見るとMapReduceとYARNの関連がわかるかもしれません。(http://hortonworks.com/hadoop/tez/)

さらに、だらだらと書き連ねましたが自分も知識レベルでしか知らないものもあるので実務で使ってて違うよって方いましたらコメントください。撃って良いのは撃たれる覚悟のある奴だけだ。

追記:

「100%理解しないと発表しちゃいけないとは思ってない。間違ってるかも知れない不安があるから晒して指摘もらって勉強するのが楽。」

http://twitter.com/tokibito/status/420964715737538560

これは私も激しく同意。なので指摘する側も芽を潰してしまわない様に気をつけないとなーと思いながら記事書きました。凹むとこあったらすいません。