2017-01-05 3 views
1

私は、Pythonスクリプトを使用して、hereのようにSpark MLのALSルーチンを使用して潜在的な要因を計算しています。Spark MLのALS潜在因子をS3に保存するのが遅すぎる

潜在的要因を計算した後、私は次のように使用してS3にそれらを保存しようとしています:

model = als.fit(ratings) 

# save items latent factors 
model.itemFactors.rdd.saveAsTextFile(s3path_items) 

# save users latent factors 
model.userFactors.rdd.saveAsTextFile(s3path_users) 

約150万人のユーザーがあります。 LFAは迅速に計算されます(約15分)が、潜在因子をS3に書き出すことは約5時間かかります。明らかに、何かが正しくない。問題の特定にご協力いただけますか?

ALSを使用してLFAを計算する際に、100人のユーザーブロックと100個のブロックを使用しています。この情報が関連する場合があります。

100 r3.8xlargeマシンをジョブに使用します。

答えて

1

このEMR、公式のASF Sparkのバージョンなどですか?

ここで問題となるのは、S3クライアントはすべてのディスクをローカルにディスクにバッファリングしてから、その後にアップロードを開始するという点です。

ASFコードの場合は、Hadoop 2.7.xを使用していることを確認してs3a://を出力スキーマとして使用し、生成されるとインクリメンタル書き込みを実行できる高速出力ストリームオプションで再生できます。それは2.7で少し脆い、2.7で良い方法になります。

あなたがEMRを利用している場合は、あなた自身があります。

もう1つの考えられる原因は、S3が特定のシャード(S3バケットの特定のビット)に多くのHTTPS要求を生成するクライアントを抑制し、最初の5-8文字がシャードを明らかに決定することです。そこに非常にユニークな名前を使用することができれば、あなたは少なく抑えられるかもしれません。

関連する問題