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

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

Felix Chern
August 16, 2015
1.1k

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

Felix Chern

August 16, 2015
Tweet

Transcript

  1. 我在廣告業學到的
    ⼤大數據實戰技巧
    Felix Chern (陳仁乾) (dryman) @ OpenX

    View Slide

  2. 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

    View Slide

  3. 什麼是⼤大數據?
    資料科學?
    資料視覺化?
    Open Data?
    Business Intelligence (BI)?
    Hadoop?
    Hive? NoSQL?

    View Slide

  4. From DataFox

    View Slide

  5. 產業鍊

    View Slide

  6. ⼤大數據(傳統上是BI)
    是依附型產業

    View Slide

  7. 電商
    廣告業
    科學機構
    網路產業
    Big Data
    CG
    http://en.wikipedia.org/wiki/Image:Glui.png
    電玩
    電影⼯工業
    動畫產業

    View Slide

  8. 沒有CG
    還是可以做好電影/動畫

    View Slide

  9. View Slide

  10. 但⾃自⼰己沒有CG⼯工業
    只能把電影外包時..

    View Slide

  11. View Slide

  12. Big Data 是電商 scale
    up 的技術之⼀一
    僅此⽽而已

    View Slide

  13. 你可以學會什麼
    • 你是數據服務的接案公司 -> 瞭解客⼾戶需求
    • 你也是電商 -> 我們 scale up 的經驗
    • 個⼈人 -> 學會⼤大數據應⽤用的⼀一個⾯面向,以及切⼊入點

    View Slide

  14. 廣告業
    Google
    Yahoo!
    Facebook
    LinkedIn BBC
    NewYork Times

    View Slide

  15. 資料流與⾦金流

    View Slide

  16. web site
    0 0 0
    OpenX Ad
    Server
    Advertisers






    View Slide

  17. web site
    0 0 0
    Ad request
    User Info
    OpenX Ad
    Server
    Advertisers
    User Info
    Bids
    Ads
    Big Data!

    View Slide

  18. 有了⼤大數據豪開勳?

    View Slide

  19. View Slide

  20. 沒有經過處理的數據是沒有⽤用的
    沒有經過處理的數據是沒有⽤用的
    沒有經過處理的數據是沒有⽤用的
    因為很重要,所以要說三次
    D槽存了2TB的影⽚片可能都⽐比這些資料有
    ⽤用些。⾄至少可以點開來看

    View Slide

  21. 資料⼯工程

    View Slide

  22. Hadoop Ecosystem
    • Storage: HDFS (20x cheaper)
    • Computation: Map-Reduce,
    YARN, Tez, Spark, etc.

    View Slide

  23. Use case
    • 帳單報表 (external billing report)
    • OLAP for Internal reporting
    • Traffic quality, User black list, Canary, etc.
    • Archive (query from hive)
    ⼩小

    極⼩小
    ⼤大

    View Slide

  24. 特性
    • 從上百維的原始資料 -> ⼗十幾維的輸出
    • Business logic 在所有輸出中必須⼀一致
    • 清理髒資料的邏輯也必須⼀一致

    View Slide

  25. 以前⼈人怎麼做?

    View Slide

  26. 關連式資料庫
    使⽤用⼤大量的 ETL (extract transform load)
    資料流在不同表單中傳遞及更新

    View Slide

  27. ⼤大多數的
    ⼤大數據公司怎麼做?

    View Slide

  28. Raw Data
    ETL
    ETL
    ETL
    ETL
    ETL
    Output
    Output
    Output
    Output
    Intermediate
    Data sets
    Intermediate
    Data sets
    Intermediate
    Data sets
    clean
    up

    View Slide

  29. OpenX 怎麼做?

    View Slide

  30. 統⼀一的乾淨資料
    統⼀一的Fact data
    全部以Java撰寫
    Raw Data
    Clean
    up
    Clean dataset Fact dataset
    Data
    join
    Muxing
    job
    output
    output
    output
    output
    output
    output

    View Slide

  31. 三個實戰技巧

    View Slide

  32. 技巧⼀一
    嚴格的資料驗證

    View Slide

  33. • 使⽤用⼤大量的 guava preconditions class
    • 出現錯誤時怎麼辦?
    • Alert
    • 檢查錯誤
    • 上游需「滾回」舊版本 (rollback)
    • 上 patch 以接受⼀一定⽐比例的髒資料
    • 發⽣生頻率:⼀一年三次左右

    View Slide

  34. 技巧⼆二
    ⽤用OOP處理business logic

    View Slide

  35. if (…) {
    int a = raw.getInt(“field_a”);
    if (a > 0) {
    …;
    } else if (a == 0) {
    String b = raw.get(“field_b”);
    …;
    } else {
    …;
    } else {

    }
    Business logic

    View Slide

  36. • ⽤用java還算好的,pig/hive寫起來更醜、更慢
    • ⼤大量的copy & paste,很難refactor
    • ⾮非常、⾮非常難維護

    View Slide

  37. Business value objects
    • obj.set(raw);
    • obj.getValue();
    • 繼承在此處⽤用起來⾮非常⾃自然
    • Impression

    View Slide

  38. @Override
    long getValue() {
    if (raw.is(BILLABLE_IMP)) {
    return super.getValue();
    }
    return 0;
    }
    使⽤用繼承來 Unnest if-else
    使⽤用Enum來當filter
    raw 會將enum結果cache起來

    View Slide

  39. • OOP -> UML 適合跟不同team⼀一起制訂規格
    • Business logic 變得⼀一致,所有的程式碼都共⽤用
    • 重構變得極其簡單

    View Slide

  40. 技巧三
    ⼤大數據的schema⽅方案

    View Slide

  41. Schema的愛與恨
    • 傳統資料庫的schema (Schema on read)
    • 更新⾮非常痛苦
    • ⼀一開始就要設計好
    • 沒有schema (i.e. NoSQL) 的話呢?
    • 什麼都可以進來,什麼都不可靠..

    View Slide

  42. • 選⼀一個serialization format (protobuf, thrift, avro,
    lwes) (openx使⽤用lwes)
    • 版本號會附在資料中
    • 資料進來時再根據版本號驗證,或是升級
    • 兼顧可驗證性,以及開發迭代速度

    View Slide

  43. Bad Practices

    View Slide

  44. • 試圖把所有的big data⼯工具都⽤用上

    資料處理不是疊樂⾼高
    • 試圖同時解決太多問題
    • 髒掉的big data,平均要花⼀一個⽉月才處理的掉
    • 浮點數會有誤差。(使⽤用整數存sum & count)
    • 對資料清潔度妥協,就是對⾃自⼰己殘忍

    View Slide

  45. 如何切⼊入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

    View Slide

  46. MLDM Monday
    三場talk

    View Slide

  47. Questions?

    View Slide