7、圍繞在Hadoop周圍的有哪些公司和產(chǎn)品?
提到 Hadoop 一般不會說某一個東西,而是指生態(tài)系統(tǒng),在這里面太多交互的組件了,涉及到 IO,處理,應(yīng)用,配置,工作流。在真正的工作中,當(dāng)幾個組件互相影響,你頭疼的維護(hù)才剛剛開始。我也簡單說幾個:Hadoop Core 就三個 HDFS,MapReduce,Common,在外圍有 NoSQL: Cassandra, HBase, 有 Facebook 開發(fā)的數(shù)據(jù)倉庫 Hive,有 Yahoo 主力研發(fā)的 Pig 工作流語言,有機(jī)器學(xué)習(xí)算法庫 Mahout,工作流管理軟件 Oozie,在很多分布式系統(tǒng)選擇 Master 中扮演重要角色的 Zookeeper。
8、能否用普通人都能理解的方式解釋一下Hadoop的工作原理?
我們先說 HDFS,所謂 Hadoop 的分布式文件系統(tǒng),它是能真正做到高強(qiáng)度容錯。并且根據(jù) locality 原理,對連續(xù)存儲做了優(yōu)化。簡單說就是分配大的數(shù)據(jù)塊,每次連續(xù)讀整數(shù)個。如果讓你自己來設(shè)計分布式文件系統(tǒng),在某機(jī)器掛掉還能正常訪問該怎么做?首先需要有個 master 作為目錄查找(就是 Namenode),那么數(shù)據(jù)節(jié)點是作為分割好一塊塊的,同一塊數(shù)據(jù)為了做備份不能放到同一個機(jī)器上,否則這臺機(jī)器掛了,你備份也同樣沒辦法找到。HDFS 用一種機(jī)架位感知的辦法,先把一份拷貝放入同機(jī)架上的機(jī)器,然后在拷貝一份到其他服務(wù)器,也許是不同數(shù)據(jù)中心的,這樣如果某個數(shù)據(jù)點壞了,就從另一個機(jī)架上調(diào)用,而同一個機(jī)架它們內(nèi)網(wǎng)連接是非常快的,如果那個機(jī)器也壞了,只能從遠(yuǎn)程去獲取。這是一種辦法,現(xiàn)在還有基于 erasure code 本來是用在通信容錯領(lǐng)域的辦法,可以節(jié)約空間又達(dá)到容錯的目的,大家感興趣可以去查詢。
接著說 MapReduce,首先是個編程范式,它的思想是對批量處理的任務(wù),分成兩個階段,所謂的 Map 階段就是把數(shù)據(jù)生成 key, value pair, 再排序,中間有一步叫 shuffle,把同樣的 key 運(yùn)輸?shù)酵粋€ reducer 上面去,而在 reducer 上,因為同樣 key 已經(jīng)確保在同一個上,就直接可以做聚合,算出一些 sum, 最后把結(jié)果輸出到 HDFS 上。對應(yīng)開發(fā)者來說,你需要做的就是編寫 Map 和 reduce 函數(shù),像中間的排序和 shuffle 網(wǎng)絡(luò)傳輸,容錯處理,框架已經(jīng)幫你做好了。
9、MapReduce模型本身也有一些問題?
第一:需要寫很多底層的代碼不夠高效,第二:所有的事情必須要轉(zhuǎn)化成兩個操作 Map/Reduce,這本身就很奇怪,也不能解決所有的情況。
10、Spark從何而來?Spark相比于Hadoop MapReduce設(shè)計上有什么樣的優(yōu)勢?
其實 Spark 出現(xiàn)就是為了解決上面的問題。先說一些 Spark 的起源。發(fā)自 2010 年 Berkeley AMPLab,發(fā)表在 hotcloud 是一個從學(xué)術(shù)界到工業(yè)界的成功典范,也吸引了頂級 VC:Andreessen Horowitz 的 注資. 在 2013 年,這些大牛(Berkeley 系主任,MIT 最年輕的助理教授)從 Berkeley AMPLab 出去成立了 Databricks,引無數(shù) Hadoop 大佬盡折腰,它是用函數(shù)式語言 Scala 編寫,Spark 簡單說就是內(nèi)存計算(包含迭代式計算,DAG 計算, 流式計算 )框架,之前 MapReduce 因效率低下大家經(jīng)常嘲笑,而 Spark 的出現(xiàn)讓大家很清新。 Reynod 作為 Spark 核心開發(fā)者, 介紹 Spark 性能超 Hadoop 百倍,算法實現(xiàn)僅有其 1/10 或 1/100。在去年的 Sort benchmark 上,Spark 用了 23min 跑完了 100TB 的排序,刷新了之前 Hadoop 保持的世界紀(jì)錄。
11、如果想從事大數(shù)據(jù)方面的工作,是否可以推薦一些有效的學(xué)習(xí)方法?有哪些推薦的書籍?
我也有一些建議,首先還是打好基礎(chǔ),Hadoop 雖然是火熱,但它的基礎(chǔ)原理都是書本上很多年的積累,像算法導(dǎo)論,Unix 設(shè)計哲學(xué),數(shù)據(jù)庫原理,深入理解計算機(jī)原理,Java 設(shè)計模式,一些重量級的書可以參考。Hadoop 最經(jīng)典的 the definitive guide, 我在知乎上也有分享。
其次是選擇目標(biāo),如果你像做數(shù)據(jù)科學(xué)家,我可以推薦coursera的data science課程,通俗易懂。學(xué)習(xí) Hive,Pig 這些基本工具,如果做應(yīng)用層,主要是把 Hadoop 的一些工作流要熟悉,包括一些基本調(diào)優(yōu),如果是想做架構(gòu),除了能搭建集群,對各個基礎(chǔ)軟件服務(wù)很了解,還要理解計算機(jī)的瓶頸和負(fù)載管理,Linux 的一些性能工具。最后還是要多加練習(xí),大數(shù)據(jù)本身就是靠實踐的,你可以先按 API 寫書上的例子,能夠先調(diào)試成功,在下面就是多積累,當(dāng)遇到相似的問題能找到對應(yīng)的經(jīng)典模式,再進(jìn)一步就是實際問題,也許周邊誰也沒遇到,你需要些靈感和網(wǎng)上問問題的技巧,然后根據(jù)實際情況作出最佳選擇。