データアナリティクス事業本部のueharaです。
今回は、Glue (Python Shell)の一時ディレクトリの容量について少し見てみたいと思います。
Glue (Python Shell)のスペック
Glue (Python Shell)について、こちらのページに以下の記載があります。
DPU は処理能力を相対的に測定するもので、4個のvCPUのコンピューティング性能と16GBのメモリで構成されています。詳細については、AWS Glue料金を参照してください。
値を 0.0625 または 1 に設定できます。デフォルトは 0.0625 です。
いずれの場合も、インスタンスのローカルディスクは 20GB になります。
実験
巨大な一時ファイルを作成してみる
インスタンスのローカルディスクはDPUに依らず20GBとのことだったので、 /tmp
ディレクトリに 約18GB のファイルを書き込む以下のジョブを実行してみます。
test-glue-job.py
import os
import tempfile
file_size_bytes = 18 * 1000 * 1000 * 1000
chunk_size_bytes = 1000 * 1000 * 1000
print("start!")
tmp_dir = tempfile.gettempdir()
with open(os.path.join(tmp_dir, "tmp.txt"), "wb") as f:
bytes_written = 0
# 約1GBずつ書き込み
while bytes_written < file_size_bytes:
data = os.urandom(min(chunk_size_bytes, file_size_bytes - bytes_written))
f.write(data)
bytes_written += len(data)
print("finish!")
上記を実行した結果、以下のエラーとなりました。
OSError: [Errno 28] No space left on device
どうやら 18GB のファイル容量を書き込むための空きスペースが無いようです。
ディスクの容量を確認してみる
以下のジョブを実行し、ディスク容量を確認してみます。
test-glue-job-2.py
import subprocess
cp = subprocess.run("df -h", shell=True, capture_output=True, text=True)
print(cp.stdout)
結果は以下の通りでした。
Filesystem Size Used Avail Use% Mounted on
overlay 20G 6.1G 14G 32% /
tmpfs 64M 0 64M 0% /dev
tmpfs 474M 0 474M 0% /sys/fs/cgroup
/dev/nvme0n1p1 20G 6.1G 14G 32% /connection
shm 64M 0 64M 0% /dev/shm
tmpfs 474M 0 474M 0% /proc/acpi
tmpfs 474M 0 474M 0% /sys/firmware
上記を見ても分かる通り、確かにローカルディスクは 20GB となっていますが、その全てが使えるわけでは無いことが分かります。(当然と言えば当然ですが...)
では、今度は 10GB の一時ファイルを作成し、 /tmp
の容量を確認する以下のプログラムを実行してみます。
test-glue-job-3.py
import os
import subprocess
import sys
import tempfile
file_size_bytes = 10 * 1000 * 1000 * 1000
chunk_size_bytes = 1000 * 1000 * 1000
print("start!")
tmp_dir = tempfile.gettempdir()
with open(os.path.join(tmp_dir, "tmp.txt"), "wb") as f:
bytes_written = 0
# 約1GBずつ書き込み
while bytes_written < file_size_bytes:
data = os.urandom(min(chunk_size_bytes, file_size_bytes - bytes_written))
f.write(data)
bytes_written += len(data)
cp = subprocess.run("df -h /tmp", shell=True, capture_output=True, text=True)
print(cp.stdout)
print("finish!")
無事正常終了し、出力結果は以下の通りでした。
start!
Filesystem Size Used Avail Use% Mounted on
overlay 20G 16G 4.1G 79% /
finish!
先程何もしていない状態でのoverlayのAvailは 約14GB だったので、 10GB 書き込んだ後のAvailは 4.1GB になっています。
一時ディレクトリに書き込む際は全体の容量を意識して行いましょう。
最後に
今回は、Glue (Python Shell)の一時ディレクトリの容量について確認してみました。
参考になりましたら幸いです。