Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RHIPE徹底入門

minghai
October 16, 2011

 RHIPE徹底入門

HadoopをRから効率良く使用可能なパッケージであるRHIPEについてインストールから使用方法まで簡単に説明しています。

minghai

October 16, 2011
Tweet

Other Decks in Programming

Transcript

  1. Agenda  自己紹介  前提知識  RHIPE概要  インストール 

    RHIPEを使う  デモ  RHIPEの問題点 (懸念点)  まとめ
  2. 自己紹介  twitter: @jingbay  SE  Java屋でしたが最近はあまり書いていない  モバイル開発

    (Android、iPhone)  Web (front/backend)  言語は広く浅く何でも。最近はPython  ここ2年程Hadoopを公私にて使用中  Hadoopのお仕事下さい
  3. Hadoop  分散バッチ処理システム  クラスター環境  計算機をいっぱい使う  巨大データを扱える 

    PBクラスの実績いっぱい  高速な処理  ただし得手、不得手がある  冗長性が高い  故障があっても処理が止まらない
  4. HDFS  Hadoop Distributed File System  1台のPCに入りきらない超巨大ファイルを扱える  ファイルはブロック単位に分割され、ブロックは標準

    でPC3台にコピーされる  PCが1台や2台壊れてもデータが失なわれない  データのコピーが複数あることで後の処理で有利に  HDFSはOSにマウントできない  アクセスにはHadoopのライブラリを経由する必要がある
  5. MapReduce  Googleが開発した分散処理手法  Map関数とReduce関数に処理を分割  関数型言語で良く知られた手法を分散処理に応用  Map関数とReduce関数はRにもあるよ! 

    HDFS上で分散されたデータを処理するMap  データの変形、フィルタリング等  単純にファイル形式の変換などでも使える  同じキーのデータ同士を集約するReduce  必ず同じKeyのデータが集まるので合計の演算等
  6. Hadoopはなぜ速いのか?  データローカリティ  処理をデータが存在する場所で行うこと  現在のコンピュータはCPUだけが速くI/Oがとても遅い  プログラムはデータに比べとても小さい 

    データでなく、プログラムを転送したほうが効率が良い  HDFSでデータを分散し、MapReduceでプログラムを分散 し、データを大量のCPUで効率良く処理する
  7. Hadoop Streaming  MapReduce処理の入出力に標準入出力を用いる ことでどんな言語でも使えるようにした仕組  R言語もHadoop Streamingだけでも MapReduceできます 

    標準入出力を用いるのでMapとReduceは別のファ イルに分ける必要があります  Reducerはキーの変わり目を判断する必要が有り
  8. Hadoopの扱うファイル形式  テキスト、バイナリ  通常のファイル  シーケンスファイル  Keyとvalueのペアを連続した、レコード単位にて区切る ことが可能なバイナリファイル形式

     マークを付けるとファイルをスキップしながら読めるので 処理が高速になる  マップファイル  KeyとValueのペアをkeyで検索できるファイル形式  巨大なファイルにてhash tableが実現できる
  9. RHIPE  R and Hadoop Integrated Processing Environment  最近は無かったことにしている?

     希臘語 ← 読める? (^^;  り-ぺい "hree-pay" "in the moment in Greek"  ライセンスはGPLv3
  10. MapReduceを効率良く使える  MapReduceを独立したファイルに書く必要がない  Rだけでジョブ全体を記述可能です  HDFSに直接Rのオブジェクトを読み書きできる  HDFSはOSにマウントできないので普通はアクセスでき ない

     表の行や列の名前等、属性が保存できます  ProtocolBufferを使っています  Reducerでキーの変わり目を判断する必要がない  小さな幸せ; 出力パスを事前に消す必要がない
  11. インストール  JDK  Apache Hadoop  R language 

    RHIPE  これらをクラスター上の全ての計算機に入れます  普通にやると3台でも死ねます  頭の良いクラスター構築方法は以下の本に  Hadoop徹底入門  http://www.amazon.co.jp/dp/4798122335/
  12. Java  Apache Hadoopの実行に必要です  JavaSE6の最新を。u19以下の古い物は問題が出ます 。  OracleのみがApacheによりサポートされます 

    http://java.sun.com/  インストール方法は上記サイト参照  OpenJDKは一応動作確認されています  多くのLinuxディストリビューションにはこれが入ってます  Javaサポートに関しては次のページ参照  http://wiki.apache.org/hadoop/HadoopJavaVersions
  13. Apache Hadoop  http://hadoop.apache.org/common/releases.html#Download  今日時点で最新の安定板は0.20.203  0.20.204はβと書いてあるので本番では使わない  0.21も不安定番なので選ばない

     インストール方法は解凍後のdocを参照  疑似分散モードか完全分散モードで  他の選択肢  Cloudera  MapR  IBM InfoSphere BigInsights  etc.
  14. R言語 (1/2)  yum、apt等をお勧めします  Rはrpmの依存rpmが100を越えます  Fedoraは標準リポジトリから入れられます  RedHat、CentOS等は非公式リポジトリにあります

     http://rpmrepo.org/RPMforge  ソースからのコンパイル  デフォルトではX11が必要なので注意  configure --with-x=no  X11がないと画像イメージファイル作成のみもできません
  15. R言語(2/2)  PATH、DLLの解決  yumは自動で解決する  ソースからコンパイルした場合  tasktrackerプロセスの実行パス上にR言語が存在しなければ ならない

     Hadoop専用ユーザのPATHを設定する  R言語は専用の動的リンクライブラリを用います。このライブラリ がMapReduceタスクから見えてR言語のプロセスがリンクできな ければなりません。  /etc/ld.so.conf.d/を設定してください  http://groups.google.com/group/brumail/browse_thread/thread/a87d708ed060c182
  16. RHIPE (1/2)  RHIPEのインストールにはGoogleの ProtocolBuffersが必要  http://code.google.com/p/protobuf  ソース配布しか無いので開発環境がいる 

    全てのノードへの配布が面倒  デフォルトでは/usr/local/libにインストールされるためR と同じ問題が発生します  ./configure --prefix=/usr  make; make install
  17. RHIPE (2/2)  ダウンロード : 最新はcode googleです  古いものがgithubに残っているので注意 

    http://code.google.com/p/rhipe  export HADOOP=/opt/hadoop  export HADOOP_BIN=/opt/hadoop/bin  R CMD INSTALL Rhipe_0.66.tar.gz  Rのバッチコマンドでインストールします  ソースのビルドが走りインストールが行われます  ここでもGCCの開発環境が必要です
  18. 初期化 > library(Rhipe) -------------------------------------------------------- | IMPORTANT: Before using Rhipe call

    rhinit() | | Rhipe will not work or most probably crash | -------------------------------------------------------- > rhinit() Rhipe initialization complete Rhipe first run complete [1] TRUE >
  19. rhinit  rhinitはとにかく新ジョブを実行する前には必ず実 行する必要があるようです。  本家のドキュメントも歯切れが悪い  デバッグ時はrhinit(T,T)  エラーログのみでなくinfoも出ます

     buglevelという引数もあり大きな数値を入れる程、 verboseな(より詳細な)ログが得られるらしい  実際にはまだ詳細が決まっていないようだ  とりあえず例では3000を入れていた
  20. WordCount Mapper map <- expression({ words_vector<- unlist(strsplit(unlist(map.values), " ")) lapply(words_vector,

    function(i) rhcollect(i, 1)) }) MaperとReducerは共にRのexpressionを用いる map.valuesには入力テキストが行別のリストとして渡される リストをベクターにし、各行を空白で切断して単語を取り出し、結果を単語のベクターに している。全ての単語をキーに値1を付けてKeyValueをemitしている
  21. WordCount Reducer reduce <- expression( pre = {total = 0},

    reduce={total <- sum(total, unlist(reduce.values))}, post={rhcollect(reduce.key, total)} ) pre、reduce、postと部品を分けられるので見通しが非常に良くなる
  22. WordCount Jobの設定、実行 mapred <- list(rhipe_map_buff_size = 20, mapred.job.tracker='local') job_object <-

    rhmr(map=map,reduce=reduce, inout=c("text", "sequence"), ifolder="/user/foo/README.txt", ofolder="/user/foo/output", mapred = mapred, jobname = "word_count") rhex(job_object)
  23. RHIPEの適切な使い方  Rは設計がin-memory  メモリ上で全てを演算する  RHIPEは巨大な入力ファイルをMapファイルに整形 することを重視している  新関数

    rhS2M : シーケンスからMapへの変換  Valueに複雑なRのオブジェクトが入る  Keyや分析の軸等を利用し、メモリサイズへ適切に 落とし込みRで分析を行う戦略
  24. 新バージョンが出(て)ました  GitHub -> Google Code  新旧ドキュメント  旧

    : http://www.stat.purdue.edu/~sguha/rhipe/doc/html/index.html  新:http://ml.stat.purdue.edu/rhipe/  新はまだドキュメントが充実していません  新チュートリアル  http://ml.stat.purdue.edu/rhafen/rhipe/#Introduction  チュートリアルはかなり良くなっています!
  25. RHIPEの問題点  MapReduceの記述は難しい  プログラマの腕に性能が大きく左右される  Hadoop MapReduceデザインパターン  http://www.amazon.co.jp/dp/4873115124/

     直MapReduce以外の勃興  Hive、Pig、Jaql、etc。  BSP等の新しいパラダイムにどう対応するか?  RHive : http://www.slideshare.net/wdkz/tokyor16-wdkz  性能  R自体の重さを考えた時、Rで全て記述するのは適切か?  ProtocolBuffers?  MessagePackがお勧め  作者はAvroへの変更を考えている
  26. 分散ファイルシステムの成長  商業、OSSにて真の分散ファイルシステムが増えて いる  OSにマウントでき、Hadoopと連携可能  MapR  IBM

    GPFS-SNC  GlusterFS  Gfarm  Ceph  etc.  これらがHDFSに取って換わるとRHIPEの直接 HDFSにアクセスできる価値は意味が無くなる
  27. まとめ  RHIPEはRでMapReduceを効率良く記述できる パッケージ  RだけでHadoopジョブ全体を記述できる  HDFSに直接読み書きでき、Rのオブジェクトを保存 できる 

    Mapファイルを活用し、in-memoryサイズに分析 対象を落とし込むことが鍵  状況は流動的なので注意  RとHadoopの統合・連携は他にも方法がある  SciPy/NumPy、Mahout等の存在にも注意