hadoop生態圈各個元件簡介
Hadoop 是一個能夠對大量資料進行分散式處理的軟體框架。具有可靠、高效、可伸縮的特點。
Hadoop 的核心是 HDFS 和 Mapreduce,HDFS 還包括 YARN。
1,HDFS(hadoop分散式檔案系統)
是hadoop體系中資料儲存管理的基礎。他是一個高度容錯的系統,能檢測和應對硬體故障。
client:切分檔案,訪問HDFS,與那麼弄得互動,獲取檔案位置資訊,與DataNode互動,讀取和寫入資料。
namenode:master節點,在hadoop1.x中只有一個,管理HDFS的名稱空間和資料塊對映資訊,配置副本策略,處理客戶 端請求。
DataNode:slave節點,儲存實際的資料,彙報儲存資訊給namenode。
secondary namenode:輔助namenode,分擔其工作量:定期合併fsimage和fsedits,推送給namenode;緊急情況下和輔助恢復namenode,但其並非namenode的熱備。
2,mapreduce(分散式計算框架)
mapreduce是一種計算模型,用於處理大資料量的計算。其中map對應資料集上的獨立元素進行指定的操作,生成鍵-值對形式中間,reduce則對中間結果中相同的鍵的所有值進行規約,以得到最終結果。
jobtracker:master節點,只有一個,管理所有作業,任務/作業的監控,錯誤處理等,將任務分解成一系列任務,並分派給tasktracker。
tacktracker:slave節點,執行 map task和reducetask;並與jobtracker互動,彙報任務狀態。
map task:解析每條資料記錄,傳遞給使用者編寫的map()並執行,將輸出結果寫入到本地磁碟(如果為map—only作業,則直接寫入HDFS)。
reduce task:從map 它深刻地執行結果中,遠端讀取輸入資料,對資料進行排序,將資料分組傳遞給使用者編寫的reduce函式執行。
3, hive(基於hadoop的資料倉庫)
由Facebook開源,最初用於解決海量結構化的日誌資料統計問題。
hive定於了一種類似sql的查詢語言(hql)將sql轉化為mapreduce任務在hadoop上執行。
4,hbase(分散式列存資料庫)
hbase是一個針對結構化資料的可伸縮,高可靠,高效能,分散式和麵向列的動態模式資料庫。和傳統關係型資料庫不同,hbase採用了bigtable的資料模型:增強了稀疏排序對映表(key/value)。其中,鍵由行關鍵字,列關鍵字和時間戳構成,hbase提供了對大規模資料的隨機,實時讀寫訪問,同時,hbase中儲存的資料可以使用mapreduce來處理,它將資料儲存和平行計算完美結合在一起。
5,zookeeper(分散式協作服務)
解決分散式環境下的資料管理問題:統一命名,狀態同步,叢集管理,配置同步等。
6,sqoop(資料同步工具)
sqoop是sql-to-hadoop的縮寫,主要用於傳統資料庫和hadoop之間傳輸資料。
資料的匯入和匯出本質上是mapreduce程式,充分利用了MR的並行化和容錯性。
7,pig(基於hadoop的資料流系統)
定義了一種資料流語言-pig latin,將指令碼轉換為mapreduce任務在hadoop上執行。
通常用於離線分析。
8,mahout(資料探勘演算法庫)
mahout的主要目標是建立一些可擴充套件的機器學習領域經典演算法的實現,旨在幫助開發人員更加方便快捷地建立只能應用程式。mahout現在已經包含了聚類,分類,推薦引擎(協同過濾)和頻繁集挖掘等廣泛使用的資料探勘方法。除了演算法是,mahout還包含了資料的輸入/輸出工具,與其他儲存系統(如資料庫,mongoDB或Cassandra)整合等資料探勘支援架構。
9,flume(日誌收集工具)
cloudera開源的日誌收集系統,具有分散式,高可靠,高容錯,易於定製和擴充套件的特點。他將資料從產生,傳輸,處理並寫入目標的路徑的過程抽象為資料流,在具體的資料流中,資料來源支援在flume中定製資料傳送方,從而支援收集各種不同協議資料。
10,資源管理器的簡單介紹(YARN和mesos)
隨著網際網路的高速發展,基於資料 密集型應用 的計算框架不斷出現,從支援離線處理的mapreduce,到支援線上處理的storm,從迭代式計算框架到 流式處理框架s4,...,在大部分網際網路公司中,這幾種框架可能都會採用,比如對於搜尋引擎公司,可能的技術方法如下:網頁建索引採用mapreduce框架,自然語言處理/資料探勘採用spark,對效能要求到的資料探勘演算法用mpi等。公司一般將所有的這些框架部署到一個公共的叢集中,讓它們共享叢集的資源,並對資源進行統一使用,這樣便誕生了資源統一管理與排程平臺,典型的代表是mesos和yarn。
11,其他的一些開源元件:
1)cloudrea impala:
一個開源的查詢引擎。與hive相同的元資料,SQL語法,ODBC驅動程式和使用者介面,可以直接在HDFS上提供快速,互動式SQL查詢。impala不再使用緩慢的hive+mapreduce批處理,而是通過與商用並行關係資料庫中類似的分散式查詢引擎。可以直接從HDFS或者Hbase中用select,join和統計函式查詢資料,從而大大降低延遲。
2)spark:
spark是個開源的資料 分析叢集計算框架,最初由加州大學伯克利分校AMPLab,建立於HDFS之上。spark與hadoop一樣,用於構建大規模,延遲低的資料分析應用。spark採用Scala語言實現,使用Scala作為應用框架。
spark採用基於記憶體的分散式資料集,優化了迭代式的工作負載以及互動式查詢。
與hadoop不同的是,spark與Scala緊密整合,Scala象管理本地collective物件那樣管理分散式資料集。spark支援分散式資料集上的迭代式任務,實際上可以在hadoop檔案系統上與hadoop一起執行(通過YARN,MESOS等實現)。
3)storm
storm是一個分散式的,容錯的計算系統,storm屬於流處理平臺,多用於實時計算並更新資料庫。storm也可被用於“連續計算”,對資料流做連續查詢,在計算時將結果一流的形式輸出給使用者。他還可被用於“分散式RPC”,以並行的方式執行昂貴的運算。
4)kafka
kafka是由Apache軟體基金會開發的一個開源流處理平臺,由Scala和Java編寫。Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,它可以處理消費者規模的網站中的所有動作流資料。 這種動作(網頁瀏覽,搜尋和其他使用者的行動)是在現代網路上的許多社會功能的一個關鍵因素。 這些資料通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。 對於像Hadoop的一樣的日誌資料和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的並行載入機制來統一線上和離線的訊息處理,也是為了通過叢集來提供實時的訊息
5)redis
Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。
Hadoop生態圈主要應用