石川覚(126)59この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。はじめに最近、データサイズは大きくない割に、ジョブが徐々に遅くなったり、メモリ不足が発生して処理が中断するといった相談を受けましたので、その対策の一つである小さなファイルをまとめて読み込むgroupFiles/groupSize指定について解説します。Firehoseのファイル等)は、本来不向きです。理由は多くの小さなファイルを処理するとタスクが多すぎて、スケジューリングとメモリオーバーヘッドの増加し、最終的にはメモリ不足が発生して処理が中断します。Glue(のSpark)は、今回ご紹介するgroupFiles/groupSize指定することで、タスクごとにファイルを自動的にグループ化して正常にETLを終えることができます。この機能については、昨年のre:Inventのセッションで紹介されていました。Servicesこのセッションについては、日本語で現地レポートとしてまとめています。GlueのETLジョブはS3データストアからファイルをまとめて読み取るグループ化を設定できます。S3データパーティション内のファイルはグループ化(groupFiles)と読み取るグループのサイズ(groupSize)を設定することで、各ETLタスクでは入力ファイルのグループを1つのメモリ内パーティションに読み取ることができます。groupFilesには、1つのメモリ内パーティションに読み取るinPartitionを設定します。超える場合、自動的にグループ化を有効にします。'inPartition'groupSizeには、1つのメモリ内パーティションに読み取るサイズの上限値をバイト数で指定します。以下、グループサイズを1MBに設定する方法は次のとおりです。メソッドに以下の接続オプションを追加します。グループにグループ化する方法は次のとおりです。Propertiesに2つのパラメタを設定することで動作することを確認しました。Glueデータカタログのテーブルの場合はジョブのパラメタではなく、データソースのテーブルに設定が必要になります。実際の動作の解説Sparkは、repartitionしない限り入力したファイルごとに出力ファイルが作成されます。出力がS3の場合は、1入力ファイルに対して1つ以上の出力ファイルが生成されます。groupFiles/groupSize指定することで、1000入力ファイルが1つのファイルにまとめられることによって出力ファイルが1つになるかどうかを確認します。ETLジョブは、jsonファイルを入力して、csvファイルにフォーマット変換する簡単なものです。検証データ多くの小さいファイルの例として、1ファイル1レコードのデータファイルを1000ファイル作成しました。posdata/sales_date=2018-07-01/posdata_1000ファイルの内容は、jsonの1レコードのみのファイルです。{"shop_id":"1001","shop_name":"秋葉原駅前店","item_id":"35940001","item_name":"単3乾電池(1本)","price":"50","quantity":"1","total":"50"}groupFiles/groupSize指定しないコードと実行結果まずは、groupFiles/groupSize指定しないデータソース(L.22)を入力した場合の結果を確認してみます。"datasink2")job.commit()以下、実行結果です。出力先のS3フォルダの下に入力ファイルと同じ数の出力ファイルが生成されています。ファイルの中にヘッダ付きのCSVファイルの中に1レコードのみ出力されているファイルが1000ファイルあります。次にgroupFiles/groupSize指定したデータソース(L.22)を入力した場合の結果を確認してみます。Glueのデータソースのままでかまいません。Propertiesに設定します。"datasource0")以下の通り、出力ファイルは1つになり、中に複数レコード格納されていることが確認できました。groupFilesのデフォルト動作groupFilesオプションは入力ファイルが50,000個を超える場合、ファイルのグループ化はデフォルトで有効になっています。入力ファイルが50,000個未満の場合に、グループ化を無効にするには、このパラメータをinPartitionに設定します。個を超える場合に、グループ化を無効にするには、このパラメータをnoneに設定します。Glueでは、groupFiles/groupSize指定によって多くの小さなファイルを処理するとタスクの増加やスケジューリングとメモリオーバーヘッドを軽減しパフォーマンスを改善できるように設計されています。多くの小さなファイルを指定したサイズ(groupSize)までまとめたファイルを入力することで、出力ファイルを相対的に調整できることを意味します。クエリに最適なファイルサイズに調整する一つの選択肢の一つとしても有効です。1,260,320電気メーカ系SIerのSE、IP電話開発会社の製品企画・開発を経てJoin。Linux、Java、MySQLを中心にウェブ、スマホ、基幹サーバーと何でも屋。〜ITエンジニアのお仕事とホンネ〜2月19日に新卒向けの会社説明会〜ITエンジニアのお仕事とホンネ〜を開催します。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。使いたいときの注意点を書きました。EC2)環境において、不要な踏み台サーバをなくすことができる便利なアップデートです。環境をDockerで構築してみました。臼田佳祐295ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介252SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。芳賀健231こんにちは!猫様の忠実なるしもべ、芳賀健です。Tokyoで開催されました。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。