Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RHIPE徹底入門
Search
minghai
October 16, 2011
Programming
2
2.4k
RHIPE徹底入門
HadoopをRから効率良く使用可能なパッケージであるRHIPEについてインストールから使用方法まで簡単に説明しています。
minghai
October 16, 2011
Tweet
Share
Other Decks in Programming
See All in Programming
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
24k
イベント駆動で成長して委員会
happymana
1
250
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
160
CSC509 Lecture 09
javiergs
PRO
0
130
CPython 인터프리터 구조 파헤치기 - PyCon Korea 24
kennethanceyer
0
250
Hotwire or React? ~Reactの録画機能をHotwireに置き換えて得られた知見~ / hotwire_or_react
harunatsujita
8
4.9k
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.1k
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
3
420
カスタムしながら理解するGraphQL Connection
yanagii
1
1.4k
デプロイを任されたので、教わった通りにデプロイしたら障害になった件 ~俺のやらかしを越えてゆけ~
techouse
53
33k
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
2
1.2k
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
530
Featured
See All Featured
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Navigating Team Friction
lara
183
14k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Music & Morning Musume
bryan
46
6.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Thoughts on Productivity
jonyablonski
67
4.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Adopting Sorbet at Scale
ufuk
73
9.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.2k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
Transcript
RHIPE徹底入門 @jingbay
Agenda 自己紹介 前提知識 RHIPE概要 インストール
RHIPEを使う デモ RHIPEの問題点 (懸念点) まとめ
自己紹介 twitter: @jingbay SE Java屋でしたが最近はあまり書いていない モバイル開発
(Android、iPhone) Web (front/backend) 言語は広く浅く何でも。最近はPython ここ2年程Hadoopを公私にて使用中 Hadoopのお仕事下さい
予防線 本日の発表内容、及びこの資料内容の記述全ては 私個人の考え、体験、主張に基づくものであり、私 が所属する企業、組織、団体には一切関係がありま せん。
警告 今日のお話は非常にインフラ屋寄りです。 #TokyoWebMiningなのに数式が出ません HadoopとR言語に興味の無い人には全くうれしくな いお話です 誠に申し訳ございません
トイレと睡眠学習はご自由にどうぞ :-)
前提知識
Hadoop 分散バッチ処理システム クラスター環境 計算機をいっぱい使う 巨大データを扱える
PBクラスの実績いっぱい 高速な処理 ただし得手、不得手がある 冗長性が高い 故障があっても処理が止まらない
HDFS + MapReduce Hadoop =
HDFS Hadoop Distributed File System 1台のPCに入りきらない超巨大ファイルを扱える ファイルはブロック単位に分割され、ブロックは標準
でPC3台にコピーされる PCが1台や2台壊れてもデータが失なわれない データのコピーが複数あることで後の処理で有利に HDFSはOSにマウントできない アクセスにはHadoopのライブラリを経由する必要がある
MapReduce Googleが開発した分散処理手法 Map関数とReduce関数に処理を分割 関数型言語で良く知られた手法を分散処理に応用 Map関数とReduce関数はRにもあるよ!
HDFS上で分散されたデータを処理するMap データの変形、フィルタリング等 単純にファイル形式の変換などでも使える 同じキーのデータ同士を集約するReduce 必ず同じKeyのデータが集まるので合計の演算等
Hadoopはなぜ速いのか? データローカリティ 処理をデータが存在する場所で行うこと 現在のコンピュータはCPUだけが速くI/Oがとても遅い プログラムはデータに比べとても小さい
データでなく、プログラムを転送したほうが効率が良い HDFSでデータを分散し、MapReduceでプログラムを分散 し、データを大量のCPUで効率良く処理する
Hadoop Streaming MapReduce処理の入出力に標準入出力を用いる ことでどんな言語でも使えるようにした仕組 R言語もHadoop Streamingだけでも MapReduceできます
標準入出力を用いるのでMapとReduceは別のファ イルに分ける必要があります Reducerはキーの変わり目を判断する必要が有り
Hadoopの扱うファイル形式 テキスト、バイナリ 通常のファイル シーケンスファイル Keyとvalueのペアを連続した、レコード単位にて区切る ことが可能なバイナリファイル形式
マークを付けるとファイルをスキップしながら読めるので 処理が高速になる マップファイル KeyとValueのペアをkeyで検索できるファイル形式 巨大なファイルにてhash tableが実現できる
前提知識ここまで
RHIPE 概要
RHIPE R and Hadoop Integrated Processing Environment 最近は無かったことにしている?
希臘語 ← 読める? (^^; り-ぺい "hree-pay" "in the moment in Greek" ライセンスはGPLv3
MapReduceを効率良く使える MapReduceを独立したファイルに書く必要がない Rだけでジョブ全体を記述可能です HDFSに直接Rのオブジェクトを読み書きできる HDFSはOSにマウントできないので普通はアクセスでき ない
表の行や列の名前等、属性が保存できます ProtocolBufferを使っています Reducerでキーの変わり目を判断する必要がない 小さな幸せ; 出力パスを事前に消す必要がない
インストール
インストール JDK Apache Hadoop R language
RHIPE これらをクラスター上の全ての計算機に入れます 普通にやると3台でも死ねます 頭の良いクラスター構築方法は以下の本に Hadoop徹底入門 http://www.amazon.co.jp/dp/4798122335/
Java Apache Hadoopの実行に必要です JavaSE6の最新を。u19以下の古い物は問題が出ます 。 OracleのみがApacheによりサポートされます
http://java.sun.com/ インストール方法は上記サイト参照 OpenJDKは一応動作確認されています 多くのLinuxディストリビューションにはこれが入ってます Javaサポートに関しては次のページ参照 http://wiki.apache.org/hadoop/HadoopJavaVersions
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.
R言語 (1/2) yum、apt等をお勧めします Rはrpmの依存rpmが100を越えます Fedoraは標準リポジトリから入れられます RedHat、CentOS等は非公式リポジトリにあります
http://rpmrepo.org/RPMforge ソースからのコンパイル デフォルトではX11が必要なので注意 configure --with-x=no X11がないと画像イメージファイル作成のみもできません
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
RHIPE (1/2) RHIPEのインストールにはGoogleの ProtocolBuffersが必要 http://code.google.com/p/protobuf ソース配布しか無いので開発環境がいる
全てのノードへの配布が面倒 デフォルトでは/usr/local/libにインストールされるためR と同じ問題が発生します ./configure --prefix=/usr make; make install
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の開発環境が必要です
インストールその他 RHEL clusterを用いてクラスタ内の1台のみRをイ ンストールしてRhipeを用いる AWS EMRにてRhipeを用いる http://code.google.com/p/rhipe/w/list
私はどちらも試していません 最近の事例のようです
参考情報 Step by Step インストールガイド http://bit.ly/qadKZG
インストールここまで
RHIPEを使う
初期化 > 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 >
rhinit rhinitはとにかく新ジョブを実行する前には必ず実 行する必要があるようです。 本家のドキュメントも歯切れが悪い デバッグ時はrhinit(T,T) エラーログのみでなくinfoも出ます
buglevelという引数もあり大きな数値を入れる程、 verboseな(より詳細な)ログが得られるらしい 実際にはまだ詳細が決まっていないようだ とりあえず例では3000を入れていた
HDFS操作 rhwrite(オブジェクト, HDFSファイルパス) KVのListやVectorを取る rhread(ファイルパス) rhls(ファイルパス,
recurse=F)
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している
WordCount Reducer reduce <- expression( pre = {total = 0},
reduce={total <- sum(total, unlist(reduce.values))}, post={rhcollect(reduce.key, total)} ) pre、reduce、postと部品を分けられるので見通しが非常に良くなる
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)
デモ wordcountの実行
RHIPEの適切な使い方 Rは設計がin-memory メモリ上で全てを演算する RHIPEは巨大な入力ファイルをMapファイルに整形 することを重視している 新関数
rhS2M : シーケンスからMapへの変換 Valueに複雑なRのオブジェクトが入る Keyや分析の軸等を利用し、メモリサイズへ適切に 落とし込みRで分析を行う戦略
新バージョンが出(て)ました 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 チュートリアルはかなり良くなっています!
新バージョンダイジェスト rhapply ジョブを全く記述しないでも、HDFS上の巨大ファイル全 体にRのfunctionを適用可能です rhS2M シーケンスファイルからマップファイルへの変換
Mapファイルの重視が伺える(?) ジョブのコントロール等
RHIPEの問題
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への変更を考えている
デバッグの難しさ RHIPEにはデバッグの手段に良いものがまだない 特に完全分散モードでは難しい 自分はRのcatでとりあえずprintfデバッグしてまし た より効率の良い手法、教えてください
分散ファイルシステムの成長 商業、OSSにて真の分散ファイルシステムが増えて いる OSにマウントでき、Hadoopと連携可能 MapR IBM
GPFS-SNC GlusterFS Gfarm Ceph etc. これらがHDFSに取って換わるとRHIPEの直接 HDFSにアクセスできる価値は意味が無くなる
各社のRでの競争 最近、Rの商業製品での人気が非常に大きい 各社別々にRとHadoopやDWHとの連携方法を提 案している Revolution ClouderaがRevolutionと提携
Oracle OracleがRを製品化しサポート IBM InforSphere BigInsightsでのRとの連携
RHadoop RHIPEの作者はRevolutionに雇われている Revolutionが開発しているのがこれ どちらに力を入れるのか? http://github.com/RevolutionAnalytics/RHadoop/
https://docs.google.com/present/view?id=dd5v8vcm_1024dmfzw8dt
まとめ
まとめ RHIPEはRでMapReduceを効率良く記述できる パッケージ RだけでHadoopジョブ全体を記述できる HDFSに直接読み書きでき、Rのオブジェクトを保存 できる
Mapファイルを活用し、in-memoryサイズに分析 対象を落とし込むことが鍵 状況は流動的なので注意 RとHadoopの統合・連携は他にも方法がある SciPy/NumPy、Mahout等の存在にも注意
以上