Upgrade to Pro — share decks privately, control downloads, hide ads and more …

我在廣告業學到的 大數據實戰技巧

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Felix Chern Felix Chern
August 16, 2015
1.3k

我在廣告業學到的 大數據實戰技巧

Avatar for Felix Chern

Felix Chern

August 16, 2015
Tweet

Transcript

  1. About Me • Felix Chern, Senior Hadoop Engineer @ OpenX

    • MapReduce and Hive • 在前東家 SupplyFrame 從8台 Hadoop機器開始 • 之後加⼊入OpenX,現在擔任 data team tech lead • 200+TB/day data volume • http://idryman.org
  2. 你可以學會什麼 • 你是數據服務的接案公司 -> 瞭解客⼾戶需求 • 你也是電商 -> 我們 scale

    up 的經驗 • 個⼈人 -> 學會⼤大數據應⽤用的⼀一個⾯面向,以及切⼊入點
  3. web site 0 0 0   OpenX Ad Server

    Advertisers     
  4. web site 0 0 0 Ad request User Info OpenX

    Ad Server Advertisers User Info Bids Ads Big Data!
  5. Use case • 帳單報表 (external billing report) • OLAP for

    Internal reporting • Traffic quality, User black list, Canary, etc. • Archive (query from hive) ⼩小 中 極⼩小 ⼤大
  6. Raw Data ETL ETL ETL ETL ETL Output Output Output

    Output Intermediate Data sets Intermediate Data sets Intermediate Data sets clean up
  7. 統⼀一的乾淨資料 統⼀一的Fact data 全部以Java撰寫 Raw Data Clean up Clean dataset

    Fact dataset Data join Muxing job output output output output output output
  8. • 使⽤用⼤大量的 guava preconditions class • 出現錯誤時怎麼辦? • Alert •

    檢查錯誤 • 上游需「滾回」舊版本 (rollback) • 上 patch 以接受⼀一定⽐比例的髒資料 • 發⽣生頻率:⼀一年三次左右
  9. if (…) { int a = raw.getInt(“field_a”); if (a >

    0) { …; } else if (a == 0) { String b = raw.get(“field_b”); …; } else { …; } else { … } Business logic
  10. Business value objects • obj.set(raw); • obj.getValue(); • 繼承在此處⽤用起來⾮非常⾃自然 •

    Impression <- QalifiedImpression
 <- BillableImpression, MarketImpression, etc.
  11. @Override long getValue() { if (raw.is(BILLABLE_IMP)) { return super.getValue(); }

    return 0; } 使⽤用繼承來 Unnest if-else 使⽤用Enum來當filter raw 會將enum結果cache起來
  12. Schema的愛與恨 • 傳統資料庫的schema (Schema on read) • 更新⾮非常痛苦 • ⼀一開始就要設計好

    • 沒有schema (i.e. NoSQL) 的話呢? • 什麼都可以進來,什麼都不可靠..
  13. • 選⼀一個serialization format (protobuf, thrift, avro, lwes) (openx使⽤用lwes) • 版本號會附在資料中

    • 資料進來時再根據版本號驗證,或是升級 • 兼顧可驗證性,以及開發迭代速度
  14. 如何切⼊入big data? • 中⼩小型公司可以試著把⾃自家的ETL改成hadoop • 四到⼋八台機器⾜足矣 • 五個⼩小時的ETL,縮短成20分鐘 (my first

    job) • Hadoop the definitive guide: secondary key sort • 使⽤用secondary key sort 做 data join • 使⽤用secondary key sort 做 data de-duplicate