<samp id="tgzrj"><video id="tgzrj"><nav id="tgzrj"></nav></video></samp>

    <samp id="tgzrj"></samp>
    <legend id="tgzrj"><font id="tgzrj"><tr id="tgzrj"></tr></font></legend>

      天天關(guān)注:解密HDFS如何判斷磁盤(pán)存儲大小,存儲動(dòng)態(tài)負載均衡的?

      來(lái)源:滌生大數據時(shí)間:2023-04-26 14:29:51
      1. HDFS對底層的磁盤(pán)存儲如何選擇的?

      一個(gè)HDFS集群,會(huì )有很多個(gè)datanode節點(diǎn),每個(gè)datanode節點(diǎn)會(huì )掛載很多塊磁盤(pán)。HDFS在存儲數據時(shí)如何動(dòng)態(tài)負載均衡最優(yōu)化地往每個(gè)datanode,每個(gè)磁盤(pán)上存儲數據呢?

      其實(shí)沒(méi)啥,DataNode在運行過(guò)程中,為了計算DN的capacity使用量,實(shí)現數據存儲的動(dòng)態(tài)均衡,DN會(huì )對已配置的數據存儲路徑(dfs.datanode.data.dir)進(jìn)行du -sk操作,以此獲得capacity使用量匯報給NN中,然后NN就知道哪些DN有空間能被寫(xiě)數據進(jìn)去,哪些是空間不足的。

      為了保證數據使用量的近實(shí)時(shí)性,目前DN是以默認10分鐘的間隔時(shí)間執行一次。假設按照一個(gè)DN節點(diǎn)12個(gè)數據目錄對應12塊盤(pán)的情況,就會(huì )有12個(gè)du操作在每個(gè)10分鐘內都會(huì )執行一次。在datanode存儲的數據使用率比較高的時(shí)候,會(huì )十分消耗性能。直接引發(fā)阻塞io,系統load直線(xiàn)增高。


      (資料圖片)

      這種問(wèn)題在大規模的集群中是很常見(jiàn)的,下面是針對線(xiàn)上(hadoop2.6版本的)簡(jiǎn)易零時(shí)的優(yōu)化手段。說(shuō)明:此問(wèn)題僅存在于低于hadoop2.8版本,高于此版本已經(jīng)修復。

      https://issues.apache.org/jira/browse/HADOOP-9884

      如果碰到這種情況,升級不了集群版本,那么我們還有其他奇技淫巧嗎?

      2.通過(guò)修改HDFS代碼實(shí)現優(yōu)化先回顧一下du,df的使用

      du原理簡(jiǎn)述:

      du命令全程disk usage,它的統計原理在于將目標路徑下的當前沒(méi)有被刪除的文件進(jìn)行大小累加,然后得出總使用量。這種計算方式在文件數量少時(shí)往往不會(huì )表現出什么問(wèn)題。但是當目標路徑目錄多,文件多的時(shí)候,du會(huì )表現出明顯的時(shí)間執行耗時(shí)。

      df 原理簡(jiǎn)述:

      df命令統計值通過(guò)文件系統獲取的。df命令的弊端是它不能按照具體目錄進(jìn)行使用量的統計。df是按照所在磁盤(pán)級別進(jìn)行統計的。換句話(huà)說(shuō),用df命令在屬于同一塊物理盤(pán)的子路徑下執行df命令,獲取的值會(huì )是完全一致的。比較遺憾,這種情況將無(wú)法支持DataNode多block pool共用一塊盤(pán)的情況。

      處理方式:使用 df 命令替換 du

      捕獲到datanode執行過(guò)程中調用的 du -sk 命令,替換為df -k 。

      實(shí)現腳本如下:

      ##將原始的 du指令更換名稱(chēng)

      mv /usr/bin/du /usr/bin/du_bak
      vim /usr/bin/du
      #!/bin/shif [[ $2 == */current/BP-* ]] && [ $1 == -sk ]then    used=`df -k $2 | grep -vE "Used" | awk "{print $3}"`    echo -e "$used\t$2"else    echo -e "$(du_bak $@)"fi

      chmod +x /usr/bin/du

      3.批量部署的執行環(huán)境

      跳板機(10.90.72.195)已經(jīng)部署好ansible環(huán)境,配置主機名,執行ansible-playbook腳本即可。

      執行路徑:/home/tool/updata_datanodes_du需要修改的配置文件:/home/tool/updata_datanodes_du/datanodes執行腳本:./run.sh

      updata_du.yml

      ---- hosts: all_datanodesremote_user: rootgather_facts: F # 跳過(guò)gather_facts環(huán)節serial: 70 #開(kāi)啟的并發(fā)數tasks:- name: "檢查主機du是否已經(jīng)被部署過(guò)"stat:path: "/usr/bin/du_bak"register: file_stat- name: "同步du腳本文件到目標主機"copy: # 使用復制模塊,進(jìn)行文件分發(fā),從本地主機分發(fā)到遠程主機src: "{{ item.src }}" # 源文件,變量定義多個(gè)源文件dest: "/tmp/" # 文件復制到目標主機的目錄owner: rootgroup: rootmode: 0777with_items: # 本地源文件列表- { src: "/home/tool/updata_datanodes_du/scp_files/du" }when: not file_stat.stat.exists- name: "檢查du文件是否同步成功"stat:path: "/tmp/du"register: tmp_du_stat- name: "備份du文件"command: mv /usr/bin/du /usr/bin/du_bakwhen: tmp_du_stat.stat.exists- name: "更新為新的du腳本文件"command: mv /tmp/du /usr/bin/duwhen: tmp_du_stat.stat.exists

      標簽:

      責任編輯:FD31
      上一篇:一年之計在于春一日之計在于晨寸金難買(mǎi)寸光陰的意思_一年之計在于春后幾句的意思
      下一篇:每日消息!計算機中所有的信息都是以二進(jìn)制形式存放的為什么_計算機中的所有信息都是以二進(jìn)制方式表示的主要理由是

      精彩圖集(熱圖)

      熱點(diǎn)圖集

      最近更新

      信用中國

      • 信用信息
      • 行政許可和行政處罰
      • 網(wǎng)站文章

      久爱免费观看在线精品_亚洲综合一区二区三区_最新国产国模无码视频在线_中文字幕无码精品亚洲资源网久久

      <samp id="tgzrj"><video id="tgzrj"><nav id="tgzrj"></nav></video></samp>

      <samp id="tgzrj"></samp>
      <legend id="tgzrj"><font id="tgzrj"><tr id="tgzrj"></tr></font></legend>