在16年8月份至今,一直在努力學習大數據大數據相關的技術,很想了解衆多老司機的學習歷程。由於大數據涉及的技術很廣須要瞭解的東西也不少,會讓不少新手望而卻步。因此,我就在本身學習的過程當中總結一下學到的內容以及踩到的一些坑,但願獲得老司機的指點和新手的借鑑。html
目前正在結合機器學習理論學習MLlib源碼java
在學習大數據以前,先要了解他解決了什麼問題,能給咱們帶來什麼價值。一方面,之前IT行業發展沒有那麼快,系統的應用也不完善,數據庫足夠支撐業務系統。可是隨着行業的發展,系統運行的時間愈來愈長,蒐集到的數據也愈來愈多,傳統的數據庫已經不能支撐全量數據的存儲工做;另外一方面,數據愈來愈多,單機的計算已經成爲瓶頸。所以,基於分佈式的大數據系統嶄露頭角。那麼大數據系統裏面都有什麼東西呢?能夠參考下面的圖node
在存儲上,hdfs的分佈式存儲能夠任意水平擴展,能夠解決數據存儲的難題。在計算上,從最初的MapReduce,把任務水平拆分,多臺機器並行計算,再彙總結果;到基於Spark的內存計算,改造Mapreduce每次數據落盤以及編程方式的痛點。mysql
有了存儲和計算框架,周邊就衍生出了不少管理、緩存相關的技術,好比:面試
上面都是hadoop生態的,因爲hadoop中計算模型廣泛是mapreduce,可是它的編程風格和計算機制讓不少人使用不便。所以後來spark逐漸代替了mapr成爲主流的計算框架。Spark也有它本身的生態,可是因爲hadoop更多更早的被應用到企業,因此spark也能夠無縫的集成hadoop生態中的產品。spark更多隻是扮演一個計算的框架,在這個框架上,提供了基本的計算模塊core,基於sql的計算引擎spark sql,對接實時數據的流式計算spark streaming,算法相關的mlib以及圖計算相關的graphx。算法
這些框架都在這個大數據生態中扮演了本身重要的角色,他們協同工做就能夠幫助咱們解決不少難題。因爲我也是接觸不久,因此就按照本身學習和工做涉及的內容,在下面按照各個章節進行介紹,後續也會持續的更新。但願對全部對大數據感興趣的sql
在學習大數據的過程當中,須要具有的能力或者知識,在這裏簡單的羅列一下:shell
hdfs是大數據系統的基礎,它提供了基本的存儲功能,因爲底層數據的分佈式存儲,上層任務也能夠利用數據的本地性進行分佈式計算。hdfs思想上很簡單,就是namenode負責數據存儲位置的記錄,datanode負責數據的存儲。使用者client會先訪問namenode詢問數據存在哪,而後去datanode存儲;寫流程也基本相似,會先在namenode上詢問寫到哪,而後把數據存儲到對應的datanode上。因此namenode做爲整個系統的靈魂,一旦它掛掉了,整個系統也就沒法使用了。在運維中,針對namenode的高可用變得十分關鍵。數據庫
hive基於hdfs構建了數據倉庫系統,它以hdfs做爲存儲,依賴於數據庫(嵌入式的數據庫derby或者獨立的數據mysql或oracle)存儲表schema信息,並完成基於sql自動解析建立mapreduce任務(因爲mapreduce計算效率比較差,目前官方推薦的是底層計算模型採用tez或者spark)。因此hive能夠理解爲:hdfs原始存儲+DB Schema信息存儲+SQL解析引擎+底層計算框架組成的數據倉庫。apache
spark是如今大數據中應用最多的計算模型,它與java8的stream編程有相同的風格。封裝了不少的計算方法和模型,以延遲執行的方式,在真正須要執行的時候才進行運算。既能夠有效的作計算過程的容錯,也能夠改善咱們的編程模型。
oozie提供了大數據場景下各類任務的調度,好比shell腳本、spark任務、mapreduce任務、sqoop任務、hive查詢以及普通的java程序等等。它的編譯是生態圈裏面最複雜的,因爲以來的各個版本不一樣,須要指定特定的版本,所以沒有成型的一鍵部署包。
sqoop支持基於sql或者表名把數據庫中的數據存儲到分佈式環境中,數據庫支持oracle\mysql等等,分佈式環境能夠是hdfs,hive,hbase等等,數據的導入時雙向的,好比你能夠把oracle中的數據讀取存儲到hdfs,也能夠把hdfs的數據導入到oracle.
HBase是基於Hdfs之上的列式數據庫,基於文件分割以及rowkey的順序存儲,能快速索引查詢數據。我這邊是在推薦系統中,做爲推薦結果存儲引擎,不過因爲內容比較碎片化,Hbase寫入時間比較隨意,所以總會出現大量超時現象,還在持續優化中。
推薦學習資料:
我的總結:
在企業中,大數據的基礎平臺每每是多個用戶共用的,那麼如何管理資源的分配,就須要yarn來處理了。Yarn默認提供了三種資源分配的策略:
常見能夠用於分配的資源能夠是節點的數量,內存的大小,也能夠是CPU核數。
從名字來講他是動物園的管理員,實際上他是各個組件的協調者。能夠實現相似主從選舉、分佈式事務、負載均衡等多種功能,好比HDFS HA方案、HBase的Metastore、Kafka裏面的offset維護等等,由此能夠見,zookeeper的重要性。
不過激發我學習zookeeper的主要緣由仍是由於它裏面涉及了不少分佈式協議的東西,從而能更好的理解分佈式中的一些概念。因此,就跟着我一塊兒深刻淺出的學習吧!
主要參考:官方文檔 《從Paxos到zookeeper分佈式一致性原理與實踐》
上面是我學習hadoop和spark的分享,更重要的是學習歷程的記錄,但願有興趣學習大數據的朋友能夠經過我以前的學習路線得到一些思考和借鑑。後續也會逐步的完善,等到對總體有了比較全面的瞭解後,會專門針對安裝部署、使用實踐、原理解析進行介紹。