失業(yè)在家,發(fā)點(diǎn)牢騷杂曲。
陸陸續(xù)續(xù)面了一些職位箕昭,跟朋友們也交流過,發(fā)現(xiàn)有些公司面試數(shù)據(jù)工程師確實(shí)挺有意思的解阅,其中一種落竹,就叫“我就是要用mapreduce我不聽我不聽我不聽”。
所以到底為啥一定要用mapreduce?
我唯一的猜測货抄,就是map reduce這種模型對(duì)于程序員們單線程的腦子來說述召,比sql來的簡單朱转,哦還有,schema-less积暖,元數(shù)據(jù)這種事情最討壓了藤为!
所以他們習(xí)慣于從文本文件里把數(shù)據(jù)讀出來,然后若干個(gè)高度優(yōu)化過的map reduce過程之后夺刑,得到了一個(gè)文本文件缅疟,然后再灌進(jìn)mysql,數(shù)據(jù)處理完了。全套Java搞定遍愿,美滋滋存淫。
稍微想一想,全用mapreduce 來處理數(shù)據(jù)有如下幾個(gè)問題:
1.沒有表
沒有表意味著所有關(guān)于數(shù)據(jù)集的信息全部存在java code里沼填,就像mongodb一樣桅咆,不是沒有模式,只是模式存在code里坞笙,別人想用就慢慢猜吧岩饼,所謂走自己的路讓別人無路可走。
2.刻舟求劍的優(yōu)化
有次去某云供應(yīng)鏈公司面試薛夜,負(fù)責(zé)人跟我說他們覺得mapreduce更有控制力籍茧,更容易做優(yōu)化,比如說對(duì)于數(shù)據(jù)傾斜可以預(yù)先把傾斜的key先提出來做處理等等梯澜,這種就叫做刻舟求劍式的優(yōu)化寞冯,根據(jù)某一個(gè)時(shí)刻或者某一時(shí)期數(shù)據(jù)的狀態(tài)來硬編碼一些優(yōu)化策略,等到下個(gè)月數(shù)據(jù)的狀態(tài)變了腊徙,這些優(yōu)化又要重做简十,不得加班加到死啊檬某。
3.事倍功半
考慮一個(gè)企業(yè)數(shù)據(jù)分析的全流程撬腾,mr job 跟用hive相比,只省了建表的工作量恢恼,而且沒有積累民傻,昨天用mr job處理過的數(shù)據(jù),為了和今天的新數(shù)據(jù)交互场斑,還是要用mr job漓踢,once mr,alwayes mr。
hive只要加載到表里漏隐,后續(xù)工作可以用多種工具完成喧半,比如spark,比如impala,比如presto等等,無論哪一種青责,都比mr job工作量少挺据。
如果說2010年之前用mr job處理數(shù)據(jù)而不用hive是因?yàn)閔ive不夠穩(wěn)定不夠好取具,現(xiàn)在還有什么理由?現(xiàn)在hive有tez有orc有l(wèi)lap,還有各種udf和udaf,還有各種分析函數(shù)扁耐,比起手寫map reduce暇检,不知道強(qiáng)大多少倍,到底是為啥不用hive?