Your SlideShare is downloading. ×
0
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Hadoop loves H2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Hadoop loves H2

2,635

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,635
On Slideshare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Copyright (c) Bitforest Co., Ltd.   Hadoop は RDBMS をスケールアウト可能に する 08/12/131 金床 株式会社ビットフォレスト CTO @kinyuka http://www.jumperz.net/ https://github.com/Kanatoko
  • 2. Copyright (c) Bitforest Co., Ltd.   • Hadoop について、もっとも有名なメリット – I/O 性能をスケールアウト可能にする – HDFS がキモ – データを持ってくる( Hadoop 以前)のではなく、データがある 場所に処理を行うアプリケーションを移動させるというアプロー チ • Hadoop 上で稼働するソフトウェアの種類は爆発的に増え ており、「 Hadoop エコシステム」などと呼ばれる – 特によく使われているのが、 SQL っぽくやりたい処理を記述する Hive や Pig – Hive/Pig では、もっとも低レベルな Hadoop 処理の記述方法である Map/Reduce を書 かずに済む Hadoop 一般論 08/12/132
  • 3. Copyright (c) Bitforest Co., Ltd.   Java プログラマから見た Hadoop • Hadoop を Java プログラマとしての視点から見る – Hadoop は Java で書かれている – I/O ボトルネックな処理以外(例: CPU )もスケールアウト可能 – Map と Reduce だけ書けば、インフラのコードを書かずに、 10 倍 、 100 倍というレベルで処理をスケールアウトさせることができ る – Hadoop は非常によくテストされたフレームワーク(世界中で実績 あり) – 統率のとれたコンピュータ群を率いるイメージ – Amazon Elastic MapReduce の存在 • クラスタを自分で用意したり、サーバを管理したりする必要がなく、 Java の コードだけに集中できる 08/12/133
  • 4. Copyright (c) Bitforest Co., Ltd.   Java プログラマから見た Hadoop (2) • 「分散 JVM 環境」としての Hadoop 08/12/134
  • 5. Copyright (c) Bitforest Co., Ltd.   Hadoop vs RDBMS ?? • Hadoop と RDBMS は比べるものではない? – 「 No !」 用途によっては RDBMS と完全に競合するので、どち らがよいか比較する必要がある – 例:集約処理 – Hadoop の HelloWorld として有名な WordCount – RDBMS ならば group by や sum 、 count を使えば SQL 一発で終わる – 必然的に RDBMS に慣れた人からは「 MapReduce は原始的」とい う反応 – しかし「テラバイト規模のデータ処理を、今すぐにあなたの手元 の RDBMS …で出来ますか?」と言われたら – Partitioning/Sharding が有効だが、実装も管理も非常にめんどうく さい 08/12/135
  • 6. Copyright (c) Bitforest Co., Ltd.   Hadoop vs RDBMS ?? (2) • Hadoop と RDBMS が競合しない用途 – ACID が必要な場面は RDBMS 圧勝 – 低レイテンシが必要な場面も RDBMS – 構造化されていないデータに対するバッチ処理はやや Hadoop が 勝ち • (パーサを書けば RDBMS でもいける) – データサイズが大きすぎる場合(いわゆるビッグデータ)には Hadoop が圧勝 08/12/136
  • 7. Copyright (c) Bitforest Co., Ltd.   RDBMS とスケールアウトの関係 • RDBMS をスケールアウトさせる場合、 ACID はあきらめる 必要がある • しかし、 RDBMS の魅力は ACID だけではない • SQL – 現時点で唯一広く使われている Declarative Language – 「おいコンピュータ!この文書 ( データ ) に含まれる単語を数えて 、多い順に 5 つ報告しろ!」 – 高い生産性 – 背景に Set Theory – 関数型言語の流行から、 SQL はその価値を見直されている • インデックスが可能にする高速な処理 – 単にソートするだけの用途にも使える • スケールアウトさせる場合、 Partitioning/Sharding が用い られる 08/12/137
  • 8. Copyright (c) Bitforest Co., Ltd.   MapReduce と Partitioning/Sharding • MapReduce と Partitioning/Sharding は凄く相性がいい • キーごとにデータを分割するのは Hadoop の主要な仕事 • http://serverfault.com/questions/351072/rdbms-is-it-possible-to-sc – より引用 – 「 Horizontal partitioning aka Sharding — Distributing data from each table evenly among all servers. Location of data is determined by sharding key. Scales for reads and writes, however accessing data via criteria other then the sharding key requires querying all the servers, in extreme cases requires map-reduce kind of infrastructure. 」 08/12/138
  • 9. Copyright (c) Bitforest Co., Ltd.   Hadoop で RDBMS ( H2 )をスケールアウトさせる • Hadoop は JVM 上で出来る処理ならスケールアウトできる • ならば RDBMS は? • H2/HSQLDB/Derby など、 Pure Java な組み込みデータベー スは Hadoop 上でスケールアウトできる • キーによるデータの分割は Hadoop が自動的に担当 • 分割されたデータを Map あるいは Reduce フェーズで JVM 上の RDBMS に格納 • 処理は SQL で書くことができ、分散されて実行される • ただし、複数のキーにまたがる処理は、それぞれのデータ が別の JVM 上に位置してしまうため、このアプローチで は不可(後述) 08/12/139
  • 10. Copyright (c) Bitforest Co., Ltd.   Hadoop で RDBMS ( H2 )をスケールアウトさせる 08/12/1310
  • 11. Copyright (c) Bitforest Co., Ltd.   Hadoop で RDBMS ( H2 )をスケールアウトさせる(3) • 実例1: Reduce フェーズの入力値をソートする – Hadoop では、 Reduce に渡されるデータについて、値はソートさ れない – 値をソートするためにはセカンダリソートと呼ばれるテクニック を使う必要がある • セカンダリソートは明らかにアンチパターン • 直観に反する実装(キーに値が含まれる!) • 冗長で変更に弱いコード ( 典型的な Java の嫌なコード。 Comparator ) – Reduce フェーズにおいて、まず値をすべてイテレートし、 H2 に 格納する。テーブル定義の際に当然インデックスを作成しておく。 データをすべて格納した後に、 order by でデータを取り出す (ソートされたデータを取得) • コードの量 ↓ • コードのわかりやすさ(単純なたったひとつの SQL 文) ↑ • 変更への耐性 ↑ • パフォーマンス ↑ – ( セカンダリソート : 2 時間 15 分 H2 でソート : 1 時間 52 分 ) 08/12/1311
  • 12. Copyright (c) Bitforest Co., Ltd.   Hadoop で RDBMS ( H2 )をスケールアウトさせる(4) • 実例 2 :キーごとに分けられたデータに対する集約処理を SQL で記述する – 例 1 と同じく、 Reduce フェーズにおいて、まず値をすべてイテ レートし、 H2 に格納する。 – その後、 Min/Max/Sum/Count などを使って集約処理を簡単に記述 – SQL が使える • コードの量 ↓ • コードのわかりやすさ(単純な SQL 文) ↑ • 変更への耐性 ↑ • パフォーマンスはケースバイケース。インデックスが効く場合、 Java で処理 をゴリゴリ記述するより H2 に SQL を投げる方が高速になる可能性が高い – データに対する複数回の問い合わせ・アクセスが可能になる • MapReduce では、値に対するイテレートを一週する間に処理を行わなければな らない – 多段 MapReduce は面倒かつ非効率 08/12/1312
  • 13. Copyright (c) Bitforest Co., Ltd.   H2 on Hadoop の実例  Dunkhead 08/12/1313 •タイムスタンプ付きのデータ(アクセスログなど)を手軽に 可視化し、解析のヒントを得るためのソフトウェア •ビッグデータ解析の初日に使う •オープンソース •Hadoop 上で稼働する Pure Java なアプリケーション •H2 を内部で使用 •近日リリース予定
  • 14. Copyright (c) Bitforest Co., Ltd.   H2 on Hadoop の実例  Dunkhead (2) 08/12/1314 •Combiner と Reducer で H2oH を利用 •Combiner で積極的に集約し、 Reducer に渡るデータのレコー ド数を減らすようにする( Map/Reduce ではよくあるパター ン) •Combiner では一度に処理するデータ量が少ないので、 H2 をイ ンメモリで動作させることも可能 •パフォーマンスの大幅向上 •当初 Java で集約処理を書いていたが、 SQL にしてコードが簡 潔に •当初セカンダリソートを使っていたが、 SQL に変更してパ
  • 15. Copyright (c) Bitforest Co., Ltd.   H2 on Hadoop と Hive/Pig の比較 • H2oH では本物の SQL が使える (Not SQL-Like) • H2oH ではインデックスも使える – (Hive/Pig でもサポートされているかも。未確認 ) • 動く、あるいは処理を記述するレイヤーが違う – H2は最もレベルが低い、生の Map/Reduce と同じレイヤー – Hive/Pig はそれよりひとつ上のレイヤー – それぞれの善し悪しがある – カリカリにパフォーマンスを求める場合は Map/Reduce レイヤー で処理を実装することになるが、その際でも H2oH は SQL での楽 な記述を可能にする 08/12/1315
  • 16. Copyright (c) Bitforest Co., Ltd.   H2 on Hadoop と Hive/Pig の比較(2) • H2oH では SQL は Java コード内に記述し、コンパイルする 必要がある – Adhoc なクエリを投げて対話的にデータ解析したい場合 (SQL を書 くのがプログラマでない場合など)は Hive/Pig がよさそう • 複数のキーにまたがるクエリは H2oH では処理できない – データはキー毎にそれぞれ別の JVM 上の H2 に分割されているた め – Hive/Pig なら集約可能 • H2 は単なる Java ライブラリであるため、 Hadoop が動作 する環境であれば簡単に動作させることができる – Amazon ElasticMapReduce で、もっとも基本的な JAR アプリケー ションとして動作可能 08/12/1316
  • 17. Copyright (c) Bitforest Co., Ltd.   H2 on Hadoop と通常の RDBMS との比較 • AmazonEMR 上で通常の RDBMS(PostgreSQL や MySQL) を使 用することも可能か? – 未検証 – スレーブノード上で自動的にインストールし、起動させる – ユーザ権限などいろいろと面倒がありそう – Hadoop がキー毎に分割したデータを Java アプリケーションから RDBMS に JDBC ドライバ経由で insert – その後は H2 と同じ – H2 は充分高速なので、パフォーマンスに大きな差はなさそう – Java 内で閉じているので H2 が有利な可能性もあり – 管理コストは H2 だとゼロなので、その部分は H2 の勝ちか – H2 の場合、スタンドアロンモードで簡単にテストでき、そのまま のコードを EMR に載せられるのは大きい 08/12/1317
  • 18. Copyright (c) Bitforest Co., Ltd.   その他、 H2 on Hadoop が使えそうな場面 • (それほど大きくない)マスタテーブル等を H2 データベ ースの形で各ノードに配布する – マスタテーブルを CSV ファイルの形で配布し、ループしながら Join を行うという原始的なコーディングを避ける。 H2 の場合、デ ータベース全体が 1 ファイルにおさまるため、配布しやす い。 Join の際にはインデックスが利用できるし、コードも SQL で 書けるのでよい。 • メモリに載りきらない量のデータを処理する場合 – Hadoop に限らず、 Java アプリケーション内でメモリ( List や Map )に載りきらない量のデータを処理する場合、 H2 は活躍し てくれる。ただし、もちろんディスクのサイズを超えるデータは 扱えない 08/12/1318
  • 19. Copyright (c) Bitforest Co., Ltd.   まとめ • H2 on Hadoop は低レベルの Map/Reduce でカリカリに速度 を追求しながら SQL が使える非常に優れたテクニック • 単にセカンダリソートが嫌というだけの理由でも使える • Map/Reduce で自動的に Partitioning/Sharding が行わ れ、 H2 は簡単にスケールアウトする • Hive/Pig とはレイヤーが異なる     Hadoop loves H2 08/12/1319

×