Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

基幹業務もHadoopで!!

Avatar for Keigo Suda Keigo Suda
February 08, 2016
1

 基幹業務もHadoopで!!

Avatar for Keigo Suda

Keigo Suda

February 08, 2016
Tweet

Transcript

  1. 基幹業務もHadoopで!! Hadoop / Spark Conference 2016 Future Architect Keigo Suda

    ローソンにおける店舗発注業務への Hadoop + Hive導入と その取り組みについて
  2. 自己紹介 * 須田 桂伍(2012年入社) * Technology Innovation Group シニアコンサルタント *

    インフラエンジニア~ソフトウェアアーキテクト * 最近はビッグデータ領域(情報系~基幹系)どっぷり 最近はQiita記事に技術ネタ投稿してます 直近の生きる目標(人生のマイルストン)
  3. フューチャーアーキテクト株式会社 (英文表記:Future Architect, Inc.) 設 立 上 場 資 本

    金 代 表 者 売 上 高 社 員 数 オフィス : 1989年11月28日 : 2002年6月 東証1部 : 14億21百万円 : 代表取締役会長 CEO 金丸 恭文 : 連結344億24百万円、単体197億27百万円 (2014年12月期) : 連結1,587名、単体783名 (2014年12月末日現在) : 大崎 (本社)、大阪、鹿児島、福岡
  4. 店舗発注業務の裏側 ローソン全業務で利用されるマスタデータを 日次バッチで最新化 1 最新化された全業務マスタデータの更新差分を 各店舗へファイル連携 店舗へ更新分データのファイル連携 2 本部センター ファイル

    連携基盤 ストアコンピュータ データ反映 発注端末 商品を発注 しますね 更新データ 全業務マスタデータ 日次バッチ処理 最新化 1 2 3 4 全業務マスタデータの最新化処理 連携されたファイルデータを各店舗にある ストコン内のDBへ反映する。 3 最新化されたマスタデータをもとに発注業務を実施 発注時の商品データ参照 4 更新分データのDB反映処理
  5. 店舗発注業務の裏側 ローソン全業務で利用されるマスタデータを 日次バッチで最新化 1 最新化された全業務マスタデータの更新差分を 各店舗へファイル連携 店舗へ更新分データのファイル連携 2 本部センター ファイル

    連携基盤 ストアコンピュータ データ反映 発注端末 商品を発注 しますね 更新データ 全業務マスタデータ 日次バッチ処理 最新化 1 2 3 4 全業務マスタデータの最新化処理 連携されたファイルデータを各店舗にある ストコン内のDBへ反映する。 3 最新化されたマスタデータをもとに発注業務を実施 発注時の商品データ参照 4 更新分データのDB反映処理 これまでは処理負荷を 各店舗に分散していたイメージ
  6. 機能のセンター集約 店舗DB 発注業務 データ参照 加工処理 加工処理 取込処理 取込処理 発注 端末

    発注 端末 発注 端末 発注 端末 発注 端末 発注 端末 発注 端末 API API API API API API API 全店舗分の発注業務に利用する マスタデータをバッチ処理(日次)で作成 全業務マスタDBから店舗毎に必要な マスタデータの更新差分をファイルで連携 これまで店舗毎に配信されていた 全店舗分の更新差分ファイルを連携 受信用DB 公開用DB 1. 全業務マスタDBから各店舗へ更新差分ファイルを配信 2. 店舗毎にDBへ差分反映後、発注利用マスタデータを作成 3. 作成されたマスタデータは発注業務時に発注端末から参照 1. 全業務マスタDBから全店舗分の更新差分ファイルを配信 2. 受信用DBへ差分反映後、全店舗分の発注利用マスタデータを作成 3. 作成されたマスタデータはREST APIで公開し、発注端末より参照 データ参照 発注業務 Before After
  7. Volume Complexity Small Medium ~ Specially Complex Simple Complex ~

    Enterprise Web Complex Business Logic データ観点でざくっと考えてみる(私見) Very Large
  8. 機能のセンター集約 店舗DB 発注業務 データ参照 加工処理 加工処理 取込処理 取込処理 発注 端末

    発注 端末 発注 端末 発注 端末 発注 端末 発注 端末 発注 端末 API API API API API API API 全店舗分の発注業務に利用する マスタデータをバッチ処理(日次)で作成 全業務マスタDBから店舗毎に必要な マスタデータの更新差分をファイルで連携 これまで店舗毎に配信されていた 全店舗分の更新差分ファイルを連携 受信用DB 公開用DB 1. 全業務マスタDBから各店舗へ更新差分ファイルを配信 2. 店舗毎にDBへ差分反映後、発注利用マスタデータを作成 3. 作成されたマスタデータは発注業務時に発注端末から参照 1. 全業務マスタDBから全店舗分の更新差分ファイルを配信 2. 受信用DBへ差分反映後、全店舗分の発注利用マスタデータを作成 3. 作成されたマスタデータはREST APIで公開し、発注端末より参照 データ参照 発注業務 Before After
  9. アーキテクチャ案 WITH EMR WITH Redshift WITH RDS 取込フェーズ 加工フェーズ 参照フェーズ

    Data Imort Data Export SQL Batch MapReduce Storede Procedure & SQL Batch Data Imort Data Export
  10. ざっと比較してみる EMR 分散処理による高スループット アーキテクチャ Redshift RDS(MySQL) ノード追加によるリソース拡張 豊富なHadoopエコシステム システム拡張性 耐障害性

    (ノード障害時) 処理特性 費用調整 コアノード障害ならば処理継続可能 分散処理による高スループット アーキテクチャ ノード追加によるリソース拡張 同時実行クエリ数の制約 コスト面で大量ノードで組めないので 1台失った時のインパクトでかい 更新処理がマスタサーバに集中 リードレプリカにより参照処理のみ スケール可能 マスター障害時はスレーブのマス タ昇格まで処理受付不可 コアノードのインスタンスタイプが 豊富&台数による微調整が可能 インスタンスタイプが少ない&台数に よる微調整が難しい そもそも参照しかスケールしないし な・・・
  11. ざっと比較してみる EMR 分散処理による高スループット アーキテクチャ Redshift RDS(MySQL) ノード追加によるリソース拡張 豊富なHadoopエコシステム システム拡張性 耐障害性

    (ノード障害時) 処理特性 費用調整 コアノード障害ならば処理継続可能 分散処理による高スループット アーキテクチャ ノード追加によるリソース拡張 同時実行クエリ数の制約 更新処理がマスタサーバに集中 リードレプリカにより参照処理のみ スケール可能 マスター障害時はスレーブのマス タ昇格まで処理受付不可 コアノードのインスタンスタイプが 豊富&台数による微調整が可能 インスタンスタイプが少ない&台数に よる微調整が難しい そもそも参照しかスケールしないし な・・・ コスト面で大量ノードで組めないので 1台失った時のインパクトでかい
  12. アーキテクチャ全体像 全業務 マスタDB EMRクラスタ 受信用DB ファイル連携用 バケット ファイル取込 サーバ SQLバッチ(HiveQL)

    公開用DB APIサーバ 過去データ蓄積用 バケット アップロード 画像データ REST API ・・・ バイナリ配置用 バケット バイナリデータはS3パスを 返却し直接取得させる 発注端末 発注端末
  13. アーキテクチャ全体像 全業務 マスタDB EMRクラスタ 受信用DB ファイル連携用 バケット ファイル取込 サーバ SQLバッチ(HiveQL)

    公開用DB APIサーバ 過去データ蓄積用 バケット アップロード 画像データ REST API ・・・ バイナリ配置用 バケット バイナリデータはS3パスを 返却し直接取得させる 発注端末 発注端末
  14. クラスタ構成 常時処理 ピーク時処理 UPSERT INSERT クラスタ起動 クラスタ停止 対象テーブルを 差分更新 対象テーブルを

    洗い替え(日付断面) クラスタ構成 様々な更新処理 処理の分散設計 処理リラン ワークフロー 受信用DB 公開用DB EMRクラスタ 受信用DB 公開用DB EMRクラスタ
  15. 様々な更新処理 更新サーバ 常時用クラスタ テーブル全体の部分 更新が必要な処理を担当 ピンポイントな 更新処理を担当 対象データ種の ファイルが到着/反映 クラスタ構成

    様々な更新処理 処理の分散設計 処理リラン ワークフロー 公開用DB 受信用DB より速い反映が必要なデータ更新を担当
  16. 処理の分散設計 店舗毎に いっぺんにドーン 複数店舗をまとまりにして いっぺんにドーン 全店舗分を いっぺんにドーン ・・・ ・・・ リソース不足

    リソース不足 スループット抜群 クラスタ構成 様々な更新処理 処理の分散設計 処理リラン ワークフロー マスタ作成の処理粒度をどう調整するか どの粒度でマスタ作成処理(HiveQL)を並列に走らせるか
  17. 処理の分散設計 マスタA 分割後 マスタA 分割後 マスタA 分割後 マスタA ・・・ マスタB

    分割後 マスタB 分割後 マスタB 分割後 マスタB 発注商品 マスタ 発注商品 マスタ 発注商品 マスタ 発注商品 マスタ マスタA マスタB ・・・ ・・・ SQL SQL SQL SQL SQL SQL 発注商品 マスタ 発注商品 マスタ 店舗コードを もとにハッシュ分散 500店舗単位で 分割され後続に続く クラスタ構成 様々な更新処理 処理の分散設計 処理リラン ワークフロー ・・・ ・・・ 全店舗分 500店舗単位 公開用DB EMRクラスタ 受信用DB
  18. 店舗コードによる振分&パーティショニング ・・・ ハッシュ分散UDF 店舗コードでのパーティショニング (Dynamic Partitioning) クラスタ構成 様々な更新処理 処理の分散設計 処理リラン

    ワークフロー 500店舗毎に36分割 1つのテーブルにハッシュで散った 複数店舗分のデータが入っている 結合時には必ず店舗コードが必要
  19. 処理リラン インポート (全件) SQLバッチ(HiveQL) エクスポート (全件) リトライ/リカバリ リトライ/リカバリ リトライ/リカバリ ・・・

    ワーク1 ワークN アウトプット インプット HiveQL 各処理単位で冪等にさせる マスタ作成処理も割り切って頭からリカバリできる設計 リトライ/リカバリ クラスタ構成 様々な更新処理 処理の分散設計 処理リラン ワークフロー 公開用DB 受信用DB 1マスタ作成処理=1SQLファイル 中間ワークの状態管理はしない
  20. ワークフロー 処理命令はSDK経由で実行 EMRのStepではあくまでクラスタのプロビジョニング(Chefで実行)にのみに特化 コア マスター ・・・ 処理実行 スクリプト HiveQL 実行スクリプト

    HiveQL ワークフローサーバ コア コア コア SDK hive -f ${HIVEQL_FILE} ¥ --hivevar PG_ID=${PG_ID} ¥ --hivevar VERSION_YMD=${VERSION_YMD} ¥ --hivevar TEMPO_GROUP_CD=${TEMPO_GROUP_CD} ¥ >> ${LOG_FILE} 2>1 クラスタ構成 様々な更新処理 処理の分散設計 処理リラン ワークフロー
  21. HiveのユニットテストとCI Hiveだってしっかりテストしなきゃ!! HiveQL Test PG Input Data Output Data 回

    帰 開 発 日次で定期実行 エクセルでテストデータを 管理しながらのコーディング Hiveのチェック制約機能の弱さを頻繁なテストでフォロー