半結構化數據:html、json、xml等,有結構但沒有約束的文檔apache
搜索引擎:ELK,搜索組件、索引組件組成,用來搜索數據,保存在分佈式存儲中json
Hadoop是用Java語言開發的,是對谷歌公司這3篇論文開發出來的山寨版框架
2003年:The Google File System -->HDFS
2004年:MapReduce:Simplified Data Processing On Large Cluster -->MapReduce
2006年:BigTable:A Distributed Storage System for Structure Data -->Hbase
HDFS:Hadoop的分佈式文件系統,有中心節點式存儲數據
MapReduce:面向大數據並行處理的計算模型、框架和平臺
存在名稱節點:NN:NameNode和第二名稱節點SNN:Secondary NameNode
NN數據存儲在內存中,因爲數據在內存中變化十分快,硬盤存儲跟不上內存的變化速度,因此經過相似於數據庫事務日誌的機制,向硬盤存儲映像文件,在此過程當中 ,追加日誌不斷被清空不斷被寫入,因此當NN服務器掛了,至少不會丟失太多文件,可是因爲文件元數據在宕機後可能有不統一的狀況形成文件校驗,數據量過大會花費大量時間。
SNN爲輔助名稱節點,NN的追加日誌放到了共享存儲上,使SNN能訪問,當NN宕機後,SNN會能夠根據追加日誌及時啓動,至少優化了只有一個NN時候的文件校驗時間。
在Hadoop2或者HBase2版本以後,能夠將數據共享存放到zookeeper,幾個節點經過zookeeper同時獲取到視圖,很好的解決了剛纔的問題,也可以進行高可用設置了。
當有數據存儲時,HDFS文件系統除了存儲DN,會再尋找兩個數據節點進行存儲做爲副本,數據節點之間以鏈式相連,即有第一份纔有第二份,有第二份纔有第三份,每次存儲結束後節點會向前數據點報告,向元數據塊或者服務器報告本身的狀態和數據塊列表。當某一點數據丟失,此時鏈式數據會從新啓動,補足丟失的數據塊。
每個負責運行做業的節點,在MapReduce裏叫任務追蹤器,TaskTracker
TaskTracker:負責完成隊列處理,屬於Hadoop集羣
任務提交可能會同時由N我的提交N個做業,每一個人的做業不必定運行在全部節點上,有多是在一部分節點上,甚至多是一個節點上,爲了可以限制一個節點上不要接入過多的任務,因此咱們經過task slot,任務槽,來肯定一個節點最多隻能運行多少份任務
map:把一個任務映射爲多個任務,把一個函數看成爲一個參數,並將其應用於列表中的
fold:不斷地把獲得的結果摺疊到函數上,接收兩個參數:函數,初始值。
fold(g(),init):首先結合init初始值,經過函數g()獲得g(init)的結果,而後將獲得的結果g(init)在第二輪將做爲初始值,經過函數g()獲得g(g(init))的結果,以此類推最後會獲得一個最終結果。
<1>mapper:每個mapper就是每個實例,每個mapper處理完會生成一個列表,至關於map函數的過程,mapper接收數據若是是鍵值數據則直接使用,若是不是鍵值數據會先轉換爲鍵值數據
<2>reducer:當全部mapper運行完之後纔會進行reducer,至關於fold函數的過程,reducer可能不止一個,reducer只處理鍵值型數據,接收到的數據作摺疊
<3>reducer在摺疊後的數據依舊是鍵值型數據,摺疊過程叫作shuttle and sort,此過程十分重要
mapper:每100頁一個單位,好比說5 mappers,用於拆分紅爲單詞,好比說this 1,is 1,this 1,how 1,單詞逐個拆分,mapper處理後的爲k-v型數據
reducer:reducer只處理鍵值型數據,將拆分出來的單詞傳遞進reducer中進行統計處理與排序,將鍵相同的數據發往同一個reducer中,最後的結果this 500,is 200等等,結果依舊爲kv型數據
shuffle and sort:接收mapper後,reducer將單詞出現的次數進行鍵值數據統計計算的過程叫作shuffle and sort
Hadoop只提供了數據存儲平臺,任何做業、任何數據程序處理必須由Hadoop開發人員寫MapReduce程序調用纔可供使用,mapper的具體任務是什麼,reducer用什麼,都取決於開發人員的定義是什麼。
(1)partitioner:分區器,具有決定將mapper鍵值經過shuffle and sort過程發送給哪一個reducer的功能
(2)combiner:若是mapper產生的鍵值數據中的鍵相同,那麼將合併鍵,不然不合並,分散發送,一樣由hadoop開發人員開發。其輸入鍵和輸出鍵必須保證一致。
做用:做業調度、管理監控等等,因此運行時JobTracker會很是繁忙,它由此也成爲了性能瓶頸,不過在MRv2版本後,做業調度、管理和監控功能被切割
MRv1(Hadoop2) --> MRv2(Hadoop2)
RT Stream Graph:實時流式圖處理,圖狀算法數據結構
mapreduce把 資源管理和任務運行兩者隔離開了,程序運行由本身的Application Master負責,而資源分配由Resource Manager進行。因此當一個客戶端提交一個任務時,Resource Manager會詢問每個Node Manager有沒有空閒的容器來運行程序。若是有,它去找有的這個節點,來啓動這個主控進程Application Master。而後App Mstr向Resource Manager申請資源任務,Resource Manager分配好資源任務後會告訴App Mstr,以後App Mstr可使用contrainer來運行做業了。
每個container在運行過程當中都會將反饋本身的做業任務給App Mstr,當container中有任務結束了,App Mstr也會報告給Resource Manager,Resource Manager會將資源收回來
AM:Application Manager