iMind Developers Blog

iMind開発者ブログ

spark-submit時に表示されるprogressの更新頻度を変える

概要

spark-submitした際にコンソールやweb ui、ログなどに表示されるプログレス表示。

f:id:mwsoft:20190802210456p:plain

↑ こういうやつ

標準出力をログに落としていたらこれのせいでログサイズがデカくなり過ぎたので、更新頻度を調整してみる。

バージョン情報

  • Spark 2.4.3

progress周りで設定できるconf

name default description
spark.ui.showConsoleProgress true progress表示の有無
spark.ui.consoleProgress.update.interval 200 progress表示の更新頻度

検証用コード

ランダムでsleepしてprogressの振る舞いをじっくり確認する余裕があるような処理。

import pandas as pd
import numpy as np

# 100行のレコード生成
pandas_df = pd.DataFrame(
    np.random.randint(0, 100, (100, 1)),
    columns=['foo'])

# sparkのDataFrameに変換
df = spark.createDataFrame(pandas_df)

# sleepしてから値を返す処理
import time
def map_func(row):
    time.sleep(np.random.random() * 2)
    dic = row.asDict()
    dic['foo'] += 1
    return pyspark.sql.types.Row(**dic)

# partition
print( df.repartition(100).rdd.map(map_func).collect() )

spark.ui.consoleProgress.update.interval

progressの更新間隔を決める。

デフォルトは200ミリ秒。進捗は出て欲しいけど200ミリ秒ごとだと頻繁過ぎる場合は適度に値を調整する。

下記は10秒間隔(10000)を設定した場合。

spark-submit \
    --master yarn \
    --conf spark.ui.consoleProgress.update.interval=10000 \
    --conf spark.dynamicAllocation.maxExecutors=10 \
    example.py

これで10秒に1度進捗がrefreshされるようになる。

個人的に長時間かかる処理を実行する場合は分単位の時間を設定して使っている。

spark.ui.showConsoleProgress

progressの表示の有無を決める。

falseを指定して実行するとprogressの表示が消える。

spark-submit \
    --master yarn \
    --conf spark.ui.showConsoleProgress=false \
    --conf spark.dynamicAllocation.maxExecutors=10 \
    example.py

これで何も表示されずに処理が進む。

改定履歴

Author: Masato Watanabe, Date: 2019-08-02, 記事投稿