大數據學習之路(持續更新中...)

在16年8月份至今,一直在努力學習大數據大數據相關的技術,很想了解衆多老司機的學習歷程。由於大數據涉及的技術很廣須要瞭解的東西也不少,會讓不少新手望而卻步。因此,我就在本身學習的過程當中總結一下學到的內容以及踩到的一些坑,但願獲得老司機的指點和新手的借鑑。html

目前正在結合機器學習理論學習MLlib源碼java

前言

在學習大數據以前,先要了解他解決了什麼問題,能給咱們帶來什麼價值。一方面,之前IT行業發展沒有那麼快,系統的應用也不完善,數據庫足夠支撐業務系統。可是隨着行業的發展,系統運行的時間愈來愈長,蒐集到的數據也愈來愈多,傳統的數據庫已經不能支撐全量數據的存儲工做;另外一方面,數據愈來愈多,單機的計算已經成爲瓶頸。所以,基於分佈式的大數據系統嶄露頭角。那麼大數據系統裏面都有什麼東西呢?能夠參考下面的圖node

在存儲上,hdfs的分佈式存儲能夠任意水平擴展,能夠解決數據存儲的難題。在計算上,從最初的MapReduce,把任務水平拆分,多臺機器並行計算,再彙總結果;到基於Spark的內存計算,改造Mapreduce每次數據落盤以及編程方式的痛點。mysql

有了存儲和計算框架,周邊就衍生出了不少管理、緩存相關的技術,好比:面試

  • yarn解決多租戶資源調度的難題,
  • flume解決數據傳輸的難題,
  • sqoop解決分佈式存儲數據與傳統DB數據之間的轉換,
  • oozie解決了大數據計算任務的調度,
  • kafka提供了發佈訂閱機制的消息隊列,
  • zookeeper能夠幫助用戶完成主備的選舉,
  • hive在hdfs的基礎上提供了數倉的功能,
  • hbase則基於hdfs實現列式數據庫....

上面都是hadoop生態的,因爲hadoop中計算模型廣泛是mapreduce,可是它的編程風格和計算機制讓不少人使用不便。所以後來spark逐漸代替了mapr成爲主流的計算框架。Spark也有它本身的生態,可是因爲hadoop更多更早的被應用到企業,因此spark也能夠無縫的集成hadoop生態中的產品。spark更多隻是扮演一個計算的框架,在這個框架上,提供了基本的計算模塊core,基於sql的計算引擎spark sql,對接實時數據的流式計算spark streaming,算法相關的mlib以及圖計算相關的graphx。算法

這些框架都在這個大數據生態中扮演了本身重要的角色,他們協同工做就能夠幫助咱們解決不少難題。因爲我也是接觸不久,因此就按照本身學習和工做涉及的內容,在下面按照各個章節進行介紹,後續也會持續的更新。但願對全部對大數據感興趣的sql

學習必備

在學習大數據的過程當中,須要具有的能力或者知識,在這裏簡單的羅列一下:shell

  • 語言基礎:須要會使用shell腳本、java和scala(這倆語言主要是用於平常代碼和閱讀源代碼)
  • 工具:IDE如eclipse或者idea,虛擬機和secureCRT鏈接工具
  • 書籍:《Hadoop權威指南》《Hadoop YARN權威指南》《Spark快速大數據分析》《從Paxos到zookeeper分佈式一致性原理與實踐》《Hive編程指南》其餘的書籍閱讀後再推薦吧
  • 博客:董的博客
  • 進階:閱讀官方文檔(幫你瞭解它都能作什麼)、源代碼(幫你瞭解它是怎麼作的)

hdfs

hdfs是大數據系統的基礎,它提供了基本的存儲功能,因爲底層數據的分佈式存儲,上層任務也能夠利用數據的本地性進行分佈式計算。hdfs思想上很簡單,就是namenode負責數據存儲位置的記錄,datanode負責數據的存儲。使用者client會先訪問namenode詢問數據存在哪,而後去datanode存儲;寫流程也基本相似,會先在namenode上詢問寫到哪,而後把數據存儲到對應的datanode上。因此namenode做爲整個系統的靈魂,一旦它掛掉了,整個系統也就沒法使用了。在運維中,針對namenode的高可用變得十分關鍵。數據庫

mapreduce

hive

hive基於hdfs構建了數據倉庫系統,它以hdfs做爲存儲,依賴於數據庫(嵌入式的數據庫derby或者獨立的數據mysql或oracle)存儲表schema信息,並完成基於sql自動解析建立mapreduce任務(因爲mapreduce計算效率比較差,目前官方推薦的是底層計算模型採用tez或者spark)。因此hive能夠理解爲:hdfs原始存儲+DB Schema信息存儲+SQL解析引擎+底層計算框架組成的數據倉庫。apache

官方文檔

spark

spark是如今大數據中應用最多的計算模型,它與java8的stream編程有相同的風格。封裝了不少的計算方法和模型,以延遲執行的方式,在真正須要執行的時候才進行運算。既能夠有效的作計算過程的容錯,也能夠改善咱們的編程模型。

官方文檔

oozie

oozie提供了大數據場景下各類任務的調度,好比shell腳本、spark任務、mapreduce任務、sqoop任務、hive查詢以及普通的java程序等等。它的編譯是生態圈裏面最複雜的,因爲以來的各個版本不一樣,須要指定特定的版本,所以沒有成型的一鍵部署包。

官方文檔

sqoop

sqoop支持基於sql或者表名把數據庫中的數據存儲到分佈式環境中,數據庫支持oracle\mysql等等,分佈式環境能夠是hdfs,hive,hbase等等,數據的導入時雙向的,好比你能夠把oracle中的數據讀取存儲到hdfs,也能夠把hdfs的數據導入到oracle.

官方文檔

hbase

HBase是基於Hdfs之上的列式數據庫,基於文件分割以及rowkey的順序存儲,能快速索引查詢數據。我這邊是在推薦系統中,做爲推薦結果存儲引擎,不過因爲內容比較碎片化,Hbase寫入時間比較隨意,所以總會出現大量超時現象,還在持續優化中。

推薦學習資料:

  1. 封神總結的HBase全網最佳學習資料彙總
  2. 分佈式(hadoop)內核研發面試指南
  3. 封神微博
  4. 阿里封神談hadoop生態學習之路

我的總結:

yarn

在企業中,大數據的基礎平臺每每是多個用戶共用的,那麼如何管理資源的分配,就須要yarn來處理了。Yarn默認提供了三種資源分配的策略:

  • FIFO:先進先出,即按照用戶提交任務的時間分配資源
  • Capacity:按照隊列設置隊列的大小
  • Fair Share:也是基於隊列,只不過資源的粒度更小。

常見能夠用於分配的資源能夠是節點的數量,內存的大小,也能夠是CPU核數。

官方文檔

zookeeper

從名字來講他是動物園的管理員,實際上他是各個組件的協調者。能夠實現相似主從選舉、分佈式事務、負載均衡等多種功能,好比HDFS HA方案、HBase的Metastore、Kafka裏面的offset維護等等,由此能夠見,zookeeper的重要性。

不過激發我學習zookeeper的主要緣由仍是由於它裏面涉及了不少分佈式協議的東西,從而能更好的理解分佈式中的一些概念。因此,就跟着我一塊兒深刻淺出的學習吧!

主要參考:官方文檔 《從Paxos到zookeeper分佈式一致性原理與實踐》

最後

上面是我學習hadoop和spark的分享,更重要的是學習歷程的記錄,但願有興趣學習大數據的朋友能夠經過我以前的學習路線得到一些思考和借鑑。後續也會逐步的完善,等到對總體有了比較全面的瞭解後,會專門針對安裝部署、使用實踐、原理解析進行介紹。

若是有任何疑問或者錯誤,能夠在博客留言,博主會盡可能及時回覆。

相關文章
相關標籤/搜索