大數據基礎知識學習和大數據開發學習路線圖指導

大數據需要學習什麼?很多人問過我這個問題。總是沒有一個合適的契機去好好總結這些內容,直到開始寫這篇東西。大數據是近五年興起的行業,發展迅速,很多技術經過這些年的迭代也變得比較成熟了,同時新的東西也不斷涌現,想要保持自己競爭力的唯一辦法就是不斷學習。
我還是要推薦下我自己創建的大數據資料分享羣142973723,這是大數據學習交流的地方,不管你是小白還是大牛,小編都歡迎,不定期分享乾貨,包括我整理的一份適合零基礎學習大數據資料和入門教程。

大數據需要的語言 Java

java可以說是大數據最基礎的編程語言,據我這些年的經驗,我接觸的很大一部分的大數據開發都是從Jave Web開發轉崗過來的

一是因爲大數據的本質無非就是海量數據的計算,查詢與存儲,後臺開發很容易接觸到大數據量存取的應用場景 二就是java語言本事了,天然的優勢,因爲大數據的組件很多都是用java開發的像HDFS,Yarn,Hbase,MR,Zookeeper等等,想要深入學習,填上生產環境中踩到的各種坑,必須得先學會java然後去啃源碼。

說到啃源碼順便說一句,開始的時候肯定是會很難,需要對組件本身和開發語言都有比較深入的理解,熟能生巧慢慢來,等你過了這個階段,習慣了看源碼解決問題的時候你會發現源碼真香。

分佈式計算

什麼是分佈式計算?分佈式計算研究的是如何把一個需要非常巨大的計算能力才能解決的問題分成許多小的部分,然後把這些部分分配給許多服務器進行處理,最後把這些計算結果綜合起來得到最終的結果。

舉個栗子,就像是組長把一個大項目拆分,讓組員每個人開發一部分,最後將所有人代碼merge,大項目完成。聽起來好像很簡單,但是真正參與過大項目開發的人一定知道中間涉及的內容可不少。

比如這個大項目如何拆分?任務如何分配?每個人手頭已有工作怎麼辦?每個人能力不一樣怎麼辦?每個人開發進度不一樣怎麼辦?開發過程中組員生病要請長假他手頭的工作怎麼辦?指揮督促大家幹活的組長請假了怎麼辦?最後代碼合併過程出現問題怎麼辦?項目延期怎麼辦?項目最後黃了怎麼辦?

仔細想想上面的奪命十連問,其實每一條都是對應了分佈式計算可能會出現的問題,具體怎麼對應大家思考吧我就不多說了,其實已經是非常明顯了。也許有人覺得這些問題其實在多人開發的時候都不重要不需要特別去考慮怎麼辦,但是在分佈式計算系統中不一樣,每一個都是非常嚴重並且非常基礎的問題,需要有很好的解決方案。

最後提一下,分佈式計算目前流行的工具有:

離線工具Spark,MapReduce等 實時工具Spark Streaming,Storm,Flink等

分佈式存儲

傳統的網絡存儲系統採用的是集中的存儲服務器存放所有數據,單臺存儲服務器的io能力是有限的,這成爲了系統性能的瓶頸,同時服務器的可靠性和安全性也不能滿足需求,尤其是大規模的存儲應用。

分佈式存儲系統,是將數據分散存儲在多臺獨立的設備上。採用的是可擴展的系統結構,利用多臺存儲服務器分擔存儲負荷,利用位置服務器定位存儲信息,它不但提高了系統的可靠性、可用性和存取效率,還易於擴展。
大數據基礎知識學習和大數據開發學習路線圖指導
上圖是hdfs的存儲架構圖,hdfs作爲分佈式文件系統,兼備了可靠性和擴展性,數據存儲3份在不同機器上(兩份存在同一機架,一份存在其他機架)保證數據不丟失。由NameNode統一管理元數據,可以任意擴展集羣。

主流的分佈式數據庫有很多hbase,mongoDB,GreenPlum,redis等等等等,沒有孰好孰壞之分,只有合不合適,每個數據庫的應用場景都不同,其實直接比較是沒有意義的。

工具技能

1、hadoop: 常用於離線的複雜的大數據處理

2、Spark:常用於離線的快速的大數據處理

3、Storm:常用於在線的實時的大數據處理

4、HDFS:Hadoop分佈式文件系統。HDFS有着高容錯性的特點,並且設計用來部署在低廉的硬件上。而且它提供高吞吐量來訪問應用程序的數據,適合那些有着超大數據集的應用程序。

5、Hbase:是一個分佈式的、面向列的開源數據庫。該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化數據的分佈式存儲系統”。就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另一個不同的是HBase基於列的而不是基於行的模式。

6、Hive:hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換爲MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。

7、Kafka:是一種高吞吐量的分佈式發佈訂閱消息系統,它可以處理消費者規模的網站中的所有動作流數據。 這種動作(網頁瀏覽,搜索和其他用戶的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些數據通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。 對於像Hadoop的一樣的日誌數據和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的並行加載機制來統一線上和離線的消息處理,也是爲了通過集羣來提供實時的消費。

8、redis:redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set –有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。

數據挖掘十大經典算法

1:C4.5

C4.5就是一個決策樹算法,它是決策樹(決策樹也就是做決策的節點間像一棵樹一樣的組織方式,其實是一個倒樹)核心算法ID3的改進算法,所以基本上了解了一半決策樹構造方法就能構造它。決策樹構造方法其實就是每次選擇一個好的特徵以及分裂點作爲當前節點的分類條件。C4.5比ID3改進的地方時:

ID3選擇屬性用的是子樹的信息增益(這裏可以用很多方法來定義信息,ID3使用的是熵(entropy)(熵是一種不純度度量準則)),也就是熵的變化值,而C4.5用的是信息增益率。也就是多了個率嘛。一般來說率就是用來取平衡用的,就像方差起的作用差不多,比如有兩個跑步的人,一個起點是100m/s的人、其1s後爲110m/s;另一個人起速是1m/s、其1s後爲11m/s。如果僅算加速度(單位時間速度增加量)那麼兩個就是一樣的了;但如果使用速度增加率(速度增加比例)來衡量,2個人差距就很大了。在這裏,其克服了用信息增益選擇屬性時偏向選擇取值多的屬性的不足。在樹構造過程中進行剪枝,我在構造決策樹的時候好討厭那些掛着幾個元素的節點。對於這種節點,乾脆不考慮最好,不然很容易導致overfitting。對非離散數據都能處理,這個其實就是一個個式,看對於連續型的值在哪裏分裂好。也就是把連續性的數據轉化爲離散的值進行處理。能夠對不完整數據進行處理,這個重要也重要,其實也沒那麼重要,缺失數據採用一些方法補上去就是了。

2:CART

CART也是一種決策樹算法!相對於上着有條件實現一個節點下面有多個子樹的多元分類,CART只是分類兩個子樹,這樣實現起來稍稍簡便些。所以說CART算法生成的決策樹是結構簡潔的二叉樹。

3:KNN(K Nearest Neighbours)

這個很簡單,就是看你周圍的K個人(樣本)中哪個類別的人佔的多,哪個多,那我就是多的那個。實現起來就是對每個訓練樣本都計算與其相似度,是Top-K個訓練樣本出來,看這K個樣本中哪個類別的多些,誰多跟誰。

4:Naive Bayes

(樸素貝葉斯NB)

NB認爲各個特徵是獨立的,誰也不關誰的事。所以一個樣本(特徵值的集合,比如“數據結構”出現2次,“文件”出現1次),可以通過對其所有出現特徵在給定類別的概率相乘。比如“數據結構”出現在類1的概率爲0.5,“文件”出現在類1的概率爲0.3,則可認爲其屬於類1的概率爲0.50.50.3。

5:Support Vector Machine (支持向量機SVM)

SVM就是想找一個分類得最”好”的分類線/分類面(最近的一些兩類樣本到這個”線”的距離最遠)。這個沒具體實現過,上次聽課,那位老師自稱自己實現了SVM,敬佩其鑽研精神。常用的工具包是LibSVM、SVMLight、MySVM。

6:EM (期望最大化)

這個我認爲就是假設數據時由幾個高斯分佈組成的,所以最後就是要求幾個高斯分佈的參數。通過先假設幾個值,然後通過反覆迭代,以期望得到最好的擬合。

7:Apriori

這個是做關聯規則用的。不知道爲什麼,一提高關聯規則我就想到購物籃數據。這個沒實現過,不過也還要理解,它就是通過支持度和置信度兩個量來工作,不過對於Apriori,它通過頻繁項集的一些規律(頻繁項集的子集必定是頻繁項集等等啦)來減少計算複雜度。

8:PageRank

大名鼎鼎的PageRank大家應該都知道(Google靠此專利發家,其實也不能說發家啦!)。對於這個算法我的理解就是:如果我指向你(網頁間的連接)則表示我承認你,則在計算你的重要性的時候可以加上我的一部分重要性(到底多少,要看我自己有多少和我共承認多少個人)。通過反覆這樣來,可以求的一個穩定的衡量各個人(網頁)重要性的值。不過這裏必須要做些限制(一個人的開始默認重要性都是1),不然那些值會越來越大越來越大。

9:K-Means

K-Means是一種最經典也是使用最廣泛的聚類方法,時至今日扔然有很多基於其的改進模型提出。K-Means的思想很簡單,對於一個聚類任務(你需要指明聚成幾個類,當然按照自然想法來說不應該需要指明類數,這個問題也是當前聚類任務的一個值得研究的課題),首先隨機選擇K個簇中心,然後反覆計算下面的過程直到所有簇中心不改變(簇集合不改變)爲止:步驟1:對於每個對象,計算其與每個簇中心的相似度,把其歸入與其最相似的那個簇中。

步驟2:更新簇中心,新的簇中心通過計算所有屬於該簇的對象的平均值得到。

k-means 算法的工作過程說明如下:首先從n個數據對象任意選擇k 個對象作爲初始聚類中心;而對於所剩下其它對象,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然後再計算每個所獲新聚類的聚類中心(該聚類中所有對象的均值);不斷重複這一過程直到標準測度函數開始收斂爲止。一般都採用均方差作爲標準測度函數. k個聚類具有以下特點:各聚類本身儘可能的緊湊,而各聚類之間儘可能的分開。

10:AdaBoost

AdaBoost做分類的一般知道,它是一種boosting方法。這個不能說是一種算法,應該是一種方法,因爲它可以建立在任何一種分類算法上,可以是決策樹,NB,SVM等。

Adaboost是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。其算法本身是通過改變數據分佈來實現的,它根據每次訓練集之中每個樣本的分類是否正確,以及上次的總體分類的準確率,來確定每個樣本的權值。將修改過權值的新數據集送給下層分類器進行訓練,最後將每次訓練得到的分類器最後融合起來,作爲最後的決策分類器。使用adaboost分類器可以排除一些不必要的訓練數據,並將關鍵放在關鍵的訓練數據上面。

應用數學基礎

線性代數

1、標量、向量、矩陣和張量

2、矩陣和向量相乘

3、單位矩陣和逆矩陣

4、線性相關和生成子空間

5、範數

6、特殊類型的矩陣和向量

7、特徵分解

8、奇異值分解

9、Moore-Penrose 僞逆

10、跡運算

11、行列式

12、實例:主成分分析

概率與信息論

1、爲什麼要使用概率?

2、隨機變量

3、概率分佈

4、邊緣概率

5、條件概率

6、條件概率的鏈式法則

7、獨立性和條件獨立性

8、期望、方差和協方差

9、常用概率分佈

10、常用函數的有用性質

11、貝葉斯規則

12、連續型變量的技術細節

13、信息論

14、結構化概率模型

數值計算

1、上溢和下溢

2、病態條件

3、基於梯度的優化方法

4、約束優化

5、實例:線性最小二乘

這些大數據所需要學習到的知識,你都學會了嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章