分享以下大數據處理工具 大數據處理工具有哪些?

近幾年里,大數據行業發展勢頭迅猛,故而相應的分布式產品和架構層出不窮,本文分享作者在大數據系統實踐過程中接觸過的一些工具及使用感受,拋磚引玉,和同學們一起構建一個分布式產品的全景圖 。
下圖是由著名的數據觀察家Matt Turck在它的BLOG(https://mattturck.com/) 里發出的2019年人工智能和大數據產業圖,他從2012年開始每年都會繪制一張,大致描述這個產業里的公司及其數據相關的產品,以及所屬問題的領域 。 這里面大部分是商業軟件,而對于絕大多數互聯網公司,中間綠色的開源產品可能大家接觸的更多一些,而這些產品里,絕大多數都屬于Apache基金會 。
下面我從中挑選一些東西隨便聊聊,因為是隨便聊聊,所以知識點并不全,也不能幫助大家知道如何搭建和使用,以及如何避坑,只是談談我對這些東西的印象,描述一個大概的輪廓,如有使用需求可以搜索網上其它文章,資料還是很多的 。 當然,大家對其中的內容有興趣可以隨時找我交流討論,對文中如有描述錯誤的地方也歡迎大家斧正,共同學習,謝謝 。
Apache Hadoop官網:http://hadoop.apache.org/
Hadoop項目下包含了很多子項目,從計算到存儲都有,比如HDFS、MapReduce、YARN、HBase 。
HDFS全稱叫做Hadoop分布式文件系統,其主要由一個NameNode(NN)和多個DataNode(DN)組成,數據文件會分成多個Block,這些Block按照不同主機,不同機架的策略以默認一備三的情況分布存儲在各個節點 。 現在每個Block大小默認是128MB,以后隨著磁盤尋址速度的增加,這個Block也會不斷增大 。 而NN里面則存儲了這些Block元數據的信息,這樣客戶端進行數據查詢的時候,DN告知所需數據的位置 。 從這種結構上能看出一些比較明顯的問題就是NN節點的單點問題,所以在Hadoop 2.x的時候,針對NN做了一些改進 。
首先是在系統可用性上,增加了一個StandBy狀態的NN,作為服務中NN(Active NN)的備機,當服務中的NN掛掉后,由StandBy的NN自動接替工作 。 而NN節點狀態的健康和服務切換,由ZKFC負責 。 主備NN之間的信息同步則由Quorum Journal Node負責 。
其次,由于單臺NN中存儲了大量的元數據信息,所以隨著HDFS數據量的不斷增加,顯然NN必將成為系統的瓶頸,為了解決這個問題,Hadoop 2.x增加了Federation,該技術允許系統中有多臺NN同時對外提供服務,這多臺NN將DN中的所有文件路徑進行了橫向拆分,每個DN負責不同的路徑,達到了橫向擴展的效果 。
除了HDFS,Hadoop 2.x也引入了YARN,該工具負責對集群中的資源進行管理和任務的協調 。 該工具分成一個ResourceManager(RM)和多個NodeManager(NM),當一個任務提交給YARN之后,會先在某一服務器上啟動一個ApplicationMaster(AM),AM向RM申請資源,RM通過NM尋找集群中空閑的資源,NM將資源打包成一個個Container,交給AM 。 AM將數據和程序分發到對應節點上處理,如果某個Container中的任務執行失敗了,AM會重新向RM申請新的Container 。
Apache Hadoop HBase & Kudu官網:http://hbase.apache.org/
眾所周知,HBase一個分布式列式存儲系統,同樣屬于Hadoop的子項目,列式存儲的優劣在這里不說了,提一下HBase的WAL和LSM,WAL全稱為Write Ahead Log,只是在數據修改操作前,會先將此操作記錄在日志中,這樣一旦服務崩潰,通過該日志即可進行數據的恢復,提到這里有些人就會聯想到MySQL,因為InnoDB引擎的redo log就是典型的WAL應用 。 而在HBase中該功能是由叫做HLog的模塊所完成的 。 再說LSM,其全稱為Log Structured Merge Trees,介紹原理的文章也有很多,在HBase中,LSM樹是MemStore模塊的底層存儲結構,而MemStore有三個作用,一是當有數據寫入的時候,直接寫到MemStore中,從而提升寫數據的效率 。 二是充當讀取數據時的緩存 。 三是定期對數據操作去重,并進行數據落盤 。 HBase的主要角色分別有HMaster和HRegionServer,同樣是一對多的關系,而各節點的狀態全都交由Zookeeper負責 。 Kudu是一個和HBase非常類似的產品,其不同之處在于Kudu不依賴Zookeeper來管理自己的集群,并且HBase的數據是保存在HDFS上的,而Kudu擁有自己的數據文件格式 。
Apache Spark官網:https://spark.apache.org/
Spark是由加州大學伯克利分校推出的分布式計算引擎,在Spark的官方主頁上有一張和Hadoop的性能對比圖,姑且不談這張圖中數據的準確性,但是Spark的確將Hadoop(主要是指MapReduce)的性能提升了一個量級 。 我理解這主要得益于兩個方面:第一個是Spark計算過程中生成的中間數據不再落盤,沒有了Spill的階段 。 第二個是引入DAG對任務進行拆解,一個完整的Job被分成多個Stage,每個Stage里面又有多個Task,通過一張有向無環圖,使得沒有依賴關系的Task可以并行運行 。

推薦閱讀