JAWSDAYS 2014 ACEに聞け! EMR編

陽平 山口
陽平 山口有限会社来栖川電算 事業主 at 有限会社来栖川電算
有限会社 来栖川電算
山口 陽平
EMR
#ACEつぶやくときはハッシュタグを忘れずに!
ゕンケート
知ってる? 興味ある? 使ってる?
ロ
ゴ
の
セ
ン
ス
今日の話は
Hadoop や Mahout を試したいプログラマ向け
• 自己紹介 & 会社紹介
• Mahout on EMR を試す手順
– Mahout プログラムを書いて EMR で実行
• 初心者が知っておくとよいこと
– よくはまる罠・チューニングの考え方
• 話さないこと
– Hadoop や Mahout の詳しい使い方
– Hbase・Hive・Pig on EMR とか
• さんざん紹介されているのでそっちを見てね!
自己紹介 & 会社紹介
要するに技術力で開拓するタ゗プ
• 必要なら何でも徹底的にやる研究者
– プログラミング言語・データベース分散
– ゕルゴリズム・機械学習・CV・自然言語
– 名古屋工業大学出身・未踏ソフトウェゕ経験
– 世界を美しく記述することを夢見る35歳
• 人を驚かせるのが好き
– ハードリゕルタイムJavaVM
– 1000台越え構成のペタバイト分散DB
– 秒間1000万クエリ処理できるKVS
– 超多クラス対応の超高速物体認識エンジン
山 口 陽 平
@melleo1978
※あくまでも゗メージです。
実物に髪の毛はありません。
• 概要:11年目
– 名古屋工業大学発ベンチャー(2003年)
• 目的:ロボの頭脳を作る
– 知的インターフェイスによる社会の変革
– ソフトウェゕの品質・生産性の向上
• スタッフ:28人
– 役員3人〃正社員11人〃見習い8人
– データ作成5人〃家政婦1人
– IPA未踏ソフトウェゕ経験者多数
• 社風:難しことを楽しく
– 職人〃挑戦〃自由〃昼食・夕食・飲み会は無料
来栖川電算
http://kurusugawa.jp/
弊社が目指すロボ
※写真はあくまでも゗メージです。
来栖川電算
認識技術 や 大規模なデータの分析 をやる会社
• 認識技術
– 情景画像文字認識
– 物体認識
– モーション認識・行動認識
• データ分析
– 対象:映像〃各種センサ〃サービスログ
– 規模:ペタバイト級
• 日々やってること
– ゕルゴリズム・機械学習・特徴量の研究と応用
AWS 活用事例
大学病院向けデータマ゗ニング環境
• Hadoopによる冗長化で高ゕベ゗ラビリテゖ
• Pig+UDFにより手軽で自由な分析をサポート
AWS 活用事例
広告企業向けデータマ゗ニング環境
• 最新手法でビッグデータを分析し、ニーズ・施策の発掘
• 分析期間・分析対象は何十倍にも増える予定
AWS 活用事例
組込企業向けデータマ゗ニング環境
• 様々なゕルゴリズムが並列計算に対応し始めている。
• スポットでしか分析しないなら AWS は非常に安い。
AWS 活用事例
EC サ゗ト用データマ゗ニング環境
• Hadoopによる冗長化で高ゕベ゗ラビリテゖ
• Pig・hBase・MapReduceによるリゕルタ゗ム集計
AWS 活用事例
オンラ゗ン機械学習フレームワーク試験環境
• 深夜に緩和申請して、寝て起きたら使える
ようになってた。中の人の対応がはやい!
AWS 活用事例
物体認識サービス 1000sors.com
• SWSとCloudFormationを組み合わせれば、物体認識
サービスに必要な゗ンスタンス群を簡単に制御可能
AWS 活用事例
物体認識サービスのための機械学習環境
• S3上に構築した分散フゔ゗ルシステムに全てを格納
– 画像・教師・設定・スクリプト・辞書・レポート・ログ
– バッチ的なシステムのためのフゔイルシステムはすぐ作れる
AWS 活用事例
情景画像文字認識のための機械学習環境
• 文字認識のための大規模機械学習
– 30タスク(8段) 4~5日/回(普通のcore i7マシン)
– cc2.8xlargeのSPOTで節約(時間:1/4〃費用:1/2)
• ※1時間以内にセーブポイントまで進める工夫が必要
AWS 活用事例集
“すっごく” 便利なのでいっぱい使ってます!
毎
月
、
猛
烈
に
増
え
て
い
る
よ
!
詳
細
は
過
去
の
ス
ラ
イ
ド
を
見
て
ね
!
EMR
ざっくり把握しよう
EMR
すぐに使える hadoop
• 大規模データの蓄積・バッチ分析が得意
– 非構造化データの処理:検索インデック作成
• Java で分散処理(MapReduce)が簡単に書ける
– 構造化データの処理:ログ集計
• Hive・HBase・Pig を使えば SQL ぽく書ける
← コレ
EMR
単なる hadoop との違い
• 追加機能
– 分散フゔイルシステムとして S3 も選べる
– AWS 環境に合わせてチューニングされてる
• 選ぶだけで゗ンストールできる機能
– 構造化データの処理:Hive〃Hbase〃Pig
– 監視:Ganglia
• クラスタの管理
– 起動:ノード数を入力するだけ
– 監視・操作:Web・CLI・SDK
EMR
料金 … よく考えると安い!
• EC2 料金 + EMR 料金(1時間単位)
– EMR 料金:EC2 料金(オンデマンド)× 1/4 ~ 1/7
– リザーブドやスポットで節約可能
• 例:cc2.8xlarge … 2.9$/時間
– 買うと 30 万円 ⇒ 1000 時間
– 4 台時間/実験 ⇒ 250 実験
– 普段はローカルの小さなデータで実験。たま
に大きなデータで実験するときだけなら安い
– スポット使えば 20% くらいは節約できそう
MAHOUT
ざっくり把握しよう
Mahout
Hadoop 用の機械学習ラ゗ブラリ
• 機械学習ゕルゴリズムがいっぱい
– 数十種類:分類〃回帰〃クラスタリング〃…
– 最新版:0.9(EMR で使えるのは 0.8)
• スケーラブルな実装
– R では手におえないデータ量でも OK
– 速くはないが、台数でゴリ押し
• そこそこ手軽(R よりちょっと面倒)
– 入出力:HDFS 上のシーケンスフゔイル
– 実行:CLI を使えばプログラムレス
Mahout
いろんなゕルゴリズムが実装されている
• 1.0 になるともっと充実!
Collaborative Filtering
User-Based Collaborative Filtering
Item-Based Collaborative Filtering
Matrix Factorization with Alternating Least Squares
Matrix Factorization with Alternating Least Squares on Implicit Feedback
Weighted Matrix Factorization, SVD++, Parallel SGD
Classification
Logistic Regression
Naive Bayes / Complementary Naive Bayes
Random Forest
Hidden Markov Models
Multilayer Perceptron
Clustering
Canopy Clustering
k-Means Clustering
Fuzzy k-Means
Streaming k-Means
Spectral Clustering
Dimensionality Reduction
Singular Value Decomposition
Lanczos Algorithm
Stochastic SVD
Principal Component Analysis
Topic Models
Latent Dirichlet Allocation
Miscellaneous
Frequent Pattern Mining
RowSimilarityJob
ConcatMatrices
Collocations
パッチ画像をクラスタリング
の前準備
EMR 上で Mahout の K-Means を使って
クラスタリング
クラスタ(似ているデータの集団)を求めること
• ゕルゴリズムと「似
ている」の基準が変
われば、求まるクラ
スタが全く異なる
• 求まったクラスタを
指し示す言葉がない
場合が多い(解釈が
難しいことがある)
クラスタの使い方
クラスタを使ってデータを再表現
• データの再表現
– ラベル化
• 所属するクラスタ番号
– 所属度ベクトル化
• (クラスタ1の所属度〃…〃クラスタnの所属度)
– 容量・処理時間を節約できる
– 線形識別器で分離し易くなる
• データへのラベル付与
– ラベルで検索できる(ノイズ除去に使える)
これから行う実験
角や境界付近のパッチ画像をクラスタリング
• 角や境界付近の多様性が分かるといいな
– 本の表紙画像:2094 枚
• 2011 年 4 月出版 @ amazon.co.jp
– 1枚から抽出するパッチ:最大 512 個
用意したデータ
パッチ画像が入ったバ゗ナリフゔ゗ル(約1GB)
• バ゗ナリフゔ゗ルの作り方
– グレースケール画像からキーポイント(位
置・方向・大きさ)を検出
– そこからN×N へ正規化した画像を抽出
– 抽出した画像の輝度値(N2個)をバイナリ
フゔイルへ追記
パッチ画像をクラスタリング
EMR 上で Mahout の K-Means を使って
EMR の実行゗メージ
必要なものを S3 に配置して実行
• EMR はステップ単位(jar)で実行
大雑把な手順
Mahout の入出力形式に合わせて関数呼出
• Mahout プログラムを作成
– pom フゔイルを作成
– main プログラムを作成
• バイナリフゔイルから入力形式へ変換
• K-Means でクラスタリング
• 出力形式からバイナリフゔイルへ変換
• ローカル(疑似分散環境)で実行
• EMR で実行(WebUI)
MAHOUT プログラムを作成
パッチ画像をクラスタリングするために
入力形式
2種類のシーケンスフゔ゗ル(分割OK)
• K-Means に渡すパスは親階層
ベクトルデータ(今回はバイナリファイルを素朴に変換)
パス target/input/patches/part-XXXXX
形式 {Key:Long, Value:Vector<Double>}
意味 {Key:ベクトル番号, Value:クラスタリング対象ベクトル}
クラスタデータ(今回はベクトルデータの先頭 K 個)
パス target/input/clusters/part-XXXXX
形式 {Key:Text, Value:Kluster}
意味 {Key:クラスタ名, Value:クラスタ番号と初期のクラスタ中心}
出力形式
2種類のシーケンスフゔ゗ル(分割OK)
• K-Means に渡すパスは親階層
クラスタデータ
初期パス target/output/clusters-0/part-XXXXX
中間パス target/output/clusters-X/part-r-XXXXX
最終パス target/output/clusters-X-final/part-r-XXXXX
形式 {Key:Int, Value:Cluster}
意味 {Key:クラスタ番号, Value:クラスタの中心と半径}
ベクトルデータの分類結果
パス target/output/clusteredPoints/part-m-XXXXX
形式 {Key:Int, Value:WeightedVector<Double>}
意味 {Key:クラスタ番号, Value:クラスタリング対象ベクトル}
pom フゔ゗ル
Eclipse で Maven プロジェクトを作成
• Mahout 0.8 への依存関係を追加
• 依存先を jar に含める設定を追加
– これから作る main クラスの完全修飾名
<dependencies>
<dependency><groupId>org.apache.mahout</groupId><artifactId>mahout-core</artifactId><version>0.8</version></dependency>
<dependency><groupId>org.apache.mahout</groupId><artifactId>mahout-math</artifactId><version>0.8</version></dependency>
<dependency><groupId>org.apache.mahout</groupId><artifactId>mahout-examples</artifactId><version>0.8</version></dependency>
</dependencies>
<build><plugins><plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
<archive><manifest><mainClass>jp.kurusugawa.pacth_clustering</mainClass></manifest></archive>
</configuration>
<executions><execution>
<id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals>
</execution></executions>
</plugin></plugins></build>
main プログラム
ベクトルデータを書き込む
• LongWritableとVectorWritableを使う
private static void downloadPatches(Configuration aConfiguration, Path aWorkingInputPatchesPath, Path aPatchesPath, int aColumnCount)
throws IOException {
SequenceFile.Writer tOutput = openSequenceFileWriter(aConfiguration, aWorkingInputPatchesPath, LongWritable.class,
VectorWritable.class);
try {
LongWritable tRowIndexWritable = new LongWritable();
VectorWritable tRowWritable = new VectorWritable();
DataInputStream tInput = openDataInputStream(aConfiguration, aPatchesPath);
try {
long tRowCount = getFileLength(aConfiguration, aPatchesPath) / aColumnCount;
for (long tRowIndex = 0L; tRowIndex < tRowCount; tRowIndex++) {
Vector tRow = new RandomAccessSparseVector(aColumnCount);
for (int tColumnIndex = 0; tColumnIndex < aColumnCount; tColumnIndex++)
tRow.setQuick(tColumnIndex, tInput.readUnsignedByte());
tRowIndexWritable.set(tRowIndex);
tRowWritable.set(tRow);
tOutput.append(tRowIndexWritable, tRowWritable);
}
} finally { IOUtils.closeQuietly(tInput); }
} finally { IOUtils.closeQuietly(tOutput); }
}
main プログラム
クラスタデータを書き込む
• TextとKlusterを使う
• 「似ている」の基準:マンハッタン距離
private static void downloadClusters(Configuration aConfiguration, Path aWorkingInputClustersPath, Path aPatchesPath, int aColumnCount,
int aClusterCount) throws IOException {
SequenceFile.Writer tOutput = openSequenceFileWriter(aConfiguration, aWorkingInputClustersPath, Text.class, Kluster.class);
try {
DataInputStream tInput = openDataInputStream(aConfiguration, aPatchesPath);
try {
int tClusterCount = (int) Math.min(aClusterCount, getFileLength(aConfiguration, aPatchesPath) / aColumnCount);
for (int tClusterIndex = 0; tClusterIndex < tClusterCount; tClusterIndex++) {
Vector tCenter = new RandomAccessSparseVector(aColumnCount);
for (int tColumnIndex = 0; tColumnIndex < aColumnCount; tColumnIndex++)
tCenter.setQuick(tColumnIndex, tInput.readUnsignedByte());
Kluster tCluster = new Kluster(tCenter, tClusterIndex, new ManhattanDistanceMeasure());
tOutput.append(new Text(tCluster.getIdentifier()), tCluster);
}
} finally { IOUtils.closeQuietly(tInput); }
} finally { IOUtils.closeQuietly(tOutput); }
}
main プログラム
K-Means でクラスタリング
• 出力先を削除する(やらないとこける)
• 入力元と出力先のパスを指定し実行する
private static void run(Path aPatchesPath, Path aClustersPath, Path aWorkingInputPatchesPath, Path aWorkingInputClustersPath, Path
aWorkingOutputPath, int aColumnCount, int aClusterCount) throws IOException, InterruptedException, ClassNotFoundException {
Configuration tConfiguration = new Configuration();
System.out.println("download patches");
HadoopUtil.delete(tConfiguration, aWorkingInputPatchesPath);
downloadPatches(tConfiguration, new Path(aWorkingInputPatchesPath, "part-00000"), aPatchesPath, aColumnCount);
System.out.println("download clusters");
HadoopUtil.delete(tConfiguration, aWorkingInputClustersPath);
downloadClusters(tConfiguration, new Path(aWorkingInputClustersPath, "part-00000"), aPatchesPath, aColumnCount, aClusterCount);
System.out.println("clustering");
HadoopUtil.delete(tConfiguration, aWorkingOutputPath);
KMeansDriver.run(tConfiguration, aWorkingInputPatchesPath, aWorkingInputClustersPath, aWorkingOutputPath, new
ManhattanDistanceMeasure(), 0.001D, 10, true, 0D, false);
System.out.println("upload clusters");
uploadClusters(tConfiguration, getWorkingOutputClustersPaths(tConfiguration, aWorkingOutputPath), aClustersPath, aColumnCount);
}
main プログラム
出来上がったクラスタデータを読み込む
• IntWritable・ClusterWritableを使う
private static void uploadClusters(Configuration aConfiguration, Path[] aWorkingOutputClustersPaths, Path aClustersPath, int
aColumnCount) throws IOException {
DataOutputStream tOutput = openDataOutputStream(aConfiguration, aClustersPath);
try {
for (Path tClustersPath : aWorkingOutputClustersPaths) {
SequenceFile.Reader tReader = openSequenceFileReader(aConfiguration, tClustersPath);
try {
IntWritable tClusterIndex = new IntWritable();
ClusterWritable tClusterWritable = new ClusterWritable();
while (tReader.next(tClusterIndex, tClusterWritable)) {
Vector tCenter = tClusterWritable.getValue().getCenter();
for (int tColumnIndex = 0; tColumnIndex < aColumnCount; tColumnIndex++) {
long tValue = Math.round(tCenter.getQuick(tColumnIndex));
tOutput.write(tValue < 0L ? 0 : tValue > 255L ? 255 : (int) tValue);
}
}
} finally { IOUtils.closeQuietly(tReader); }
}
} finally { IOUtils.closeQuietly(tOutput); }
}
main プログラム
フゔ゗ルシステムにゕクセスするユーテゖリテゖ
• パスからフゔ゗ルシステムを決定しない
と EMR で実行したときにこける
– hdfs://、s3://、s3n:// が混在するから
private static FileSystem getFileSystem(Configuration aConfiguration, Path aPath) throws IOException {
return FileSystem.get(aPath.toUri(), aConfiguration); }
private static FileStatus[] getFileStatuses(Configuration aConfiguration, Path aPath, PathFilter aPathFilter) throws IOException {
return getFileSystem(aConfiguration, aPath).listStatus(aPath, aPathFilter); }
private static long getFileLength(Configuration aConfiguration, Path aPath) throws IOException {
return getFileSystem(aConfiguration, aPath).getContentSummary(aPath).getLength(); }
private static DataInputStream openDataInputStream(Configuration aConfiguration, Path aPath) throws IOException {
return getFileSystem(aConfiguration, aPath).open(aPath); }
private static DataOutputStream openDataOutputStream(Configuration aConfiguration, Path aPath) throws IOException {
return getFileSystem(aConfiguration, aPath).create(aPath); }
private static SequenceFile.Reader openSequenceFileReader(Configuration aConfiguration, Path aPath) throws IOException {
return new SequenceFile.Reader(getFileSystem(aConfiguration, aPath), aPath, aConfiguration); }
private static SequenceFile.Writer openSequenceFileWriter(Configuration aConfiguration, Path aPath, Class<?> aKeyClass, Class<?>
aValueClass) throws IOException {
return new SequenceFile.Writer(getFileSystem(aConfiguration, aPath), aConfiguration, aPath, aKeyClass, aValueClass); }
ローカルで実行
パッチ画像をクラスタリングするために
ローカルで実行
EMR で実行する前にローカルで動くようにする
• まずは小さなデータで試す
• 成功すると右みたいな感じ
– たくさんログがでる
– たくさんフゔイルができる
– シーケンスフゔイルを開くと
データ型が分かる
• バージョン違いでデータ型が変
わったのに気付ける
main プログラム
EMR で実行する前にパスを指定できるように変更
• 両環境で実行できるプログラム
– 中間データのパスも指定できると便利
public static void main(String[] aArguments) throws IOException, InterruptedException, ClassNotFoundException {
Path tPatchesPath = new Path("src/test/resources/patches/patches.bin");
Path tClustersPath = new Path("src/test/resources/patches/clusters.bin");
Path tWorkingInputPatchesPath = new Path("target/input/patches");
Path tWorkingInputClustersPath = new Path("target/input/clusters");
Path tWorkingOutputPath = new Path("target/output");
int tColumnCount = 31 * 31; int tClusterCount = 256;
if (aArguments.length > 0) {
tPatchesPath = new Path(aArguments[0]);
tClustersPath = new Path(aArguments[1]);
tWorkingInputPatchesPath = new Path(aArguments[2]);
tWorkingInputClustersPath = new Path(aArguments[3]);
tWorkingOutputPath = new Path(aArguments[4]);
tColumnCount = Integer.parseInt(aArguments[5]);
tClusterCount = Integer.parseInt(aArguments[6]);
}
run(tPatchesPath, tClustersPath, tWorkingInputPatchesPath, tWorkingInputClustersPath, tWorkingOutputPath, tColumnCount,
tClusterCount);
}
EMRで実行
パッチ画像をクラスタリングするために
EMR で実行
必要なものを S3 に配置しよう!
• Management Console でパスを指定
EMR で実行
すぐに起動できて、そこそこ監視しやすい
• S3バケットを作成
– main プログラムが入った jar を配置する
– それが処理するデータを配置する
• クラスタを起動
– ログの出力先とインスタンス数を決める
– ステップ(jar と引数)を追加する
• クラスタを監視
– 各種指標から想定通りの進行かを確認する
• S3バケットから出力をダウンロード
クラスタを起動
EMR Management Console
• Create cluster ⇒ 各種設定
– ログ出力先
– インスタンス
– ステップ
クラスタを起動
EMR Management Console
• Cluster Configuration
– クラスタ名とログ出力先を設定する
• ログ出力先:s3n://バケット名/パス/
• Software Configuration
– Hadoop のバージョンを設定する
• Mahout 0.8 を使うには Hadoop 1.0.3
– 追加インストールするものを選ぶ
• 使わないなら消しておく。
クラスタを起動
EMR Management Console
• Hardware Configuration
– インスタンスタイプと数を設定する
• マスター(main プログラムが動くノード):1個
• コゕ(タスクも処理するデータノード):0個~
• タスク(タスクを処理するノード):0個~
– 1台構成(マスターのみ)
– 複数台構成(マスターと他のノード)
• マスターはタスクを処理しないのでしょぼくていい
• 1時間弱で終わるように選ぶと安い
• 1時間以上かかる場合に Spot を選ぶと危険な場合も
• EMR は計算用として使うのがおすすめ
クラスタを起動
EMR Management Console
• Steps
– Custom JAR を選んでパスと引数を設定する
• 中間データもすべて引数で設定できると便利
• 中間データのパスを S3 にしておくと便利
• デバッグ中は終了しないとすると便利
s3n://jawsdays2014/data/book_patches.bin
s3n://jawsdays2014/data/book_clusters.bin
hdfs:///input/book_patches
hdfs:///input/book_clusters
hdfs:///output
961
256
s3n://jawsdays2014/executables/patch_clustering-0.0.1-SNAPSHOT-jar-with-dependencies.jar
クラスタを起動
EMR Management Console
• 設定完了 ⇒ Create cluster
クラスタを監視
EMR Management Console
• Cluster List からクラスタを選択
クラスタを監視
EMR Management Console
• Cluster
– クラスタの設定を確認できる
• Summary〃Configuration Details〃
Security/Network〃Hardware
• Monitoring ← ボトルネックが分かる
– クラスタの負荷を様々な観点で確認できる
• Cluster Status〃Map/Reduce〃Node Status〃IO
• Steps ← 失敗した処理が分かる
– ステップの進捗を様々な粒度で確認できる
• Step〃Job〃Task
クラスタを監視
EMR Management Console
• Monitoring > Cluster Status
– クラスタが処理しているジョブの量が分かる
• 失敗したジョブがあるか?
クラスタを監視
EMR Management Console
• Monitoring > Map/Reduce
– クラスタが処理しているタスクの量が分かる
• Map/Reduce数は想定通りか?
• スロットは足りているか?
クラスタを監視
EMR Management Console
• Monitoring > Node Status
– ノードの稼働状況が分かる
• ノードが死んでないか?
クラスタを監視
EMR Management Console
• Monitoring > IO
– S3とHDFSにかかる負荷が分かる
• IOの量は想定通りか?IOがボトルネックか?
クラスタを監視
EMR Management Console
• Steps
– ステップの進捗が分かる
• 追加したステップ(main プログラム)の進捗が
分かる。追加もできる。
– ステップのログが分かる
• main プログラムのログが stderr・stdout に出る
EMR で実行
EMR Management Console
• Steps > All Jobs > Tasks
– ジョブとステップのログが分かる。
• ステップ(main プログラム)から起動された
ジョブ、それを構成するタスクが分かる。
クラスタを監視
EC2 Management Console
• Monitoring
– 各インスタンスのCPU・IO
の負荷が分かる
• EC2 レベルで見るのもよい
結果を見てみよう
パッチ画像をクラスタリング
実験結果
角や境界を表しているクラスタが得られた
• 中心に穴
– 少しずれることも
• 境界の形
– │・┌・├・┼
– =・#・○
• 輝度勾配の強弱
– 質感・照明
• ⇒ 結構面白い!
チューニング
基本に忠実にやれば OK
チューニング
今回の main プログラムのダメなところ
• S3 ⇔ HDFS
– マスターだけで動くので
• スケールしない
• マスターが変換中にスレーブが遊んでる
– スケールさせるには
• Mapper として実装
• 入力フゔイルを事前に分割 or 分割可能に
• Mahout 用入力が無駄にでかい
– Byteがdoubleになっちゃう ⇒ 圧縮で解決
– K-Means 簡単だし、自分で実装してもいいよね
チューニング
データが増えてきたら
• データが増えてきたら
– 基本的にノードを増やせばいい
– ほとんどそれでうまくいく
• ちゃんと見積もって監視しよう
– 各ノードはどのくらい資源を使い切ってる?
– Mapper と Reducer の数は想定通り?
– CPU と IOどっちがボトルネック?
まとめ
まとめ
こわがらずに試してみよう
• Hadoop クラスタの起動が楽
– 計算時のみ起動する使い方がお勧め
• Hadoop クラスタの監視も楽
– Management Consoleだけでも結構分かる
• Mahout もそんなに難しくない
– 数十行で程度で試せる
– 単なる集計ではできないことができる
– 機械学習やると Hadoop 使ってる感じがする
おしまい
ご清聴ありがとうございました
面白いと思ったら投票してね!
1 of 68

More Related Content

What's hot(20)

画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分ける
Kazuaki Tanida3.2K views
TensorFlowの使い方(in Japanese)TensorFlowの使い方(in Japanese)
TensorFlowの使い方(in Japanese)
Toshihiko Yamakami5.6K views
第1回 Jubatusハンズオン第1回 Jubatusハンズオン
第1回 Jubatusハンズオン
Yuya Unno7.9K views
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう
幹雄 小川14.7K views
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出
Shuyo Nakatani15.7K views

Viewers also liked(6)

Similar to JAWSDAYS 2014 ACEに聞け! EMR編(20)

Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類
Shuzo Kashihara5.4K views
20121215 DevLOVE2012 Mahout on AWS20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS
都元ダイスケ Miyamoto1.8K views
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI3.1K views
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami48.9K views
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crf
Shuyo Nakatani6.4K views
Scala on HadoopScala on Hadoop
Scala on Hadoop
Shinji Tanaka2.5K views
秀スクリプトの話秀スクリプトの話
秀スクリプトの話
Hiroshi Tokumaru31.4K views

More from 陽平 山口

NGK2023S ChatGPTNGK2023S ChatGPT
NGK2023S ChatGPT陽平 山口
309 views20 slides
JAWS DAYS 2022JAWS DAYS 2022
JAWS DAYS 2022陽平 山口
79 views95 slides
NGK2022SNGK2022S
NGK2022S陽平 山口
128 views56 slides
JAWSUG 20210128JAWSUG 20210128
JAWSUG 20210128陽平 山口
684 views57 slides
AWS Webinar 20201224AWS Webinar 20201224
AWS Webinar 20201224陽平 山口
1.1K views72 slides

More from 陽平 山口(20)

NGK2023S ChatGPTNGK2023S ChatGPT
NGK2023S ChatGPT
陽平 山口309 views
JAWS DAYS 2022JAWS DAYS 2022
JAWS DAYS 2022
陽平 山口79 views
NGK2022SNGK2022S
NGK2022S
陽平 山口128 views
KCI PROFILE 2021-10-07KCI PROFILE 2021-10-07
KCI PROFILE 2021-10-07
陽平 山口397 views
JAWSUG 20210128JAWSUG 20210128
JAWSUG 20210128
陽平 山口684 views
AWS Webinar 20201224AWS Webinar 20201224
AWS Webinar 20201224
陽平 山口1.1K views
SIAI2020SIAI2020
SIAI2020
陽平 山口724 views
MISO20200530MISO20200530
MISO20200530
陽平 山口1.8K views
ML@Loft 20200430ML@Loft 20200430
ML@Loft 20200430
陽平 山口2.6K views
JAWS FESTA 20191102JAWS FESTA 20191102
JAWS FESTA 20191102
陽平 山口1.3K views
JAWSUG 20191028 (modified)JAWSUG 20191028 (modified)
JAWSUG 20191028 (modified)
陽平 山口887 views
JAWSUG 20191028JAWSUG 20191028
JAWSUG 20191028
陽平 山口387 views
JAWSUG 20190828JAWSUG 20190828
JAWSUG 20190828
陽平 山口1.1K views
AI Utilization Seminar 20190709AI Utilization Seminar 20190709
AI Utilization Seminar 20190709
陽平 山口704 views
JAWSUG 20190620JAWSUG 20190620
JAWSUG 20190620
陽平 山口755 views
JAWS DAYS 2019JAWS DAYS 2019
JAWS DAYS 2019
陽平 山口3.3K views
JAWS FESTA 2018 OSAKA AHABJAWS FESTA 2018 OSAKA AHAB
JAWS FESTA 2018 OSAKA AHAB
陽平 山口2K views
JAWS FESTA 2018 OSAKA KCI SESSIONJAWS FESTA 2018 OSAKA KCI SESSION
JAWS FESTA 2018 OSAKA KCI SESSION
陽平 山口1.6K views
NAGOSUTA 20181020NAGOSUTA 20181020
NAGOSUTA 20181020
陽平 山口1.4K views
JAWSUG20180925JAWSUG20180925
JAWSUG20180925
陽平 山口523 views

JAWSDAYS 2014 ACEに聞け! EMR編