DataNode與Namenode的互動

DataNode與NameNode之間基本的通訊就是rpcnode

(1)登記,dataNode一經啓動就應該主動與namenode 創建rpc鏈接,並向其登記,讓Namenode知道有這麼一個DataNode已經在位了。函數

(2)向NameNode發送心跳信號並在這上面搭載各類報告,一來讓它知道這個DataNode繼續存在,二來讓它知道這個DataNode上的存儲發生了一些什麼變化,特別是節點上有哪些數據塊的副本,以及還有多少資源可供使用,這也老是由DataNode主動發起的。oop

(3)NameNode發回響應消息,由DataNode執行NameNode搭載在響應信息裏的命令和要求。線程

心跳機制server

    Hadoop集羣是master/slave模式,master包括NameNode和ResourceManager,slave包括DataNode和NodeManager。hadoop

     master啓動的時候,會開一個 rpc server那裏,等待slave心跳。slave啓動時,會鏈接master,並每隔3秒鐘主動向master發送一個"心跳",這個時間能夠經過"hearbeat.recheck.interval"屬性來設置,將本身的狀態信息告訴master,而後master也是經過這個心跳的返回值,向slave節點傳達指令。資源

    須要指出的是,namenode與datanode之間的通訊,ResourceManager與NodeManager之間的通訊,都是經過"心跳"完成的。rpc

(一)DataNode與NameNode之間的心跳ast

            DataNode上對於每一個NameNode都有個BPServiceActor線程,這個線程會按期向其NameNode發送心跳報告。集羣

             在NameNode端,DataNode這一邊的BPServiceActor線程經過BP和Rpc機制將心跳報文發送到NameNode這一邊,而後就睡眠等待Namenode發回響應報文。

              在NameNode端,NameNode這一邊由NameNodeRpcServer負責接收和處理來自各個DataNode的心跳和報告作出反應,因此NameNode上的pb層接收到來自DataNode的心跳報文之後會調用NameNodeRpcserver的sendHearbeat()方法。

               DataNode這一邊sendHearbeat,NameNode這一邊receiveHearbeat,可是因爲rpc要求兩邊的函數名相同,因此Namenode這一邊也是sendHearbeat。但事實上,Namenode不會發送心跳信號。

hadoop通訊機制:

hadoop的通訊機制就是rpc

    rpc是「Remote Peocedure Call」即"遠地址過程調用"的縮寫,這個機制的目的,是讓一臺機器上的程序像調用本地的"過程"那樣來調用別的機器上的某些過程。

    對rpc機制的要求:從程序代碼上看,過程的調用者就好像在調用本地函數同樣,可是被調用過程的代碼實際上在別的機器上,被調用的過程是在別的機器上執行,而後返回執行的結果,對調用者而言就像從本地的函數調用返回同樣,在這個過程當中,調用者(線程)發動調用以後,就會進入睡眠,直至調用返回時才被喚醒。

相關文章
相關標籤/搜索