HDFS的DataNode原始碼分析

2021-10-01 18:50:15 字數 2115 閱讀 6863

1.大致流程

datanode.main() // 入口函式

|——securemain(args, null); 

|——createdatanode(args, null, resources); // 建立datanode

|——instantiatedatanode(args, conf, resources);

|——getstoragelocations(conf); // 根據配置拿到hdfs的block實際儲存的本地路徑,即hdfs-site.xml檔案中的dfs.datanode.data.dir屬性

|——usergroupinformation.setconfiguration(conf); // 設定配置

|——makeinstance(datalocations, conf, resources); // 例項化datanode

|——dn.rundatanodedaemon(); // 執行datanode的後台守護執行緒

|——datanode.join(); // 將此datanode放入乙個執行緒等待池

2.詳解makeinstance(datalocations, conf, resources)方法

1. listlocations =  checkstoragelocations(datadirs, localfs, datanodediskchecker);

許可權檢查,拿到可用儲存路徑

2.new datanode(conf, locations, resources);

先給成員變數進行一系列賦值

gethostname(conf); // 獲取datanode所在機器的主機名

startdatanode(conf, datadirs, resources); // 啟動datanode

|——new datastorage(); // 管理磁碟目錄、

|——registermxbean(); // 註冊乙個datanode的bean

|——initdataxceiver(conf); // 重點方法

|——startinfoserver(conf);  // 啟動datanode的http服務,不對外提供服務

|——pausemonitor.start();  // 構造乙個jvmpausemonitor,然後初始化,再啟動,檢查jvm是否停頓

|——initipcserver(conf); // 初始化rpc服務

|——blockpoolmanager.refreshnamenodes(conf);  // 主要是向namenode註冊,匯報心跳、磁碟塊、記憶體塊等資訊

3.重點方法initdataxceiver(conf)

new tcppeerserver(secureresources);  // 提供serversocket的功能

new dataxceiverserver(tcppeerserver, conf, this);

|——利用建立好的tcppeerserver建立dataxceiverserver

|——this.maxxceivercount = 

conf.getint(dfsconfigkeys.dfs_datanode_max_receiver_threads_key,

dfsconfigkeys.dfs_datanode_max_receiver_threads_default);

表示datanode上負責進行檔案操作的執行緒數,預設4096

|——this.estimateblocksize = conf.getlongbytes(dfsconfigkeys.dfs_block_size_key,

dfsconfigkeys.dfs_block_size_default); // block的大小,預設128m

|——new blockbalancethrottler();  // 構建乙個平衡節流器

兩個引數:第乙個引數bandwidth:每個datanode用來移動資料時,占用頻寬的上限,預設10m

第二個引數maxthreads:每台datanode的並行拷貝數,預設50

hdfs中datanode和namenode的坑

在聊心酸史之前,先鋪墊一下問題的由來 本來就是簡單的使用簡單操作檔案到hdfs中,同樣的 別的同學都好使,而我的不行,如下 謹記 c windows system32 drivers etc hosts做ip對映,否則連線不上 from hdfs.client import client 關於pyt...

HDFS中DataNode工作機制

1 datanode工作機制 1 乙個資料塊在 datanode 上以檔案形式儲存在磁碟上,包括兩個檔案,乙個是資料本身,乙個是元資料報括資料塊的長度 塊資料的校驗和以及時間戳。2 datanode 啟動後向 namenode 註冊,通過後,週期性 1小時 的向 namenode 上報所有的塊資訊。...

HDFS中DataNode工作機制

1.datanode工作機制 1 乙個資料塊在datanode上以檔案形式儲存在磁碟上,包括兩個檔案,乙個是資料本身,乙個是元資料 包括資料塊的長度,塊資料的校驗和,以及時間戳 2 datanode啟動後向namenode註冊,通過後,週期性 1小時 的向namenode上報所有的塊資訊。3 心跳是...