Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

20161212jawsbigdata-161214152052.pdf

Avatar for Keigo Suda Keigo Suda
December 12, 2016
3

 20161212jawsbigdata-161214152052.pdf

Avatar for Keigo Suda

Keigo Suda

December 12, 2016
Tweet

More Decks by Keigo Suda

Transcript

  1.  2012幎新卒⌊瀟(今幎5幎✬ orz)  Technology Innovation Group スペシャリスト  最近の専⟚

    -> ビッグデヌタ領域(むンフラ〜アプリ)  最近はもっぱらKafkaずストリヌム凊理゚ンゞンの諞々 須✥桂䌍 (すだ けいご)
  2. 店舗発泚業務の裏偎 ロヌ゜ン党業務で利✀されるマスタデヌタを ✇次バッチで最新化 1 最新化された党業務マスタデヌタの曎新差分を 各店舗ぞファむル連携 店舗ぞ曎新分デヌタのファむル連携 2 本郚センタヌ ファむル

    連携基盀 ストアコンピュヌタ デヌタ反映 発泚端末 商品を発泚 したすね 曎新デヌタ 党業務マスタデヌタ ✇次バッチ凊理 最新化 1 2 3 4 党業務マスタデヌタの最新化凊理 連携されたファむルデヌタを各店舗にある ストコン内のDBぞ反映する。 3 最新化されたマスタデヌタをもずに発泚業務を実斜 発泚時の商品デヌタ参照 4 曎新分デヌタのDB反映凊理
  3. 店舗発泚業務の裏偎 ロヌ゜ン党業務で利✀されるマスタデヌタを ✇次バッチで最新化 1 最新化された党業務マスタデヌタの曎新差分を 各店舗ぞファむル連携 店舗ぞ曎新分デヌタのファむル連携 2 本郚センタヌ ファむル

    連携基盀 ストアコンピュヌタ デヌタ反映 発泚端末 商品を発泚 したすね 曎新デヌタ 党業務マスタデヌタ ✇次バッチ凊理 最新化 1 2 3 4 党業務マスタデヌタの最新化凊理 連携されたファむルデヌタを各店舗にある ストコン内のDBぞ反映する。 3 最新化されたマスタデヌタをもずに発泚業務を実斜 発泚時の商品デヌタ参照 4 曎新分デヌタのDB反映凊理 これたでは凊理負荷を 各店舗に分散しおいたむメヌゞ
  4. 店舗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 機胜のセンタヌ集玄
  5. アヌキテクチャ党䜓抂芁 共有マスタ 本郚 システム フ ァ ã‚€ ル 連 携

    基 盀 API参照DB 加⌯凊理クラスタ× 垞時起動、ピヌク時起動 受信マスタDB Ⅰ.取蟌凊理 Ⅱ.加⌯凊理 Ⅲ.参照凊理 参照API マスタ反映 ファむル連携 デヌタ加⌯ APIデヌタ反映 APIデヌタ参照 デヌタを返す 過去デヌタ蓄積✀バケット MySQL DOT/POT センタヌ機胜 店 舗 DOT POT デヌタ取埗 ファむル取蟌 サヌバ MySQL MySQL CDNキャッシュ 動画・添付 画像 CDN アップロヌド SQLバッチ(HiveQL) 参照APIで取埗したURL情報を元に画像ファむルなどをGET
  6. 性胜テスト実斜環境 共有マスタ 本郚 システム フ ァ ã‚€ ル 連 携

    基 盀 API参照DB 加⌯凊理クラスタ× 垞時起動、ピヌク時起動 受信マスタDB Ⅱ.加⌯凊理 Ⅲ.参照凊理 参照API デヌタ加⌯ APIデヌタ反映 APIデヌタ参照 デヌタを返す 過去デヌタ蓄積✀バケット MySQL DOT/POT センタヌ機胜(擬䌌) ファむル取蟌 サヌバ MySQL MySQL CDNキャッシュ 動画・添付 画像 CDN アップロヌド SQLバッチ(HiveQL) JMeter 性胜テスト環境 Ⅰ.取蟌凊理 マスタ反映 ファむル連携 ファむル連携基盀にお性胜テスト環 境ぞのファむルを配信しおもらい本番 ず同じ流量か぀デヌタ量を再珟
  7. 性胜テスト実斜環境 共有マスタ 本郚 システム フ ァ ã‚€ ル 連 携

    基 盀 API参照DB 加⌯凊理クラスタ× 垞時起動、ピヌク時起動 受信マスタDB Ⅱ.加⌯凊理 Ⅲ.参照凊理 参照API デヌタ加⌯ APIデヌタ反映 APIデヌタ参照 デヌタを返す 過去デヌタ蓄積✀バケット MySQL DOT/POT センタヌ機胜(擬䌌) ファむル取蟌 サヌバ MySQL MySQL CDNキャッシュ 動画・添付 画像 CDN アップロヌド SQLバッチ(HiveQL) JMeter 性胜テスト環境 Ⅰ.取蟌凊理 マスタ反映 ファむル連携 ファむル連携基盀にお性胜テスト環 境ぞのファむルを配信しおもらい本番 ず同じ流量か぀デヌタ量を再珟
  8. 特 城 l ずにかくゞョブの同時投⌊数、皌働数が倚い l 1マスタ䜜成凊理に぀き平均20ワヌク䜜成ほど * 80マスタテヌブル * 店舗数分

    l ⌀぀⌀぀のク゚リは結構重たい l ⟮正芏化凊理が䞭⌌のため⌀量読み取り&⌀量曞き出し
  9. パラメヌタチュヌニング l 凊理゚ンゞンの倉曎 l 凊理゚ンゞンをTezに倉曎するこずでオンメモリで凊理を⟏い、ディスクIOを枛らす l Reducer数の倉曎 l 最埌のファむル曞き蟌みがボトルネックずなる凊理が倚かったため、起動Reducer数を増やしお察応 l

    MapJoinの積極的掻✀ l MapJoinをどんどん誘導しおいく l ファむルフォヌマットの遞択ず圧瞮✅匏の遞択 l 凊理に適したファむルフォヌマット遞択ずディスクIO負荷を軜枛するための適切な圧瞮✅匏遞択
  10. Reducer数の倉曎/コンテナサむズの調敎 l 調敎パラメヌタ⌀芧 -- Reducer関連 SET hive.tez.auto.reducer.parallelism=true; SET hive.exec.reducers.bytes.per.reducer=64000000; --

    YARN Container関連 SET hive.tez.container.size=4096; SET hive.tez.java.opts=-Xmx3200m; SET hive.tez.cpu.vcores=1; SET hive.prewarm.enabled=true; SET hive.prewarm.numcontainers=30;
  11. ファむルフォヌマットの遞択/圧瞮✅匏の遞択 l (䞭間テヌブルの)ファむルフォヌマット遞択にあたっおの芁件ずしおは以䞋 l どうせ終わったら消すだけのワヌクなので早く終わればそれでよし l スキヌマ情報はク゚リの䞭でDDL発⟏しおいたのでファむルフォヌマットでカバヌする必芁なし l カラムナ型のファむルフォヌマッットも詊したものの凊理特性もありぱっずせず l

    ⟮正芏化に近い凊理をひたすら繰り返すため、カラムナフォヌマットの利点をいかしきれず -- ファむルフォヌマット関連&圧瞮関連 SET hive.default.fileformat=sequencefile; SET mapred.output.compression.type=BLOCK; SET hive.exec.orc.default.compress=SNAPPY; SET hive.exec.compress.intermediate=true; SET hive.exec.compress.output=true; SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
  12. MySQL MySQL TEXTFILE SEAQUENCEFILE+Snappy TEXTFILE ・・・・ 加⌯元テヌブル ワヌクテヌブル 加⌯埌テヌブル Hive

    HDFS ファむルフォヌマットの遞択/圧瞮✅匏の遞択 受信マスタDB API参照✀DB EMR Sqoop゚クスポヌト時の察応フォヌ マットの制玄のため Sqoopむンポヌト時のHive連携オ プションにより⟃動でスキヌマ䜜成
  13. ファむルフォヌマット 圧瞮アルゎリズム 圧瞮タむプ 凊理時間 TEXT SNAPPY - 24:41:00 SEAQUENCE SNAPPY

    BLOCK 24:10:00 SNAPPY RECORD 27:22:00 ORC SNAPPY ファむルレベル 27:17:00 ビルトむン 27:00:00 (参考)ファむルフォヌマットの遞択/圧瞮✅匏の遞択
  14. リ゜ヌスコントロヌルのための察応 l コンテナ配垃の最適化 l スケゞュヌラの調敎 クラスタリ゜ヌス(コンテナ) 割圓 割圓 割圓 リ゜ヌス割圓埅ち状態の

    滞留ゞョブを発✣させない 同時皌働ゞョブ数を増やすために、 効率的なリ゜ヌス配分を実斜させる そのうえで、各マスタ䜜成凊理の 最適化を実斜する
  15. キュヌ蚭定によるリ゜ヌス割り圓お優先床の調敎 キュヌ蚭定 root ├ peak(業務優先床⟌&リ゜ヌス芁求⟌) └ shohin └ hatchu_shohin └

    ichiran_sansho_yo_shohin └ plu ├ others(業務優先床䜎&リ゜ヌス芁求䜎) └ sqoop(Sqoop凊理✀) └ import └ export 前 提 l YARNスケゞュヌラずしお「Fair Scheduler」を利✀する。 l Fair Schedulerにより、マスタ䜜成凊理に重みづけを⟏い、クラスタのリ゜ヌスを綿密にコントロヌルするこずを✬的ずする。 ※Capacity Schedulerはキュヌ内ではリ゜ヌスを均等分配できずペンディング状態の凊理が発✣しおしたう可胜性があるため。
  16. EMRず同じぐらい⌀倉だったRDSチュヌニング l 最初は最初はほんずにSqoopによる゚クスポヌトが終わらなかった・・・ l Sqoop゚クスポヌトの倚重床があがるずRDS(MySQL)のIOが぀たる・・・ l したいにはセッションきられる l 以䞋を䞭⌌にチュヌニングし、なんずか流し切れるたでに l

    ゚クスポヌト察象のテヌブルを事前にPKで゜ヌト l なるべくディスクぞの曞き蟌みによるIOを遅延させる l innodb_buffer_pool_size l innodb_max_dirty_pages_pct l 曞き蟌み呚りのスレッド数を埮調敎 l innodb_write_io_threads l innodb_thread_concurrency
  17. (参考)゚クスポヌト䞊列数による凊理時間結果 0:00:00 0:00:20 0:00:40 0:01:00 0:01:20 0:01:40 0:02:00 0:02:20 1テヌブルあたりの凊理時間

    同時テヌブル゚クスポヌト数 Aurora 8xrlage Aurora 4xlarge MySQL 4xlarge No RDS AZ構成 パラ [table] map数 凊理時間 凊理時間/table 参考凊理時間 (MySQL) 参考凊理時間/ table(MySQL) 7 r3.4xlarge なし 9 1 0:15:26 0:01:43 0:12:35 0:01:24 8 r3.4xlarge なし 18 1 0:25:50 0:01:26 0:32:00 0:01:47 13 r3.4xlarge あり 36 1 0:56:18 0:01:34 1:18:46 0:02:11 16 r3.8xlarge なし 9 1 0:12:30 0:01:23 17 r3.8xlarge なし 18 1 0:22:22 0:01:15 18 r3.8xlarge なし 36 1 0:46:10 0:01:17 21 r3.8xlarge なし 72 1 1:37:21 0:01:21 RDS(JM)
  18. (参考)Multi AZによる凊理時間 101% 104% 123% 140% 0% 20% 40% 60%

    80% 100% 120% 140% 160% 9パラ1map 18パラ1map AZなしの堎合を100%ずした堎合の 凊理時間の䌞び率 Aurora MySQL No RDS AZ構成 パラ [table] map数 凊理時間 凊理時間/table 参考凊理時間 (MySQL) 参考凊理時間/ table 7 r3.4xlarge なし 9 1 0:15:26 0:01:43 0:12:35 0:01:24 8 r3.4xlarge なし 18 1 0:25:50 0:01:26 0:32:00 0:01:47 11 r3.4xlarge あり 9 1 0:15:36 0:01:44 0:15:26 0:01:43 12 r3.4xlarge あり 18 1 0:26:45 0:01:29 0:44:49 0:02:29
  19. たずめ教蚓 l ずにかくワヌクは〈さく保぀!!(迫真) l プランの可読性が党然違う l ちたたのチュヌニング情報はずっかかりずしお有効 l ワヌクロヌドが異なれば傟向も倉わる l

    リ゜ヌス配分郚分は結構盲点 l 情報も少なく⌀番業務芁件できたる郚分なのでちゃんず特性を知った䞊で蚭蚈する l Auroraっお䞇胜ですね l 重たいデヌタのオフロヌドもいけるじゃん