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
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
120
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
24k
Java ジェネリクス入門 2024
nagise
0
670
外部システム連携先が10を超えるシステムでのアーキテクチャ設計・実装事例
kiwasaki
1
260
WEBエンジニア向けAI活用入門
sutetotanuki
0
320
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
2
230
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
10
1.1k
광고 소재 심사 과정에 AI를 도입하여 광고 서비스 생산성 향상시키기
kakao
PRO
0
160
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
1.4k
Content Security Policy入門 セキュリティ設定と 違反レポートのはじめ方 / Introduction to Content Security Policy Getting Started with Security Configuration and Violation Reporting
uskey512
1
470
受け取る人から提供する人になるということ
little_rubyist
0
170
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
290
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.8k
Designing Experiences People Love
moore
138
23k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2.1k
Designing the Hi-DPI Web
ddemaree
280
34k
For a Future-Friendly Web
brad_frost
175
9.4k
Building Applications with DynamoDB
mza
90
6.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
42
2.2k
Teambox: Starting and Learning
jrom
133
8.8k
Being A Developer After 40
akosma
86
590k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
7
520
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等の存在にも注意
以上