1. 程式人生 > >DataNode與Namenode的互動

DataNode與Namenode的互動

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

(1)登記,dataNode一經啟動就應該主動與namenode 建立rpc連線,並向其登記,讓Namenode知道有這麼一個DataNode已經在位了。

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

(3)NameNode發回響應訊息,由DataNode執行NameNode搭載在響應資訊裡的命令和要求。

心跳機制

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

     master啟動的時候,會開一個 rpc server那裡,等待slave心跳。slave啟動時,會連線master,並每隔3秒鐘主動向master傳送一個"心跳",這個時間可以通過"hearbeat.recheck.interval"屬性來設定,將自己的狀態資訊告訴master,然後master也是通過這個心跳的返回值,向slave節點傳達指令。

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

(一)DataNode與NameNode之間的心跳

            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機制的要求:從程式程式碼上看,過程的呼叫者就好像在呼叫本地函式一樣,但是被呼叫過程的程式碼實際上在別的機器上,被呼叫的過程是在別的機器上執行,然後返回執行的結果,對呼叫者而言就像從本地的函式呼叫返回一樣,在這個過程中,呼叫者(執行緒)發動呼叫之後,就會進入睡眠,直至呼叫返回時才被喚醒。