Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
我在廣告業學到的 大數據實戰技巧
Search
Felix Chern
August 16, 2015
1
1.2k
我在廣告業學到的 大數據實戰技巧
Felix Chern
August 16, 2015
Tweet
Share
More Decks by Felix Chern
See All by Felix Chern
達到硬體極限的演算法設計
dryman
0
340
Atomic programming
dryman
0
270
Introduction to Big Data Engineering
dryman
1
490
Type qualifier and friends
dryman
1
100
Mastering Core Animation
dryman
3
900
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
32
1.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Gamification - CAS2011
davidbonilla
80
5k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Thoughts on Productivity
jonyablonski
67
4.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
How STYLIGHT went responsive
nonsquared
95
5.2k
Producing Creativity
orderedlist
PRO
341
39k
Why Our Code Smells
bkeepers
PRO
334
57k
The Cult of Friendly URLs
andyhume
78
6k
Become a Pro
speakerdeck
PRO
25
5k
Transcript
我在廣告業學到的 ⼤大數據實戰技巧 Felix Chern (陳仁乾) (dryman) @ OpenX
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
什麼是⼤大數據? 資料科學? 資料視覺化? Open Data? Business Intelligence (BI)? Hadoop? Hive?
NoSQL?
From DataFox
產業鍊
⼤大數據(傳統上是BI) 是依附型產業
電商 廣告業 科學機構 網路產業 Big Data CG http://en.wikipedia.org/wiki/Image:Glui.png 電玩 電影⼯工業
動畫產業
沒有CG 還是可以做好電影/動畫
None
但⾃自⼰己沒有CG⼯工業 只能把電影外包時..
None
Big Data 是電商 scale up 的技術之⼀一 僅此⽽而已
你可以學會什麼 • 你是數據服務的接案公司 -> 瞭解客⼾戶需求 • 你也是電商 -> 我們 scale
up 的經驗 • 個⼈人 -> 學會⼤大數據應⽤用的⼀一個⾯面向,以及切⼊入點
廣告業 Google Yahoo! Facebook LinkedIn BBC NewYork Times
資料流與⾦金流
web site 0 0 0 OpenX Ad Server
Advertisers
web site 0 0 0 Ad request User Info OpenX
Ad Server Advertisers User Info Bids Ads Big Data!
有了⼤大數據豪開勳?
None
沒有經過處理的數據是沒有⽤用的 沒有經過處理的數據是沒有⽤用的 沒有經過處理的數據是沒有⽤用的 因為很重要,所以要說三次 D槽存了2TB的影⽚片可能都⽐比這些資料有 ⽤用些。⾄至少可以點開來看
資料⼯工程
Hadoop Ecosystem • Storage: HDFS (20x cheaper) • Computation: Map-Reduce,
YARN, Tez, Spark, etc.
Use case • 帳單報表 (external billing report) • OLAP for
Internal reporting • Traffic quality, User black list, Canary, etc. • Archive (query from hive) ⼩小 中 極⼩小 ⼤大
特性 • 從上百維的原始資料 -> ⼗十幾維的輸出 • Business logic 在所有輸出中必須⼀一致 •
清理髒資料的邏輯也必須⼀一致
以前⼈人怎麼做?
關連式資料庫 使⽤用⼤大量的 ETL (extract transform load) 資料流在不同表單中傳遞及更新
⼤大多數的 ⼤大數據公司怎麼做?
Raw Data ETL ETL ETL ETL ETL Output Output Output
Output Intermediate Data sets Intermediate Data sets Intermediate Data sets clean up
OpenX 怎麼做?
統⼀一的乾淨資料 統⼀一的Fact data 全部以Java撰寫 Raw Data Clean up Clean dataset
Fact dataset Data join Muxing job output output output output output output
三個實戰技巧
技巧⼀一 嚴格的資料驗證
• 使⽤用⼤大量的 guava preconditions class • 出現錯誤時怎麼辦? • Alert •
檢查錯誤 • 上游需「滾回」舊版本 (rollback) • 上 patch 以接受⼀一定⽐比例的髒資料 • 發⽣生頻率:⼀一年三次左右
技巧⼆二 ⽤用OOP處理business logic
if (…) { int a = raw.getInt(“field_a”); if (a >
0) { …; } else if (a == 0) { String b = raw.get(“field_b”); …; } else { …; } else { … } Business logic
• ⽤用java還算好的,pig/hive寫起來更醜、更慢 • ⼤大量的copy & paste,很難refactor • ⾮非常、⾮非常難維護
Business value objects • obj.set(raw); • obj.getValue(); • 繼承在此處⽤用起來⾮非常⾃自然 •
Impression <- QalifiedImpression <- BillableImpression, MarketImpression, etc.
@Override long getValue() { if (raw.is(BILLABLE_IMP)) { return super.getValue(); }
return 0; } 使⽤用繼承來 Unnest if-else 使⽤用Enum來當filter raw 會將enum結果cache起來
• OOP -> UML 適合跟不同team⼀一起制訂規格 • Business logic 變得⼀一致,所有的程式碼都共⽤用 •
重構變得極其簡單
技巧三 ⼤大數據的schema⽅方案
Schema的愛與恨 • 傳統資料庫的schema (Schema on read) • 更新⾮非常痛苦 • ⼀一開始就要設計好
• 沒有schema (i.e. NoSQL) 的話呢? • 什麼都可以進來,什麼都不可靠..
• 選⼀一個serialization format (protobuf, thrift, avro, lwes) (openx使⽤用lwes) • 版本號會附在資料中
• 資料進來時再根據版本號驗證,或是升級 • 兼顧可驗證性,以及開發迭代速度
Bad Practices
• 試圖把所有的big data⼯工具都⽤用上 資料處理不是疊樂⾼高 • 試圖同時解決太多問題 • 髒掉的big data,平均要花⼀一個⽉月才處理的掉 •
浮點數會有誤差。(使⽤用整數存sum & count) • 對資料清潔度妥協,就是對⾃自⼰己殘忍
如何切⼊入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
MLDM Monday 三場talk
Questions?