HDFS機架感知

来源:https://www.cnblogs.com/dawn-lewis/archive/2022/03/26/16058800.html
-Advertisement-
Play Games

通常大型 Hadoop 集群是以機架的形式來組織的,同一個機架上的不同節點間的網路狀況比不同機架之間的更為理想,NameNode 設法將數據塊副本保存在不同的機架上以提高容錯性。 ...


Hadoop版本:2.9.2

什麼是機架感知

通常大型 Hadoop 集群是以機架的形式來組織的,同一個機架上的不同節點間的網路狀況比不同機架之間的更為理想,NameNode 設法將數據塊副本保存在不同的機架上以提高容錯性。

HDFS 不能夠自動判斷集群中各個 DataNode 的網路狀況情況,Hadoop 允許集群的管理員通過配置 net.topology.script.file.name 參數來確定節點所處的機架,配置文件提供了 ip 到 rackid 的翻譯。NameNode 通過這個配置知道集群中各個 DataNode 機器的 rackid。如果 net.topology.script.file.name 沒有設定,則每個 ip 都會被翻譯成 /default-rack。機器感知如下圖所示:

image-20220108190458452

圖中的 D 和 R 是交換機,H 是 DataNode,則 H1 的 rackid = /D1/R1/H1,有了 rackid 信息(這些 rackid 信息可以通過 net.topology.script.file.name 配置)就可以計算出任意兩台 DataNode 之間的距離。

  • distance(/D1/R1/H1 , /D1/R1/H1) = 0 相同的 DataNode
  • distance(/D1/R1/H1 , /D1/R1/H2) = 2 同 rack 下的不同 DataNode
  • distance(/D1/R1/H1 , /D1/R2/H4) = 4 同 IDC 下的不同 DataNode
  • distance(/D1/R1/H1 , /D2/R3/H7) = 6 不同 IDC 下的 DataNode

說明:

  1. 當沒有配置機架信息時,所有的機器 Hadoop 都在同一個預設的機架下,名為 "/defult-rack",這種情況的任何一臺 DataNode 機器,bug物理上是否屬於同一個機架,都會被認為是在同一個機架下。
  2. 一旦配置 net.topology.script.file.name,就按照網路拓撲結構來尋找 DataNode:net.topology.script.file.name 這個配置選項的 value 指定為一個可執行程式,通常為一個腳本。

Hadoop機架感知的作用

不開啟機架感知的缺點

預設情況下,hadoop 的機架感知是沒有被啟用的。所以,在通常情況下,hadoop 集群的 HDFS 在選機器的時候,是隨機選擇的。
也就是說,如果實際節點不完全在相同的機架,但是又沒有配置機架感知很有可能在寫數據時:

hadoop 將第一塊數據 block1 寫到了 rack1 上,然後隨機的選擇下將 block2 寫入到了 rack2 下,此時兩個 rack 之間產生了數據傳輸的流量,再接下來,在隨機的情況下,又將 block3 重新又寫回了 rack1,此時,兩個 rack 之間又產生了一次數據流量。在 job 處理的數據量非常的大,或者往 hadoop 推送的數據量非常大的時候,這種情況會造成 rack 之間的網路流量成倍的上升,成為性能的瓶頸,進而影響作業的性能以至於整個集群的服務。

開啟機架感知的優勢

不同節點之間的通信能夠儘量發生在同一個機架之內,而不是跨機架;

為了提高容錯能力,DataNode 會儘可能把數據塊的副本放到多個機架上。

機架感知的配置

檢查當前集群機架配置情況

執行hdfs dfsadmin -printTopology列印當前機架信息,可以看到預設所有節點都是一個機架 default-rack,此時沒有配置機架感知。

hdfs dfsadmin -printTopology

image-20220326095700480

自定義機器機架位置

新建機架配置文件topology.data

vim $HADOOP_HOME/topology.data

由於官方配置文件沒有確切的說明到底是主機名還是 ip 地址會被傳入到腳本,所以在腳本中最好相容主機名和 ip 地址。

192.168.166.121   hadoop1       /switch1/rack1
192.168.166.122   hadoop2       /switch1/rack1
192.168.166.123   hadoop3       /switch1/rack2

自定義機架感知腳本

在Hadoop的安裝目錄下新建腳本topology.sh

vim $HADOOP_HOME/topology.sh

編寫腳本內容

#!/bin/bash
# 此處是你的機架配置文件topology.sh所在目錄
HADOOP_CONF=/opt/servers/hadoop
while [ $# -gt 0 ] ;
do
        #腳本第一個參數節點ip或者主機名稱賦值給nodeArg
        nodeArg=$1
        #以只讀的方式打開機架配置文件
        exec<${HADOOP_CONF}/topology.data
        #聲明返回值臨時變數
        result=""
        #開始逐行讀取
        while read line
        do
                #賦值行內容給ar,通過這種 變數=( 值 )的方式賦值,下麵可以通過數組的方式取出每個詞
                ar=( $line )
                #判斷輸入的主機名或者ip是否和該行匹配
                if [ "${ar[0]}" = "$nodeArg" ]||[ "${ar[1]}" = "$nodeArg" ]
                then
                        #將機架信息賦值給result
                        result="${ar[2]}"
                fi
        done
        shift
        #-z判斷字元串長度是否為0,不為0輸出實際機架,為0返回預設機架信息
        if [ -z "$result" ]
        then
                echo -n "/default-rack"
        else
                echo -n "$result"
        fi
done

配置core-site.xml文件機架感知

腳本必須添加可執行許可權

chmod 777 topology.sh

修改 core-site.xml 文件。

<!-- 配置機架感知配置腳本  -->
<property>
    <name>net.topology.script.file.name</name>
    <!-- 註意這裡是你腳本的實際位置 -->
    <value>/opt/servers/hadoop/topology.sh</value>
</property>

分發配置文件和腳本

rsync-script etc/hadoop/core-site.xml

rsync-script topology.*

驗證機架感知配置

重啟集群,執行 hdfs dfsadmin -printTopology 印表機架信息,可以看到集群已經按照配置感應到節點機架位置。

hdfs dfsadmin -printTopology

image-20220326100557197

測試上傳文件,因為只搭建了三個節點,因此設置副本數為2,查看兩個副本是否存在不同的機架rack1和rack2上的節點。

在 hadoop2.8 版本之前的版本上述的結論可能不同,主要跟 Hadoop 的副本策略有關,詳細的副本策略請看 https://weixiaodyanlei.xyz/archives/hdfs-fu-ben-ji-zhi

hdfs dfs -D dfs.replication=2 -put LICENSE.txt /

可以通過如下命令查看 HDFS 中的文件所在機架

hdfs fsck /LICENSE.txt -blocks -files -locations -racks

image-20220326104255237

參考博客:https://blog.csdn.net/qq_31454379/article/details/105497503


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 線性數據結構 線性結構是一個有序數據元素的集合。 常用的線性結構 線性表,棧,隊列,雙隊列,串(一維數組)。 非線性數據結構 關於廣義表、數組(高維),是一種非線性的數據結構。 常見的非線性結構有:二維數組,多維數組,廣義表,樹(二叉樹等),圖 線性表(線性存儲結構) 將具有“一對一”關係的數據“線 ...
  • 在 M1 Mac 上開始使用 .NET MAUI 開發 (iOS) 的最簡單方法。 .NET 多平臺應用程式 UI (.NET MAUI) 是一個跨平臺框架,用於使用 C# 和 XAML 創建本機移動和桌面應用程式,這些應用程式可以從單個共用代碼庫在 Android、iOS、macOS 和 Wind ...
  • 一 SECS-II 概述 SECS-II 標准定義了使用如SECS-I、HSMS等傳輸協議在設備和主機之間交換的消息的形式和含義。 定義了以消息的形式在設備和主機之間傳遞信息,消息按其行為分類,稱為Stream。有很多不同的行為Stream,每個Stream又包括具體的消息,稱為Function。 ...
  • CSV(Comma Separated Values)文件是一種純文本文件,包含用逗號分隔的數據,常用於將數據從一個應用程式導入或導出到另一個應用程式。通過將CSV文件轉為EXCEL,可執行更多關於數據編輯、格式設置等操作。下麵,將通過C#及VB.NET代碼展示如何來實現轉換。 一、程式環境 可通過 ...
  • 不管我們開發是基於Asp.net core 還是.net core,或者還是.net framework的相關應用,如果有一個比較全面的公用類庫以及相關的擴展函數來支撐,我們開發項目上會節省很多相關的處理方法查詢和封裝。本篇隨筆主要針對性的介紹基於一些對象進行擴展函數的封裝帶來的便利性進行說明,畢竟... ...
  • 為了保證用戶輸入系統的數據是有效的,同時也是為了避免程式出現不可預期的問題,保證應用程式能夠安全的運行,所以對輸入的數據進行驗證是非常有必要的。 剛開始學代碼的時候,我是這樣進行數據校驗的 看上去是不是很醜陋...,表單數據多的時候往往能寫上幾百上千行的if判斷語句。並且每個需要保存更新數據的地方都 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是IAR環境下無法直接下載調試i.MXRT分散鏈接工程的解決方案。 分散鏈接與載入一直是嵌入式領域比較勸退新手的難題,在恩智浦 i.MXRT 系列為代表的多存儲器架構的 MCU 上,分散鏈接問題體現得尤為明顯,畢竟你在鏈接應用程式各種段( ...
  • 安裝SSH ubuntu 啟動 查看ssh運行狀態 關閉防火牆 開機自動啟動ssh命令 關閉ssh開機自動啟動命令 單次開啟ssh 單次關閉ssh 設置好後重啟系統 查看ssh是否啟動,看到Active: active (running)即表示成功 設置允許使用root用戶登錄 1、切換到 root ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...