Hadoop生態中各個組件、進程的作用

1、hadoop的各種進程及其作用

NameNode:是hdfs的主服務器,管理文件系統的目錄樹以及對集群中存儲文件的訪問,保存有metadate,不斷讀取記錄集群中dataNode主機狀況和工作狀態。

SecondaryNameNode:NameNode的冷備,負責周期性的合并esimage以及editslog,將少NameNode的工作量。

DataNode:負責管理各個存儲節點,每個存儲數據的節點都有一個datanode守護進程。

DFSZKFailoverController:負責監控NameNode的狀態,并及時把信息狀態寫入zk,通過一個獨立的線程周期性的調用Namenode上的一個特定接口來獲取NameNode的健康狀態,也有選擇誰為Active的權利,但是最多只能有兩個namenode,所以選擇策略為先到先得。

QuorumPeerMain:zookeeper主進程

JournalNode:高可用情況下用于存放namenode的editlog文件(元數據),也是多節點高可用。

Fsimage:元數據鏡像文件(文件系統的目錄樹)。Edits:元數據的操作日志(針對文件系統做的修改操作記錄。

editsLog:修改日志,當文件系統客戶端client進行寫操作的時候,我們就要把著條記錄放在修改日志中,之后namenode修改內存中的數據結構,每次寫操作執行之前,editsLog都會同步到文件系統中

2、mapreduce

Combiner:是一個特殊的reduce,是一個在map端執行的reducer,能夠減少I/O操作,降低reducer端的負荷,也就是map端的聚合操作。

3、yarn

ResourceManager(JobTracker):負責調度DataManager上的資源,每個DataNode都有一個NodeManager(TaskTracker)來執行實際工作

NodeManager:管理slave節點的資源

ApplicationMaster:用于調度任務,任何要在yarn上啟動的作業類型,必須有一個。

工作流程:客戶端發送請求到資源管理器ResourceManager,所有的NodeManager向資源管理器進行反饋節點狀態,ResourceManager向資源比較空閑的NodeManager發送任務,NodeManager創建appMaster(ApplicationMaster),任務節點的appMaster向ResourceManager申請資源,ResourceManager會在其他的節點開辟新的資源環境(spark中是executor)。計算的結果反饋給AppMaster然后由appMaster向ResourceManager反饋處理的數據結果,就明確哪些節點有資源可用了,接下里就可以派發任務了。

hadoop調度機制

默認的調度起FIFO:先進先出

計算能力調度器Capacity Scheduler:支持多個隊列,每個隊列可以配置一定的資源,每個隊列采用FIFO調度策略,會對同意用戶提交的作業所占資源進行限定以防止一個用戶作業獨占隊列的資源。計算每個隊列中正在運行的任務數與其應該分配得到的計算資源之間的比值,選擇一個比值最小的隊列,然后按照作業優先級和提交時間順序選擇,同時考慮用戶資源量限制和內存的限制。

公平調度起FairScheuler:支持多個隊列多個用戶,每個隊列資源可配置,每個隊列中的作業公平共享隊列中的所有資源。

4、hadoop操作命令

hadoop dfsadmin -report 查看hdfs集群的存儲空間使用情況。

hadoop fs -du?-h 目錄 ? 查看當前目錄下各個文件占得內存 ? ?詳細說明

Hadoop fs –rmr /tmp/aaa刪除一個目錄

Hadoop fs –put文件hdfs文件目錄上傳一個文件

Hadoop fs –get hdfs文件下載地址目錄下載一個文件

Hadoop fs –moveFromLocal文件hdfs文件目錄上傳一個文件同時刪除本地文件

Haddop fs –text hdfs目錄查看文件內容

Haddopfs –cat hdfs目錄查看文件內容

Hadoop job –list獲取任務列表

Hadoop job –kill job-id殺死一個job

Hadoop-daemon.sh start datanoe加入一個新的節點

Hadoop mradmin/dfsadmin –refreshnones刪除一個節點

yarn application -kill application_任務id:停止在yarn上運行的spark任務,在resourcemanager上執行

5、Hbase存儲流程

一個region由多個store組成,每個store中包含一個列蔟的所有數據。Store包括位于內存中的memstore和位于硬盤的storefile。

寫數據的時候,先寫入memstore,當memstore中的數據達到某個閥值的時候,HRegionServer會啟動flushCache進程將數據寫入到一個新的storefile,而當storefile文件的數量增長到一定程度的時候,系統會將storefile進行合并,進行版本合并以及刪除操作,形成更大的storefile。而當storefile文件不斷合并,數據量再次超過一定閥值的時候,就會將region分割為兩個region,并有HMaster分配到響應的region服務器,實現了負載均衡。

客戶端在檢索數據的時候,現在memstore中找數據,沒有的話再尋找storefile。

Hbase適用于比較成熟的數據分析主題,查詢模式已經確立,并且不會輕易改變,傳統的關系型數據庫已經無法承受負荷,高速插入和大量的讀取。適合海量的同時也是簡單的查詢操作,比如keyvalue形式。

Family數量選擇:如果是離線應用,寫操作比較多,那么盡量使用一個family,因為當一個family達到flush條件的時候,該region會出發所有family所屬的memstore進行flush,即使其他memstore數據很少也會flush而聲稱小文件,容易增加compaction發生的幾率,而compaction是一region為單位的,很容易導致降低系統的整體吞吐率。但是如果使在線應用則可以根據實際情況多設置family,每次讀取數據不用加載多有family,io更少,并且多個family導致數據被分配到多個hfile中,減少了split發生的幾率,會讓系統提供更加穩定的在線服務。

6、Spark各個進程以及作用

Master進程:管理整個集群資源,Yarn中為ResouceManager

Worker進程:負責管理本節點的資源,定期向Master匯報心跳,接收Master的命令,啟動Executor。Yarn中為NodeManager

client:客戶端進程,負責提交作業到Master。在yarn-cluster模式中,在Resource Manager端提交應用程序,會生成SparkSubmit進程,該進程只用來做Client端,應用程序提交給集群后,就會刪除該進程。

Application:基于spark的用戶程序,包含了driver程序和集群上的executor

Driver:一個Spark作業運行時包括一個Driver進程,也是作業的主進程,負責作業代碼的解析、生成Stage并調度Task到Executor上。包括DAGScheduler,TaskScheduler。在yarn-cluster模式中,resourcemanager會選取一個nonemanager上運行applicationManager,該AM會同時運行著Driver。

ClusterManager:在集群上獲取資源的外部服務(如standalone、yarn)

Executor:在worker上為某個應用啟動的一個進程,負責接收taskSet,運行任務,以及將數據存儲到內存或者是磁盤上,每個應用都有自己獨立的executors。

Task:被送到某個executor上的工作節點

Job:和spark的action對應,包含很多任務的并行計算

Stage:一個job被拆分為多組任務,每組任務被稱為stage

DAGScheduler:基于stage構建DAG,決定每個任務的最佳位置;記錄哪個RDD或者stage需要物化;將taskset(一組task)傳給底層調度起TaskScheduler;重新提交shuffle輸出丟失的stage

TaskScheduler:提交taskset到集群運行并匯報結果;出現shuffle輸出lost要報告fetch

sparkContext:整個應用的上下文,控制應用的生命周期

SparkConf:負責存儲配置信息

failed錯誤;碰到straggle任務需要放到別的節點上重試;為每一個taskset維護一個taskSetmanager(追蹤本地性及錯誤信息)

7、Flume進程以及作用

Agent:是一個java進程,運行在日志收集節點,包括sorce、channle、sink組件

Source:用于收集日志,可以處理各種格式的日志數據,包括:avro/thrigt/exec/jms/spooling/directory/netcat/sequence

generator/syslog/http/legacy/自定義,收集之后存放在channel中

Channel:用于臨時存儲數據,可以放在memory/jdbc/file/自定義中,channel中的數據只有sink發送成功之后才會被刪除

Sink:用于將數據發送到目的地,目的地包括hdfs/logger/avro/thrigt/ipc/file/null/hbase/solr/自定義

在整個數據傳輸過程中流動的是event,事務保證是在event級別。

8、Hbase進程以及作用

Client:包含訪問hbase的接口并維護cache來加快對hbase的訪問

Zookeeper:保證Master的唯一性,存儲Region的尋址入口,實時監控RegionServer的上線和下線信息,并實時通知Master、存儲Hbase的schema和table的元數據

HMaster:為RegionServer分配region、負責RegionServer的負載均衡、發現實效的RegionServer并重新分配其上的region、管理永輝對table的增刪改查。

HRegionServer:維護region并處理對這些region的IO請求,負責切分在運行過程中變大的region。

9、kafka進程機器作用

Producer:生產者

Consumer:消費者

Broker:kafka集群的server,負責處理消息讀寫請求,存儲消息

Topic:消息隊列、分類

Queue:里邊有生產者消費者模型

10、spark中client和cluster的區別和作用

(1)client

Driver運行在客戶端(啟動在本地機器上)。

這里Driver會負責所有任務的調度,頻繁與集群上的多個executor通信(task啟動消息、執行統計消息、運行狀態、shuffle輸出結果等),頻繁大量的通信(一般情況本地機器與集群不在一個機房),會導致本地通信負載高。但是所有的日志都會在本地機器上看到,適合做測試時候使用。

Spark-Standlone-Client

客戶端啟動后直接運行程序啟動Driver相關工作:DAGScheduler和BlockManagerMaster等。客戶端的Driver向Master注冊。Master會讓Worker啟動Executor,Worker創建一個ExecutorRunner線程,executorRunner會啟動ExecutorBackend進程。ExecutorBackend啟動后向Driver的ExecutorBackend注冊,Driver的DAGScheduler解析作業并生成相應的Stage,每個Stage包含的task通過taskScheduler分配給executor執行。最后所有的stage執行完之后作業結束

Spark-Yarn-Client

本地機器提交Application到ResourceManager,會直接在本地機器啟動Driver程序,RM在資源充足的一臺NodeManager啟動ApplicationMaster,之后AM向RM申請executor,RM根據各個節點的資源情況分配container,并告知AM,各個NodeManager啟動executor,啟動之后各個NodeManager向Driver反向注冊,這時候Driver就知道自己有哪些資源可以使用了,然后就可以執行job、拆分stage等的計算任務了。

感覺ApplicationMaster除了申請executor沒有其他作用了。

(2)cluster

Driver執行在任務節點(在其中一臺NodeManager,和ApplicationMaster運行在一起)

Spark-Standlone-Cluster

作業提交給Master,Master讓一個worker啟動Driver(SchedulerBackend),創建一個DriverRunner線程,啟動SchedulerBackend進程。Master會讓其他worker啟動Executor(ExecutorBackend)創建一個ExecutorRunner線程,啟動ExecutorBackend進程。ExecutorBackend啟動之后向Driver的SchedulerBackend注冊,SchedulerBackend進程中包含DAGScheduler,它會根據用戶程序生成執行計劃并調度執行。對每個stage的task都會存放到taskScheduler中,當executorScheduler向SchedulerBackend匯報的時候吧taskScheduler中的task調度到executorBackend執行。最后所有的stage運行完之后作業結束。

Spark-Yarn-Cluster

本地機器提交Application到ResourceManager,RM在資源充足的一臺NodeManager啟動ApplicationMaster,Driver與其一同啟動,之后向RM申請executor,RM根據各個節點的資源情況分配container,并告知AM,ApplicationManager向各個NodeManager啟動executor,啟動之后各個NodeManager向AM反向注冊,這時候ApplicationManager(Driver)就知道自己有哪些資源可以使用了,然后就可以執行job、拆分stage等的計算任務了。

(3)注意點

Standlone模式下,application的注冊(executor的申請)以及任務調度都是由driver來的。

spark on yarn模式下,application的注冊(executor的申請)由AM進行,任務調度由Driver,是分離開來的

11、HDFS讀寫流程

(1)HDFS讀流程:

第一步:客戶端通過Distributed file system的api的open方法;

第二步:open方法發送請求到namenode,獲得Block的位置信息(位置信息只有元數據才知道),將block的全部位置信息返還給客戶端;

第三步:客戶端收到block位置后開始讀取,通過FSDataInputStream著api中的read方法讀取;

第四步:通過FSDataInputStream著api進行并發的讀取各個block,也就是一起讀,在讀的過程中只讀其中的一個副本就可以類,優先讀取離同一個機架;

第五步:關閉,并在客戶端形成一個統一的文件。

(2)HDFS寫流程

第一步:客戶端通過調用Distributed File System的api的create方法可以取創建一個文件;

第二步:Nameode可以接受到你的文件名是什么,文件大小用戶是誰,namenode確定block的數量以及需要存放的datenode;

第三步:客戶端開始讀數據,通過FSDataInputStream的write方法進行寫;

第四步:著方法只將一個block寫到databode上,由當前的datanode去創建一個線程,往其他的datanode上按照當前的副本規則取復制其他副本;

第五步:返回一個回饋信息,表示上傳完成

第六步:關閉,并匯報給namenode一個上傳完畢的信息

12、spark on yarn和mapreduce on?yarn區別

(1)mapreduce使用多進程來運行多個獨立task,方便細粒度空值每個任務占用的資源,但會消耗更多啟動時間,不適合運行低延遲類型作業;spark使用多個executor進程,每個中用多個task線程運行,適合低延遲類型作業。

(2)spark有利于內存共享,所有任務運行在一個進程中,適合內存密集型任務(如需要加載大量詞典的應用程序),executor申請的資源可被多批任務重復使用。Mapreduce每個task單獨申請資源用完后釋放,2.0沒有支持jvm重用功能。

(3)spark會導致嚴重的資源爭用,難以細粒度控制每個任務的資源量,而mapreduce控制資源占用量有利于大作業平穩運行。

(4)mapreduce:每個task運行在一個獨立jvm進程中;支持內存、cpu兩種資源的調配;task運行完就釋放資源

(5)spark:每個節點運行一個或多個executor服務,每個executor配有一定數量的slot,表示該executor可以同時運行多少個shufflemaptask或者reduceTask。每個executor運行在一個jvm進程中,每個task是運行在executor中的一個子進程;同一個executor內部的task共享內存(比如廣播變量),executor一旦啟動將一直運行,資源一直被task復用,知道spark程序運行完成才釋放退出。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容