hadoop-logo
ようこそ Tech blogへ!
「これからHadoopを勉強しよう」という方はまず下記のページから

サイトの移行に伴って画像が表示されないなどの不具合が生じています

2014年の象(Hadoop)四方山話

Spark, SQL on Hadoop etc. Advent Calendar 2014 1日目、およびHadoop関連(全部俺) Advent Calendar 2014の1日目です。
Zou2014
初日なので、昨年ブログに続いて2014年のHadoop関連の話題をまとめます。
※このブログの内容は所属している組織には関係なく、個人的な雑感です。間違いがあればご指摘下さい。
※なお、中立的に書いているつもりですが、多少偏りがあるかもしれません。が、特に悪意はありません :p

俺的Hadoopの話題2014: ベスト3

  1. Apache Sparkの盛り上がりが加速
  2. SQL on Hadoop は混沌
  3. Hadoopは堅調に進化。徐々に消えていく!?
  4. (次点: Hueも大幅に進化してますが、これはいずれ紹介します)

1. Apache Sparkの盛り上がりが加速

今年になってますます盛り上がっているApache Spark。2009年にUC BerkleyのAMPLabで開発された分散処理基盤です。2010年にオープンソースとして公開され、現在はApacheプロジェクトのひとつとなっています。昨年(2013年)12月にv0.81、今年(2014年)5/末にv1.0.0が公開され、現時点の最新版はv1.1.1というように、現在、非常にアクティブで急激に成長しています。
今年もSpark Summit 2014が開催され、2015年もNYCで3月、SFCで6月にSpark Summitが予定されています。Hadoop最大のイベントであるStrata + Hadoop World 2014のプログラムにもSpark関連のトピックが多くありましたし、日本でもHadoop Conference Japan 2014や、Cloudera World Tokyo 2014という、Hadoop関連のイベントでもSpark関係の複数のセッションがあり、人気となっていました。しかし、HadoopにはMapReduceという分散処理基盤があるにも関わらず、なぜSparkが注目されているのでしょうか?

Spark vs Hadoop MapReduce

Sparkには多くのメリットがありますが、大きく分けると以下のようなところでしょう。

  1. ハイレベルなAPIによる、迅速かつ柔軟性のある開発が可能。
    HadoopでMapReduceを記述するのと比較して、Sparkでは記述する行数は少なくて済み、柔軟性のある処理も記述することができます(MapReduceは一回に複雑な処理を行うことは難しいので、複数のジョブに分ける必要などがあります)。ScalaやPythonでREPLで対話的に処理を書くことができます。
  2. 低遅延。
    Sparkはメモリを効率的に使用できるので、MapReduceで複数の処理に分けなければならない処理を、ディスクに書き出すことなくインメモリで処理を行うことができます。[*1]。その他、MapReduceのようにタスク毎にJVMを起動するようなこともありません。また、Sparkストリーミングにより、ストリーミング処理をバッチ処理と(比較的)同じように記述できます。
  3. コミュニティ。
    多くのHadoopディストリビューションベンダー(ClouderaやIBMなど[*2])、ユーザー企業(Intel、Yahoo!、Grouponなど[*3])、その他多くの企業やユーザーが開発、サポートなどに関わっています。特定の一社などを中心に開発が進んでいると先行きが不安なところがありますが、Sparkは既に多くの開発者や利用者がいるため、OSSのメリットをうまく活かして機能、品質の改善に繋がっていくと考えられます。(うまく機能し続けられればですが、、、コミュニティとしてうまく機能し続けてほしいですね)

デメリット(?)としては、機能追加や変更、修正が頻繁に行われているので、安定して枯れているバージョンを本番環境で運用したい、というような方向けではありません[*4]。ただ、安定性の必要な夜間バッチ処理などの用途には、歴史もあり十分枯れているHadoop MapReduceを使うなど、使い分ければ良いでしょうね。また、エンタープライズ用途で使用するために不足している機能、今後はセキュリティの強化や、安定した運用のためには必須となるメトリクス情報の充実、ログ情報の追加なども見逃せないところです。

Sparkの情報、書籍など

現在、米O’ReillyでSpark関係の書籍が2タイトル、Manningで1タイトルの出版が予定されています。日本語版の出版が待ち望まれますね(独り言)。※本日 O’Reillyの書籍がCyber Monday Saleで半額になっています。欲しい方はお早めに 🙂
補足: 12/3 5:00am (PT)までのようです。

  • Learning Spark : Lightning-Fast Big Data Analytics (O’Reilly)
  • Advanced Analytics with Spark : Patterns for Learning from Data at Scale (O’Reilly)
  • Spark in Action (Manning: 予定?http://sparkinaction.com/)

なお日本では、ClouderaやNEC、富士通などでSparkの研修が行われています。
[*1] 例外もあります。明示的にディスクに永続化することも可能ですし、シャッフル時にもディスクに永続化されるので、全てがインメモリで処理されるわけではありません。
[*2] http://www.theregister.co.uk/2014/06/30/cloudera_and_co_spark/
[*3] SparkのCommitterより抜粋
[*4] もちろん、本番環境で稼働している事例も多くあります。

2. SQL on Hadoopは混沌

昨年のアドベントカレンダーで「分散クエリエンジンの乱立」と書きましたが、ますます混沌としてきています。Hadoop Conference Japan 2014でも多くのセッションがありました。
2014年版 SQL on Hadoop (OSSのもの)

  1. Cloudera Impala 2.0 http://impala.io/
  2. Presto 0.85 http://prestodb.io/overview.html
  3. Stinger.next (?)
  4. Apache Drill http://drill.apache.org/
  5. Spark SQL https://spark.apache.org/sql/
  6. Hive on Spark https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark
  7. Apache Phoenix http://phoenix.apache.org/
    ※正確には Database layer over HBase

Cloudera Impala。10月にver2.0がリリースされました(参考資料)。このバージョンの大きな特徴として、メモリに乗り切らないようなデータがディスクにスピルできるようになりました。サブクエリの機能追加もあり、分析用の関数も増えて充実しています。パフォーマンスは相変わらず爆速で、マルチテナント環境で複数ユーザが利用する場合などにも適しています。ClouderaやMapR、Amazon EMRなどでサポートされ、多くの本番環境で利用されています。
Presto。Impala同様にインタラクティブなSQLクエリエンジンです(参考資料)。パフォーマンスも良く、また多くのコネクタが用意されており、異なるデータソースにアクセスができます。
Stinger.next。Hiveをベースとし、実行エンジンにMapReduce,Tez,Spark(?)が利用できます。
Apache Drill。今年はCloudera World Tokyoのライトニングトークにて、始めて動作するデモを見る機会がありました(資料)。標準SQL準拠、柔軟で動的なデータ解釈、様々なデータソースや格納形式に対応とのことで、Impalaがパフォーマンス重視に対して、柔軟性に特徴を持っているようです。また、年内に1.0.0版がリリースされる予定とのこと。パフォーマンスなどはよくわかりませんが、これからベンチマークなどが公開されていくのでしょう。
Spark SQL。Sparkを処理エンジンとしてSQLを実行する仕組みです。構造化データをSparkのRDDとしてクエリできるようになっています。ImpalaやPrestoとは違い、JavaやPython、Scalaでクエリを記述することを想定しているようです。
Hive on Spark。Spark SQL同様にSparkを実行エンジンとして使用しますが、こちらはHiveの実行エンジンとして、MapReduceの代わりにSparkを使用します。(Tezの上でHiveを実行する、Hive on Tezもあります)。先日初めてデモが公開されました。Hiveから利用する場合、以下の設定を行うことでMapReduceの代わりにSparkを利用できるようになります。
set hive.execution.engine=spark;
参考までに、Tezの場合はset hive.execution.engine=tez、MapReduceの場合はset hive.execution.engine=mrです。


 
パフォーマンスなのか、柔軟性なのか、特定の機能が必要なのか、用途に応じて何が最適なのかは変わってきますが、選択肢が多いと悩ましいですね。
なお、10月に開催されたImpala Meetup Tokyoでは、Impala、Presto、Tezのベンチマークなども紹介されていました。http://connpass.com/event/9031/presentation/

3. Hadoopは堅調に進化

象(Hadoop)は今年も着実に成長しています。Hadoop 2.0系のリリースのような派手な機能追加はありませんが、エンタープライズ用途で利用するための多くの機能が追加されています。また、最新版のHadoop 2.6.0が先日リリースされました。
Hadoop 2.6の最新機能は @ajis_ka 氏のCloudera WorldでのLTの講演資料などが参考になりますし、今回のアドベントカレンダーでも紹介されると思いますが、興味のあるところを抜粋。

HDFS

  • ヘテロジニアス(不均一)なストレージへの対応強化(古いですがブログ記事
  • Archival Storageのサポート
  • 暗号化
  • ホットスワップドライブ(ベータ版)

YARN

  • ローリングアップグレードの対応
  • 長期間実行するサービスのサポート
  • Docker対応(アルファ版)

今年のHadoop Conference JapanでHadoop創設者のDoug Cutting氏が来日し、基調講演が行われました。その際に行われたDoug氏へのインタビューで、リンク先にあるようなインタビューがありました「(ITPro: MapReduceは「ゆっくり死んでいく」)。
また、10月に開催されたStrata+Hadoop World 2014の基調講演で、ClouderaのMike Olson氏も、「I think that this year we’re going to see Hadoop disppear」と言っています。
これらの発言はHadoopが消えて無くなるということではなく、既にデータのインフラとしてHadoopが十分に利用されていることを意味しています。また、Sparkなどのように、既存のテクノロジーも、より優れたものが登場することで徐々に置き換わっていくでしょう。来年はどのような技術が残り、新しい技術が登場してくるのか楽しみです。(キャッチアップするのが大変ですが、、、、)
 

参考:過去のHadoop関連アドベントカレンダー

おまけ
Hadoop関連(全部俺)Advent Calendar 2014 (多分更新中)
Hadoop関連(全部俺)Advent Calendar 2013
 

コメント