大資料入門之hadoop相關概念知識點整理
Hadoop是一個開源框架,允許使用簡單的程式設計模型在跨計算機叢集的分散式環境中儲存和處理大資料。它的設計是從單個伺服器擴充套件到數千個機器,每個都提供本地計算和儲存。今天整理了一些關於hadoop相關概念的知識點,覺得文章有用的小夥伴可以直接收藏~
我還是要推薦下我自己建立的大資料資料分享群142973723,這是大資料學習交流的地方,不管你是小白還是大牛,小編都歡迎,不定期分享乾貨,包括我整理的一份適合零基礎學習大資料資料和入門教程。
Hadoop介紹:
Hadoop實現了一個分散式檔案系統(Hadoop Distributed File System),簡稱HDFS。
HDFS有高容錯性的特點,並且設計用來部署在低廉的硬體上;而且它提供高吞吐量來訪問應用程式的資料,適合那些有著超大資料集的應用程式。我這裡準備了一些學習大資料的學習資料,從大資料基礎到專案實戰都有學習資料,需要的話可以加群:834325294 免費領取哦
Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的資料提供了儲存,則MapReduce為海量的資料提供了計算。
1)HDFS
HDFS自動儲存多個副本,移動計算。缺點是小檔案存取佔用namenode記憶體,寫入只支援追加,不能隨機修改。它儲存的邏輯空間稱為block,檔案的許可權類似linux。整體架構分三種節點,NN,SNN,DN
NN 負責讀寫操作儲存metadata(Ownership Permission blockinfo)
SNN 負責輔助NN合併fsimage和edits,減少nn啟動時間
DN 負責存資料,每個資料(檔案)分割成若干block,每個block預設3個副本。啟動後像NN傳送心跳保持聯絡
NN儲存的metadata在hdfs啟動後加載到計算機記憶體,除block位置資訊的metadata儲存在OS檔案系統中的fsimage檔案中,對metadata的操作日誌儲存在OS檔案系統中的edits檔案中。block位置資訊是hdfs啟動後由DN上報NN再載入到記憶體的。
2)MapReduce
離線計算框架,過程分為split map shuffle reduce四個過程。架構節點有:Jobtracker TaskTracker。Split將檔案分割,傳輸到mapper,mapper接收KV形式的資料,經過處理,再傳到shuffle過程。
Shuffle先進行HashPartition或者自定義的partition,會有資料傾斜和reduce的負載均衡問題;再進行排序,預設按字典排序;為減少mapper輸出資料,再根據key進行合併,相同key的資料value會被合併;最後分組形成(key,value{})形式的資料,輸出到下一階段。
Reduce輸入的資料就變成了,key+迭代器形式的資料,再進行處理。
Hadoop能解決哪些問題?
海量資料需要及時分析和處理
海量資料需要深入分析和挖掘
資料需要長期儲存
海量資料儲存的問題
Hadoop 相關技術
Hbase:Nosql資料庫,Key-Value儲存,最大化利用記憶體
HDFS:hadoop distribute file system(分散式檔案系統),最大化利用磁碟
MapReduce:程式設計模型,主要用來做資料分析,最大化利用CPU
集中式系統
集中式系統用一句話概括就是:一個主機帶多個終端。
終端沒有資料處理能力,僅負責資料的錄入和輸出。而運算、儲存等全部在主機上進行。現在的銀行系統,大部分都是這種集中式的系統,此外,在大型企業、科研單位、政府等也有分佈。
集中式系統的最大的特點就是部署結構非常簡單,底層一般採用從IBM、HP等廠商購買到的昂貴的大型主機。因此無需考慮如何對服務進行多節點的部署,也就不用考慮各節點之間的分散式協作問題。但是,由於採用單機部署。很可能帶來系統大而複雜、難於維護、發生單點故障、擴充套件性差等問題。
分散式系統(distributed system)
一群獨立計算機集合共同對外提供服務,但是對於系統的使用者來說,就像是一臺計算機在提供服務一樣。分散式意味著可以採用更多的普通計算機(相對於昂貴的大型機)組成分散式叢集對外提供服務。計算機越多,CPU、記憶體、儲存資源等也就越多,能夠處理的併發訪問量也就越大。
一個標準的分散式系統應該具有以下幾個主要特徵:
分佈性:分散式系統中的多臺計算機之間在空間位置上可以隨意分佈,系統中的多臺計算機之間沒有主、從之分,即沒有控制整個系統的主機,也沒有受控的從機。
透明性:系統資源被所有計算機共享。每臺計算機的使用者不僅可以使用本機的資源,還可以使用本分散式系統中其他計算機的資源(包括CPU、檔案、印表機等)。
同一性:系統中的若干臺計算機可以互相協作來完成一個共同的任務,或者說一個程式可以分佈在幾臺計算機上並行地執行。
通訊性:系統中任意兩臺計算機都可以通過通訊來交換資訊。