White scenery @showyou, hatena

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

Japan.R参加報告と質問への解答

先週土曜日、Japan.Rでパネルディスカッションの一人として参加しました。割とトークグダグダでしたが、みなさんから山ほどの反応を頂いて感謝しております。
japan.R始まったばかりの頃は学術系もしくは広告系の人が多かった気がしますが、今回は思いの外エンジニアが多くてびっくりしました。もうちょい"私はR使いだし、pythonに乗り換える理由なんてない"とかDisってもらってもよかったのですが。

いくつか面白い質問を頂きましたが、時間の都合答えられなかった部分もあるのでここで答えます。

 

Q: 今Rエンジニアだが、今後他の言語覚えていかないと食えなくなると思っている。どの言語を覚えていけばよいか?
その場ではpigとかhiveとか答えましたが、実際はその都度必要になった言語覚えればいいと思います。ビッグデータ処理基盤ならJava*1とかScala*2とかpython*3とか、高速に大量のリクエスト処理したければgo*4とか、単体で高速に計算したければjuliaとかFortranとかGPGPU(CUDA, OpenCL)とか・・
逆に言うと、残念ながら何か覚えとけば安泰ってもんでも無い気がします。
あと全然関係ないですがどこかの偉い人がプログラミング言語は5つの違うパラダイムのものを覚えるべきと言っていました。すなわち手続き型1つ、関数型1つ、等を覚えろと言っています。
そこまでいくのも辛いと思うので、一つ言語極めて、いくつか周囲の言語を軽く触ってみるのはいかがでしょうか。それとコメントしたとおり、身近に詳しい人がいると覚えやすいです。
あと英語は覚えたら得するでしょう。ドキュメントは英語で書かれてること多いので。

 

Q: SparkもApache Stormもオンメモリで処理するものだが、リアルタイム解析はどちらが向いてるか?
この辺より詳しい方が答えて頂ければと思いますが、Sparkはメモリ上で高速バッチ処理、Stormは常駐して逐次処理を行うものです。ただしSparkもSpark Streamingとかいう超高速応答を返すものを持ってるので区別するのは難しいです。
なお追加の質問で「どっちがRedisに近いか?」というのも受けましたが、自分ならGemfire(商用インメモリKVS.永続化対応。SQLHDFSが扱えるものもある)を推すかなぁ。。(手前味噌

 

Q: HBaseとCassandraの違いはなにか?
どちらも列志向型KVSですが、前者はHadoopの1部品であるのに対し、後者は独立しています。詳しくはこちらhttp://www.slideshare.net/yutuki/cassandrah-baseno-sql (ただしこの資料のHBaseで書かれているHDFSのSPoFは、今は存在しません)

 

Q: これからHadoopを始めたいが、コンポーネントが多すぎる。どこから手をつければいいか?
基本的にHDFS(Namenode, Datanode), YARN(ResourceManager, NodeManager, HistoryServer)くらいあればいいかと。HDFSはファイルの管理に使うもの、YARNはアプリケーションの実行に使うものです。個別にアプリケーションを書くのも辛いんで、あとはhiveとMapReduceでも入れてhiveSQL回しとけばいいと思います(投げやり)。もしくはSparkをスタンドアロンかEC2の上で回すといいでしょう。この辺はやまかつさん(@yamakatu)が詳しいと思います。もし具体的に聞きたいようであれば、@showyouにでも連絡してください。仕事なんでじっくり答えます。

 

Q: MapReduceオワコン(でこれからはBigQueryの時代)と言われていたが本当なのか?
半分本当で、半分ウソです。
まず現行のHadoopMapReduceを中心に動いてるのではなく、YARNと呼ばれるジョブリソース管理エンジンによって動いています。MapReduceはYARNで動く1アプリケーションになっています。
そしてhiveはMapReduceで動いていますが、それに取って代わりSQL on HadoopというYARNの上で動くものが台頭してきています。これやBigQueryの発想の根底にあるのは(恐らく)GoogleのDremelあたりの論文がベースになっています。
そういう意味では本当なのですが、YARNはYARNでアプリケーションを書くのが難しかったりするので、MapReduceのままでいい!って人もいます。

*1:Hadoopの主な記述言語。ただしたまにC++で書いてるディストリビューションもある

*2:Spark

*3:Hueとか一部フロントエンド、pyspark

*4:Cloud Foundryのrouterはrubyからgoに変更