狠狠撸

狠狠撸Share a Scribd company logo
CONFIDENTIAL
Loading & Transform
AWS Batchによるデータ変換処理
BigData-JAWS 勉強会#15 reboot
?2020JapanDigitalDesign,Inc.
Japan Digital Design, Inc.
2
小野 雄太郎
VP of Infrastructure,
Technology and Design Division.
インフラストラクチャの設計運用等をメインに、
パブリッククラウドのみで構成されたプラット
フォームを実装中
これまでWindows Server, Visual Studio,
IPv6などを中心に、コミュニティ運営など。
ここ最近はAWSメイン
個人事業主で普通のIT屋さんもしています
Twitter: @chamreo
LinkedIn: linkedin.com/in/yutaro
CONFIDENTIAL
“金融の「新しいあたりまえ」を創造し、
人々の成長に貢献する”
To create new financial standard to contribute to customer's growth.
上原 高志
CEO, Japan Digital Design
3
ClassifiedasConfidentialbyJapan
DigitalDesign,Inc.
Classified as Confidential by Japan Digital Design, Inc.
三菱UFJフィナン
シャルグループ
持株会社
三菱UFJ銀行
34,000人
…
三菱UFJ信託銀行
7,000人
三菱UFJ証券
ホールディングス
三菱UFJモルガン
スタンレー証券
5,300人
Kabu.com
…
三菱UFJニコス
3,100人
…
Japan Digital
Design
< 100人
目指すところ クラウドネイティブに内製化できる組織
? 会社として独立する前に銀行内にあった “Innovation Lab” 時代は、
モノづくりを外注するしかなく、実現したいことができなかった
? 自分たちで作り、フィードバックを得て、自分たちで改善してい
く組織が必要だった (by 社長
エンジニア中心組織を目指す
? 柔軟な働き方を取り入れ、外部のエンジニアを直
接雇用
? まずは雇用体系をあたらしく
? 副業ができる、副業でできる、勤務体系
? 週5日勤務に限らず、週4日~週1日まで多様な働き方を可能に
Classified as Confidential by Japan Digital Design, Inc.
設立3年 2017年10月02設立
? 3年目経ちました
10人の組織からスタート
? 銀行からのTraineeとして、全国の地銀35行から出向者を受入
? いきなり40名を超える組織に (バタバタバタ…
エンジニアとデザイナーの募集
? 100名の会社にまで育ってきました
人権確保!
? MacBook Pro 15inch - Mem 32GB! (もうM1も選べるよ)
? Surface Laptop 3 – Intel Core 7
Classified as Confidential by Japan Digital Design, Inc.
CONFIDENTIAL
ビッグデータを使う
7
ClassifiedasConfidentialbyJapan
DigitalDesign,Inc.
金融ビッグデータ活用 グループ各社が持つデータを、各社がそれぞれ集約し、
それぞれが分析を行っていても、資源投資が分散化し
てしまう
データがオンプレミスデータセンターに囲い込まれ、
新たな取り組みにデータを素早く利用できなくなって
しまっている
保守費用が高額でデータを長期保管できない
それ、Japan Digital 顿别蝉颈驳苍で解决しましょう
MUFG AI Studio (M-AIS)
2018年4月
? データ分析人材を集約
? データサイエンティストの雇用
? グループ各社からの出向
AWS上に新たなデータ分析プラット
フォームを構築
? グループのビッグデータと、最新のツールが利用
可能な環境を分析者に提供
? また、AI研究機関として自立すべく論文執筆等も
業務の一つに位置づけ
Classified as Confidential by Japan Digital Design, Inc.
オンラインで完結する中小企業向け融資
? 紙の書類なしで、中小企業向けの融資ができるように
? 既存顧客の口座取引履歴から与信スコアを付与
2019年6月にリリースしています!
CONFIDENTIAL
Loading & Transform
11
ClassifiedasConfidentialbyJapan
DigitalDesign,Inc.
CONFIDENTIAL
分析用のデータをいかに準備するか
ユーザーアクセスデータがリアルタイムで流れてきて、それらのデータをサブ
スクライブして処理し、マスター情報はAPIをたたくと最新のデータを取得して
確認できる...
といったような恵まれた環境は、ほぼない
データ分析についてまわる課題
12
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
データは散在し、フォーマットは統一されておらず、更新頻度はまばらで、マ
スターコードもシステムごとに異なり、予告なく形式が変わることもある
フォーマット
? CSV
? という名のフリーフォーマット
営業日ベースの更新
? 第X営業日...
? 月末月初
? 祝日...
ビッグデータのホントのところ
13
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
データフォーマットとして一般的
? テキストファイルなので中身が確認できる
? 相互運用性が高い
なんてことは適当な言い訳
? テキストだからやりたい放題
? 改行コードなんでしたっけ
? カンマが紛れていたらどうするんだっけ
? ダブルクォーテーション?
? ダブルクォーテーションがあるフィールドは?
? フィールド内の改行は?
? それShift-JIS?
? 数値なの? ゼロ埋め?
? 列数変わってませんか?
CSV – カンマ区切りテキストファイル
14
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
データがいつ時点のものかはよくわからない
? CSVにメタデータはない (ファイルシステムの更新日を信じる?)
? ファイルがないのは更新が遅延しているのか、更新がないのかわからない
? 増分?差分?全件?
営業日
? 増えたり変わったりする祝日
? え、山の日? 成人の日は月曜?
? データ来てないのは正しいの? 休みなの? 遅れてる?
ほどほどに更新されるデータ
15
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
マスターデータはタイムリーに更新されない
? 新しいマスターは毎月一回更新?
? え、再利用?
こっちのマスターコード
? なんで桁数違うの?
? でたゼロ埋め
? ん、文字列だけど数字? なんか突然ほかの来るの?
マスターコードという名の分散コード体系
16
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
NULLなしだけどこれNULL?
? 新しい列だから古いやつはデータないよ
更新されない列
? ほかの列は更新されているけど、この列は使わなくなったからもう変わらないよ
列
? 列数は同じだけど
? ああ、ひとつ列なくなったけど、新しい列増えてるから、真ん中で
? 列ヘッダないCSV...
歴史
17
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
データソース多すぎ
フォーマット多すぎ
更新頻度バラバラ、Joinできない
企業内外に存在する様々なデータを組み合わせて分析
18
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
お仕事なので、どげんかせんといかんのです
とはいえね
19
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
ETL / ELT
20
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
データを活用するための変換処理
? RDBMSなどのデータをほかのシステムに連携する
? Extract: データベースからデータをエクスポートする (クエリ/ダンプ)
? Transform: 連携先で利用するため構造に変換する (コード変換/Joinなど)
? Load: 連携先システムに読み込む
メリット
? 連携先システムは利用するために必要なデータのみを読み込む
? 変換機能を別システム化しやすい
課題
? 変換処理が複雑かつ重い処理になりやすい
ETL: Extract - Transform - Load
21
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
大量データをそのまま扱う
? スケールする環境を活用する構成
? Extract: データベースからデータをエクスポートする (クエリ/ダンプ)
? Load: 処理先の環境にデータを読み込む (実質上のレプリケート)
? Transform: 求める形式のデータを作り出す (オンデマンドもアリ)
メリット
? 並列処理しやすい
? 新しいデータソースを増やしやすい
課題
? 連携先システム内に変換処理が行える機能が必要
ELT: Extract - Load - Transform
22
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
データ連携ことはじめ
23
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
構成
24
?2020JapanDigitalDesign,Inc.
データソース的な
なにか
ロード処理
(前処理)
変換
分析
1
2
3
4
5
6
S3 Upload
S3 Object Get
Backup Copy
Master Copy
分析用データ
分析利用
連携用バケット
受領データ履歴
分析データ用
バケット
都度変換
CONFIDENTIAL
構成
25
?2020JapanDigitalDesign,Inc.
データソース的な
なにか
ロード処理
(前処理)
変換
分析
1
2
3
4
5
6
S3 Upload
S3 Object Get
Backup Copy
Master Copy
分析用データ
分析利用
連携用バケット
受領データ履歴
分析データ用
バケット
データが正しく
届いたかチェック
ファイル形式統一
都度変換
CONFIDENTIAL
必要なデータが届いているかを確認したい
? 営業日ベースで届くはずのファイルのリストから確認する
データ形式が変わっていないか?壊れていないかを確認したい
? データ種別ごとの列数や列内データ形式を確認する
変換処理のためにファイル形式を揃えたい
? ソースごとに自由に作られたCSVファイルをParquetに変換
前処理したいこと
26
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
S3にあるファイルの存在チェック
データを読み込んで列構造を確認する
確認したデータをParquet形式で保存する
必要な処理機能
27
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
ファイルごとに独立できるので並行処理が可能
? 分散処理して早く終わらせたい
データサイズが様々だけど統一して扱いたい
? データが大きすぎてタイムアウトしてほしくないし、小さいデータのために
都度分散クラスタを立てたくもない
データが届いていないときは課金されないようにしたい
? 更新頻度が1日1回までなので、処理が終わったらリソースを削除したい
実現するために
28
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
1. Lambda
2. EMR
3. Athena
4. Glue
5. AWS Batch
選択肢
29
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
S3イベント発火など、構成が簡単
処理時間に制約
? 2桁GBを超えるデータをParquet変換するのはつらい...
Lambda
30
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
分散処理を効果的に行える
クラスタの構築や停止は自分で行う
? 毎日やる仕組みをわざわざ作るのは...
Amazon EMR
31
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
ロードしたデータサイズだけの課金
高速な処理、データ変換
元データがAthenaでちゃんと読めるか正しい形式とは限らない...
Amazon Athena
32
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
AWS Glue ETL
? そのまんまフィットしたETL向け機能
? 定義したJobを実行すると、内部のSparkクラスタで処理される
? Pythonで処理が書ける
いいね!
AWS Glue
33
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
ジョブを定義するとAWS管理されたEC2インスタンスで実行される
? 自分でスポットインスタンスフリートを作ったりしなくてよい
? EC2なので好きな処理を実行できる
これもいいね!
AWS Batch
34
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
Glueでやってみた
35
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
1ファイルごとに Glue ジョブで処理させてみた
? ECSのタスクをCloudWatch Eventsで定時実行し、ファイル存在チェックを
したあとに、Parquet変換をGlueジョブとして実行
? クォータを増やすことで同時実行数を増やせる
Glue ETLっていうんだからいいはず
36
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
ファイル単位のParquet変換だとジョブ単位のリソース利用効率が高くない
? 課金が10分単位*1 なので、小さいデータの場合に効率が悪い
? ジョブ実行のための起動時間のほうがずっと長くなる
? 日本銀行券にものを言わせればかなり無理ができる
? 300並列で処理とかすると気持ちいい
やってみた
37
?2020JapanDigitalDesign,Inc.
*1 : Glue 2.0 が登場して秒単位課金かつ起動時間も短くなったようなので、いまはちょっと違うかも
CONFIDENTIAL
CSV to Parquet 変換するだけだと、I/OとCPUがつらい
? 1DPU = 4vCPU + 16GBメモリ
? CPUリソースがあまる
? 1 Job 内で並列処理なり頑張っていくのは、ファイルごとの処理時間の差
の考慮と、エラー時の対応を考えるとあまりやりたくない...
? 大きなCSVをひとつ読むだけだと、I/O待ちという感じ
Loading処理だけに使うのはもう少し工夫したほうがよさそう
ちゃんとTransformしないとちょっといまいち?
38
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
AWS Batch
39
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
40
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
そうそうこういうやつ
41
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
CloudWatch EventsでStep Functionsを起動し、Lambdaでファイルの存在
チェック後、AWS Batchのジョブを起動して、CSVからParquetに変換する
? ジョブはDockerコンテナイメージで作成
? 実際のところはマネージドECSという感じ
AWS BatchでParquet変換をやる
42
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
コンピューティング環境
? ジョブを実行するインスタンスの定義
ジョブ定義
? 実行するバッチの実体定義
ジョブキュー
? ジョブを実行するためのコンピューティング環境セット
ジョブ
? バッチ定義から起動された実行中処理
AWS Batchの主な構成要素
43
?2020JapanDigitalDesign,Inc.
コンピューティング
環境
コンピューティング
環境
ジョブキュー
ジョブ
キュー
ジョブ ジョブジョブ ジョブ
ジョブ定義
ジョブ
定義
ジョブ
定義
CONFIDENTIAL
EC2インスタンスのタイプを選べる
? 処理に合わせたタイプを選べて効果的
? スポットインスタンスにできればコスト的にはかなり安い
? マネージドなのでフリート管理/クラスタ管理しなくてよい
? すでにEC2インスタンスがある環境では、新たな設計をたくさんせず導入できる
? EC2インスタンスロールの権限設計を流用するなどがしやすい
ジョブの実行状態を簡単に確認できる
? AWS Batchのジョブステータスで進行状況をモニタリングできる
? キューイングやタイムアウト?再試行によって、リソースの適正利用を管理しなく
てよい
AWS Batchのいいところ
44
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
ジョブ起動
45
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
ジョブ実行時に入力パラメータを指定
? 同じ処理を異なる対象に行う、データ変換処理等にマッチ
異なるパラメータを指定したジョブをジョブキューに送信することで、たくさ
んのジョブを順次処理させることができる
パラメータ参照を定義
46
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
AWS Batchコンソール
? ジョブのステータスは24時間で消えちゃう
CloudWatch Events / Logs
? 基本的にはこれ
? バッチ内部からも CloudWatch にデータを送っている
? Logs に処理しているデータの情報を記録
? CloudWatch Metrics にデータを送って監視
? 処理を始めたデータのカウント
? 処理を完了したデータのカウント
? 処理できなかったデータのカウント
? CloudWatch ダッシュボードによる可視化
? メール監視からの脱却
ジョブの監視
47
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
ジョブの起動が早い
? 単に Glue 1.0 が遅すぎるという話かも
課題
? VPC Endpointがない
? ジョブ起動するためにはVPCの外からたたく必要がある
? Closed VPCからジョブ起動できたら楽なのに
? VPC内にインスタンスを起動させるので、VPC CIDRが小さいと苦労する
Glue 1.0 と比較して
48
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
まとめ
49
?2020JapanDigitalDesign,Inc.
CONFIDENTIAL
AWS Batchによって手組みのバッチからマネージドなバッチシステムに進化
? EC2環境(ECS環境)でオンデマンドな処理をマネージド実行
? スポットインスタンスを手軽に利用
? ジョブ失敗時の再試行もマネージド可
Glue に比べて
? 実行環境の多様性
? Linux AMIで動くものなら何でも動く
? でも Glue 2.0 はやっぱり気にはなる...
まとめ
50
?2020JapanDigitalDesign,Inc.
Thank you.
CONFIDENTIAL?2020JapanDigitalDesign,Inc.
51

More Related Content

BigData-JAWS 2020-11-30 - AWS Batchによるデータ変換処理