1. 程式人生 > >大數據學習之路

大數據學習之路

ebo 必備 pen 計算機程序 因此 hadoop中 高級 mapreduce 歷程

一直在努力學習大數據大數據相關的技術,很想了解眾多老司機的學習歷程。因為大數據涉及的技術很廣需要了解的東西也很多,會讓很多新手望而卻步。所以,我就在自己學習的過程中總結一下學到的內容以及踩到的一些坑,希望得到老司機的指點和新手的借鑒。

目前正在學習分布式理論和ZooKeeper

大數據學習QQ群:716581014

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

技術分享圖片

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

有了存儲和計算框架,周邊就衍生出了很多管理、緩存相關的技術,比如:

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。

這些框架都在這個大數據生態中扮演了自己重要的角色,他們協同工作就可以幫助我們解決很多難題。由於我也是接觸不久,所以就按照自己學習和工作涉及的內容,在下面按照各個章節進行介紹,後續也會持續的更新。希望對所有對大數據感興趣的

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

語言基礎:需要會使用shell腳本、java和scala(這倆語言主要是用於日常代碼和閱讀源代碼)
工具:IDE如eclipse或者idea,虛擬機和secureCRT連接工具
書籍:《Hadoop權威指南》《Hadoop YARN權威指南》《Spark快速大數據分析》《從Paxos到zookeeper分布式一致性原理與實踐》《Hive編程指南》其他的書籍閱讀後再推薦吧

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

大數據學習路線:

技術分享圖片

大數據學習路線

java(Java se,javaweb)
Linux(shell,高並發架構,lucene,solr)
Hadoop(Hadoop,HDFS,Mapreduce,yarn,hive,hbase,sqoop,zookeeper,flume)
機器學習(R,mahout)
Storm(Storm,kafka,redis)
Spark(scala,spark,spark core,spark sql,spark streaming,spark mllib,spark graphx)
Python(python,spark python)
雲計算平臺(docker,kvm,openstack)

名詞解釋

一、Linux
lucene: 全文檢索引擎的架構
solr: 基於lucene的全文搜索服務器,實現了可配置、可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面。

二、Hadoop
HDFS: 分布式存儲系統,包含NameNode,DataNode。NameNode:元數據,DataNode。DataNode:存數數據。
yarn: 可以理解為MapReduce的協調機制,本質就是Hadoop的處理分析機制,分為ResourceManager NodeManager。
MapReduce: 軟件框架,編寫程序。
Hive: 數據倉庫 可以用SQL查詢,可以運行Map/Reduce程序。用來計算趨勢或者網站日誌,不應用於實時查詢,需要很長時間返回結果。
HBase: 數據庫。非常適合用來做大數據的實時查詢。Facebook用Hbase存儲消息數據並進行消息實時的分析
ZooKeeper: 針對大型分布式的可靠性協調系統。Hadoop的分布式同步等靠Zookeeper實現,例如多個NameNode,active standby切換。
Sqoop: 數據庫相互轉移,關系型數據庫和HDFS相互轉移
Mahout: 可擴展的機器學習和數據挖掘庫。用來做推薦挖掘,聚集,分類,頻繁項集挖掘。
Chukwa: 開源收集系統,監視大型分布式系統,建立在HDFS和Map/Reduce框架之上。顯示、監視、分析結果。
Ambari: 用於配置、管理和監視Hadoop集群,基於Web,界面友好。

二、Cloudera
Cloudera Manager: 管理 監控 診斷 集成
Cloudera CDH:(Cloudera‘s Distribution,including Apache Hadoop) Cloudera對Hadoop做了相應的改變,發行版本稱為CDH。
Cloudera Flume: 日誌收集系統,支持在日誌系統中定制各類數據發送方,用來收集數據。
Cloudera Impala: 對存儲在Apache Hadoop的HDFS,HBase的數據提供直接查詢互動的SQL。
Cloudera hue: web管理器,包括hue ui,hui server,hui db。hue提供所有CDH組件的shell界面的接口,可以在hue編寫mr。

三、機器學習/R
R: 用於統計分析、繪圖的語言和操作環境,目前有Hadoop-R
mahout: 提供可擴展的機器學習領域經典算法的實現,包括聚類、分類、推薦過濾、頻繁子項挖掘等,且可通過Hadoop擴展到雲中。

四、storm
Storm: 分布式,容錯的實時流式計算系統,可以用作實時分析,在線機器學習,信息流處理,連續性計算,分布式RPC,實時處理消息並更新數據庫。
Kafka: 高吞吐量的分布式發布訂閱消息系統,可以處理消費者規模的網站中的所有動作流數據(瀏覽,搜索等)。相對Hadoop的日誌數據和離線分析,可以實現實時處理。目前通過Hadoop的並行加載機制來統一線上和離線的消息處理
Redis: 由c語言編寫,支持網絡、可基於內存亦可持久化的日誌型、key-value型數據庫。

五、Spark
Scala: 一種類似java的完全面向對象的編程語言。
jblas: 一個快速的線性代數庫(JAVA)。基於BLAS與LAPACK,矩陣計算實際的行業標準,並使用先進的基礎設施等所有的計算程序的ATLAS藝術的實現,使其非常快。

Spark: Spark是在Scala語言中實現的類似於Hadoop MapReduce的通用並行框架,除了Hadoop MapReduce所具有的優點,但不同於MapReduce的是job中間輸出結果可以保存在內存中,從而不需要讀寫HDFS,因此Spark能更好的適用於數據挖掘與機器學習等需要叠代的MapReduce算法。可以和Hadoop文件系統並行運作,用過Mesos的第三方集群框架可以支持此行為。
Spark SQL: 作為Apache Spark大數據框架的一部分,可用於結構化數據處理並可以執行類似SQL的Spark數據查詢
Spark Streaming: 一種構建在Spark上的實時計算框架,擴展了Spark處理×××式數據的能力。
Spark MLlib: MLlib是Spark是常用的機器學習算法的實現庫,目前(2014.05)支持二元分類,回歸,聚類以及協同過濾。同時也包括一個底層的梯度下降優化基礎算法。MLlib以來jblas線性代數庫,jblas本身以來遠程的Fortran程序。
Spark GraphX: GraphX是Spark中用於圖和圖並行計算的API,可以在Spark之上提供一站式數據解決方案,可以方便且高效地完成圖計算的一整套流水作業。

Fortran: 最早出現的計算機高級程序設計語言,廣泛應用於科學和工程計算領域。

技術分享圖片

BLAS: 基礎線性代數子程序庫,擁有大量已經編寫好的關於線性代數運算的程序。
LAPACK: 著名的公開軟件,包含了求解科學與工程計算中最常見的數值線性代數問題,如求解線性方程組、線性最小二乘問題、特征值問題和奇異值問題等。
ATLAS: BLAS線性算法庫的優化版本。
Spark Python: Spark是由scala語言編寫的,但是為了推廣和兼容,提供了java和python接口。

六、Python
Python: 一種面向對象的、解釋型計算機程序設計語言。

七、雲計算平臺
Docker: 開源的應用容器引擎
kvm: (Keyboard Video Mouse)
openstack: 開源的雲計算管理平臺項目


大數據學習加群:716581014

大數據學習之路