Apache Spark Streaming ジョブを実行すると、Amazon EMR クラスターのコアおよびタスクノードの残りのディスク容量を占有します。

Spark は Streaming ジョブの各エグゼキューターに 1 つの YARN コンテナを割り当てます。logpusher は、コンテナが終了または削除されるまで、Amazon Simple Storage Service (Amazon S3) にログをアップロードしません。コンテナの終了に時間がかかるほど、クラスターのノードで消費するディスク容量が大きくなります。最終的に、コンテナはノードの残りのディスク容量を消費する場合があります。

この問題を解決するには、Log4j プロパティファイルを変更して Spark ジョブのログのローテーションを設定します。このファイルは /etc/spark/conf ディレクトリにあります。

5.18.0 より前の Amazon EMR リリースバージョンでは、以下のステップに従ってログのローテーションを手動で設定します(Amazon EMR リリースバージョン 5.18.0 以降では、Spark Streaming コンテナログのローテーションは 1 時間ごとに自動的に行われます)。

1.    SSH を使用してマスターノードに接続します。

2.    Amazon EMR クラスターの各ノード (マスター、コア、およびタスクノード) で、/etc/spark/conf/log4j.properties のコンテンツを、次の設定で上書きます。この設定では、RollingFileAppender クラスを使用して、100,000 バイトを超えたときにコンテナログファイルをローテーションします。ローテーションされた各ファイルにはタイムスタンプが付けられ、重複したファイルが S3 にアップロードされないようにします。

log4j.rootLogger=INFO,file
log4j.appender.file.encoding=UTF-8
log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.RollingPolicy.FileNamePattern=${spark.yarn.app.container.log.dir}/spark-%d{yyyy-MM-dd-HH-mm-ss}.log
log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
log4j.appender.file.TriggeringPolicy.maxFileSize=100000
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file.Append=true

3.    アクセス権限のエラーを回避するには、sudo として spark-submit を実行します。

次回に Spark Streaming ジョブを実行するときに、100,000 バイトを超えるとログは S3 にアップロードされます。これにより、コンテナは EMR クラスターのコアおよびタスクノードで残りのディスク容量を消費することがなくなります。


このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2018 年 12 月 04 日