石川覚(126)20この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。Talkのレポートとなります。本セッションではパフォーマンスチューニング手法とのその効果について2018年7月に機能追加されたメトリクスをエビデンスに用いて解説しています。Glueは、さまざまなデータソースに対してETLジョブを実行するための、水平方向にスケーラブルなプラットフォームを提供します。Glueジョブ・メトリックを使用してジョブのパフォーマンスを理解し、最適化するためのテクニックについて説明します。ドライバとエグゼキュータのボトルネックを特定する方法、データスキューを特定および修正する方法、DPUの数を調整する方法、共通のメモリエラーに対処する方法について説明します。Sparkは、複雑な分析のための豊富な機能を持つ分散データ処理エンジンです。Sparkランタイムを用いて開発されたETL用途の機能を提供します。DataframeとDynamicframeは相互変換が可能です。ジョブをシャッフル前後で分けます1〜6行目までは、1つのジョブとなり、4行目のrepartition()で、シャッフルが発生するのでステージが別れます。7行目は1つのアクションに見えますが、Sparkは遅延評価なので、1〜3行目と7行目を実行することになります。Glueはデータ並列で、データをパーティションに並列分散処理します。task全体のスループットは、パーティション数によって制限されません。そこで生じる2つの疑問アプリケーションのジョブとステージはどのように分けたら良いのか?データセットをどのように分割するか?多くの小さなデータファイルの処理の問題よく起こる問題の一つは、多数の小さなファイルを扱うことです。この処理は多くのメモリを必要とし、パフォーマンスオーバーヘッドにつながる可能性があります。簡単なJSONからParquetへの変換で、640個のパーティションに128万個のJSONファイルがあるとします。Glueのジョブメトリクスを使用します。ジョブメトリクスを有効にするにはマネジメントコンソールのJobMetricsをEnableに設定、CLI/SDKで有効にするには、--enable-metricsを指定します。1のようなエラーが発生します。ドライバーのメモリー使用量は急速に増えており、5GB以下に達しています。用いると、ドライバのメモリは、実行の全期間にわたって50%以下に収まります。"acrossPartition"に設定します。パーティションの値は各レコードに追加されない50,000を超えるファイルがある場合、グループ化は自動的に有効になるgroupSize各グループのターゲットサイズ(バイト)デフォルトはクラスタ内のコア数に基づくグループのサイズを増やして試す実行は遅いのですが、クラッシュは回避できました。大きなテキストファイルを分割して処理できない場合にも問題が発生します。データがどのように圧縮されているかは、パフォーマンスに大きな違いをもたらします。非圧縮またはbzip2圧縮されたファイルは、分割して並列処理できますが、gzip圧縮されたファイルは分割できません。ファイルをカラムなファイルフォーマット(Parquet)に変換する対策も検討してください。大きなgzipファイルの場合5つのPartitionにそれぞれ大きな1つのファイル(1.6GB)がある場合、2時間後にジョブエラーが発生します。大きなbzip2ファイルの場合bzip2ファイル(1.3GB)はブロックの中に分割できるため、104タスクに分割して18分後に処理が終了します。非圧縮ファイル(12.5GB)は行ごとに分割できるため、64MBのパーティションに分割して12分後に処理が終了します。Glueは帯域幅がジョブのボトムネックになることはまれなのでファイルを解凍しないファイル数を削減するにはデータセットをCoalesceするデータセットをCoalesceするのは、ファイル数を削減したい場合です。下記のコードでは、Dataframeのパーティションを1つにCoalesceして出力ファイルを1つにまとめています。読み込みは並列化しますが、1つのExecutorにすべてのデータが送られるため遅れが生じ、1時間52分かかっています。df.coalesce(1)df.write.format("json").save(...)Coalesceにgroupingを組み合わせるCoalesceにgroupingを組み合わせてると、groupingのサイズは500MBになります。4つのexecutorは26分間に2GB未満で16パーティション処理します。Coalesceしないときのベースラインパフォーマンスジョブをすべて並列し、処理を10分します。その時のデータサイズは500MBとなります。Glueの独自実装)です基本的なETL操作には全体的なスキーマは必要なく、他のレコードを参照せずに"age"フィールドを削除できます一部の完全なスキーマが必要な操作では、アプリケーションで余分な作業が強制される可能性があります。一部のオペレーションはアプリケーション中の特別なジョブで完全なスキーマが必要です。フィールドを削除した後、出力しています。...)最初のステージはスキーマ変換用です。次にカラム名やデータ型を変換するApplyMappingを、データを読み込んだ直後に追加します。...)処理を追加しても、ステージは1つのままです。最初に解説したとおり、処理を追加してもシャッフルが生じないので、ステージ数は1つのままです。Talkなので、答え合わせという観点で良い内容でしたが、groupFilesのacrossPartitionなど現時点でマニュアルにない設定も当たり前のように解説されております。Talkは発表者に対して質問できる醍醐味がありますが、オフレコの内容を含むので割愛している部分もあります。用語や前提がよくわからない人は以下のブログも合わせてお読みください。1,261,474電気メーカ系SIerのSE、IP電話開発会社の製品企画・開発を経てJoin。Linux、Java、MySQLを中心にウェブ、スマホ、基幹サーバーと何でも屋。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。使いたいときの注意点を書きました。本が出ていたので読んでみたところよかったので紹介させていただきます。EC2)環境において、不要な踏み台サーバをなくすことができる便利なアップデートです。臼田佳祐295ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介252SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。芳賀健232こんにちは!猫様の忠実なるしもべ、芳賀健です。Tokyoで開催されました。カフェ店長のオカノです。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。