日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

datanode无法启动_Hadoop DataNode启动和初始化过程

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 datanode无法启动_Hadoop DataNode启动和初始化过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

我們先看DataNode的doc文檔的介紹,DataNode是一個類,用于存儲一組塊,用于DFS部署。單個部署可以有一個或多個DataNode。每個DataNode通信定期與單個NameNode進行通信。它還可以與客戶端和其他的DataNodes通信。

DataNode存儲一系列命名的塊。DataNode允許客戶端代碼讀取這些塊,或者寫新的塊數據。DataNode也可以響應于以下指令從其NameNode中刪除區塊或將區塊復制到/從其他的DataNodes。

DataNodes的一生都在無休止的循環中度過,詢問NameNode需要做哪些事情。NameNode不能直接連接到DataNode;NameNode只是從DataNode調用的函數中返回值。

DataNodes維護一個開放的 server socket,以便客戶端代碼 ?或其他數據節點可以讀/寫數據。讀取/寫入數據的主機/端口為匯報給NameNode,然后將該服務器的向客戶或其他可能感興趣的數據節點提供信息。

概括如下:1. 一個集群里面可以有好很多個datanode ,這些datanode就是用來存儲數據的。2. datanode啟動了以后會周期性的與namenode進行通信(心跳 、 回報塊)。3. namenode不能直接操作datanode , 而是通信心跳返回指令的方式去操作datanode。4. datanode啟動了以后會開放一個socket發服務(RPC),等待調用。

源碼解析

啟動datanode,主要是要完成3件事:

1、如何完成存儲。

2、如何與namenode進行通信,這個通過IPC 心跳連接實現。此外還有和客戶端 其它datanode之間的信息交換。

3、完成和客戶端還有其它節點的大規模通信,這個需要直接通過socket 協議實現。

本方法干兩件事:

1、打印datanode啟動日志,一些基本信息日志(域名、參數、版本、jdk環境等)

2、創建datanode

3、線程掛起

createDataNode方法主要兩件事:1、實例化一個DataNode2、運行datanode的守護線程

instantiateDataNode方法的作用

1、拿到數據存儲路徑(dfs.datanode.data.dir)

2、使用三個參數(數據存儲路徑、配置文件、SecureResources)去實例化Datanode

makeInstance方法主要的作用:

1、獲取客戶端校驗類。

2、拿到存儲數據目錄的權限。3、傳入磁盤檢測對象進行磁盤檢測,并返回可用的目錄列表。4、創建datanode對象。

checkStorageLocations方法主要是利用磁盤檢測對象進行磁盤目錄的檢測 , 返回可用磁盤目錄列表

1、聲明一個集合,用來存儲可用目錄列表

2、遍歷數據目錄,注意這里就是串行的方式

3、利用磁盤檢測對象進行磁盤目錄的檢測:校驗目錄的讀寫執行權限 ,如果目錄不存在,則創建目錄并給予700權限

4、檢測完畢沒有拋出異常,則說明目錄可用,加入到可用列表

5、如果出現IO異常,說明此磁盤目錄不可用,加入到目錄中

6、如果可用目錄數量為0,表明所有的目錄都不可用

7、最終,返回可用的磁盤目錄列表

初始化方法,這個構造方法主要做了這幾件事:

1、根據configuration,初始化一些成員變量

2、給出一個配置、一個dataDirs數組和一個Namenode代理,創建DataNode。

3、啟動datanode

startDataNode方法啟動datanode,這個方法很重要。

?startDataNode是最關鍵的方法,非常非常重要

1、實例化管理磁盤目錄的DataStorage

2、啟動http和RPC

3、datanode向namenode注冊和心跳

4、通過心跳匯報塊

dfs.datanode.max.locked.memory: DataNode在內存中緩存副本塊的最大內存數默認參數是0,表示不緩存副本塊到內存;而且本地庫還需要支持,如果不支持,也無法使用

DataNode最重要的功能就是管理磁盤上存儲的數據塊。DataNode將這個管理功能切分為2個部分:
1.?DataStorage:管理與組織磁盤存儲目錄,如current,previous,detach,tmp等,在Data Node數據目錄,你可以看到一些current tmp,rbw或者finalized文件夾 2. FsDatasetImpl:管理組織數據塊和元數據文件

DataXceiverServer是數據節點DataNode上一個用于接收數據讀寫請求的后臺工作線程,為每個數據讀寫請求創建一個單獨的線程去處理,DataNode#runDatanodeDaemon()中啟動,后面再詳細分析這個。

1. 創建構造DataXceiverServer需要的TcpPeerServer實例tcpPeerServer,它內部封裝了ServerSocket,是DataXceiverServer功能實現的最主要依托;2. 從tcpPeerServer中獲取Socket地址InetSocketAddress,賦值給DataNode成員變量streamingAddr3. 然后構造DataXceiverServer實例xserver,傳入tcpPeerServer;4. 構造dataXceiverServer守護線程,并將xserver加入之前創建的線程組threadGroup;5. 將線程組里的所有線程設置為設置為守護線程,方便虛擬機退出時自動銷毀。

initIpcServer初始化IpcServer(RPC通信),DataNode#runDatanodeDaemon()中啟動。用來啟動datanode上的rpc服務,主要包括兩個服務:ClientDatanodeProtocolPB和InterDatanodeProtocolPB。

BlockPoolManager抽象了datanode提供的數據塊存儲服務,每個DataNode上都有一個BlockPoolManager實例

總結

這篇主要是DadaNode的啟動和初始化的過程,可以看到還是比較復雜的,這篇文章只是寫了一些大概的流程,一些細節還需要慢慢的去了解,每天學習一點點,持續行動,日拱一卒無有盡,功不唐捐終入海。

總結

以上是生活随笔為你收集整理的datanode无法启动_Hadoop DataNode启动和初始化过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。