Spark on EMRでディスク容量不足になった時の対処法
Spark on EMRでS3のデータを集計する際、ディスク容量不足になったのでその対策
ディスク容量の確認
df -h
df -h
ファイルシステム | サイズ | 使用 | 残り | 使用% | マウント位置 |
---|---|---|---|---|---|
/dev/xvda | 9.8G | 6.6G | 2.7G | 72% | / |
devtmpfs | 7.4G | 20K | 7.4G | 1% | /dev |
tmpfs | 7.4G | 0 | 7.4G | 0% | /dev/shm |
/dev/xvdb | 38G | 37M | 38G | 1% | /mnt |
/dev/xvdc | 38G | 35M | 38G | 1% | /mnt1 |
Sparkがデフォルト使う、/dev/xvdaは10GBしか確保されておらず
かつ最初から7GB弱埋まっていて、残り3GBしか空きがない。
なので、3GB以上のファイルをディスクにのせてしまうとエラーになる。
⇡はm3.xlargeのもので、m3.2xlargeを試しても/dev/xvdaが10GBなのは
変わらなかった。
ディスク不足になる要因
ファイルはS3にあるのに、何のファイルが3GB分も容量を使っているのか調べてみると
スクリプト実行時に、ブロックマネージャーが生成しているファイルが
数GB単位にまで膨らんで、ディスク容量オーバーになっていた。
/tmp/blockmgr-XXXXXXXXXXX-XXXX-XXXXX
⇡これ
このファイルはスクリプト終了時に勝手に消える。
解決策
blockmgr-XXXXXXXXXXX-XXXX-XXXXXの吐き出し先を、/mnt下に移せばいい。
-> Sparkのローカルディレクトリを/mntへ移す。
export SPARK_LOCAL_DIRS='/mnt/s3'
もしくはソース内で、設定する。
# Python
conf = SparkConf()\
.setMaster("local")\
.set("spark.local.dir","/mnt/s3")
sc = SparkContext(conf=conf)
/mnt下のs3を指定している理由は特に無し。(必要に応じて変えてください)
Author And Source
この問題について(Spark on EMRでディスク容量不足になった時の対処法), 我々は、より多くの情報をここで見つけました https://qiita.com/fuppi/items/98857157d03da032301f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .