chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

企業(yè)級(jí)HDFS高可用與YARN資源調(diào)度方案

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2025-09-08 17:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大數(shù)據(jù)平臺(tái)運(yùn)維實(shí)戰(zhàn):從零構(gòu)建企業(yè)級(jí) HDFS 高可用與 YARN 資源調(diào)度體系

引言:為什么你的大數(shù)據(jù)平臺(tái)總是在關(guān)鍵時(shí)刻掉鏈子?

凌晨3點(diǎn),你被電話驚醒。值班同事焦急地說(shuō):"HDFS NameNode 掛了,整個(gè)數(shù)據(jù)平臺(tái)癱瘓,業(yè)務(wù)方的實(shí)時(shí)報(bào)表全部中斷!"你匆忙打開(kāi)電腦,看著滿屏的告警信息,心里暗想:如果當(dāng)初做好了高可用配置,現(xiàn)在就不會(huì)這么被動(dòng)了。

這樣的場(chǎng)景,是不是很熟悉?

作為一名在大數(shù)據(jù)運(yùn)維領(lǐng)域摸爬滾打8年的老兵,我見(jiàn)過(guò)太多因?yàn)榛A(chǔ)架構(gòu)不夠健壯而導(dǎo)致的生產(chǎn)事故。今天,我想和大家分享一套經(jīng)過(guò)實(shí)戰(zhàn)檢驗(yàn)的 HDFS 高可用與 YARN 資源調(diào)度方案,這套方案幫助我們團(tuán)隊(duì)將平臺(tái)可用性從 99.5% 提升到 99.99%,年故障時(shí)間從 43 小時(shí)降低到不足 1 小時(shí)。

一、HDFS 高可用架構(gòu)設(shè)計(jì):讓你的數(shù)據(jù)永不丟失

1.1 傳統(tǒng) HDFS 架構(gòu)的致命缺陷

在深入高可用方案之前,我們先來(lái)看看傳統(tǒng) HDFS 架構(gòu)為什么會(huì)成為整個(gè)大數(shù)據(jù)平臺(tái)的阿喀琉斯之踵。

傳統(tǒng) HDFS 采用主從架構(gòu),包含一個(gè) NameNode(NN)和多個(gè) DataNode(DN)。NameNode 負(fù)責(zé)管理文件系統(tǒng)的命名空間和客戶端對(duì)文件的訪問(wèn),DataNode 負(fù)責(zé)實(shí)際數(shù)據(jù)的存儲(chǔ)。這種設(shè)計(jì)簡(jiǎn)單優(yōu)雅,但存在一個(gè)致命問(wèn)題:NameNode 是單點(diǎn)故障。

我曾經(jīng)歷過(guò)一次慘痛的教訓(xùn):某個(gè)周五下午,NameNode 服務(wù)器因?yàn)閮?nèi)存故障宕機(jī),由于沒(méi)有做高可用,整個(gè) HDFS 集群癱瘓。更糟糕的是,NameNode 的元數(shù)據(jù)出現(xiàn)損壞,恢復(fù)過(guò)程耗時(shí)整整 18 個(gè)小時(shí)。那個(gè)周末,整個(gè)運(yùn)維團(tuán)隊(duì)都在公司度過(guò)。

1.2 HDFS HA 架構(gòu)全景圖

基于這些血淚教訓(xùn),我們?cè)O(shè)計(jì)并實(shí)施了一套完整的 HDFS 高可用方案:

          ┌─────────────────┐
          │  ZooKeeper   │
          │  Cluster   │
          │ (3-5 nodes)  │
          └────────┬────────┘
              │
        ┌────────────┴────────────┐
        │             │
    ┌───────▼────────┐   ┌────────▼───────┐
    │ Active NN   │   │ Standby NN  │
    │ 10.0.1.10   │?─────? 10.0.1.11   │
    └───────┬────────┘   └────────────────┘
        │             │
        │   JournalNode    │
        │    Cluster     │
        │  ┌──────────────┐   │
        └────? 10.0.1.20  ?─────┘
          │ 10.0.1.21  │
          │ 10.0.1.22  │
          └──────────────┘
              │
          ┌────────▼────────┐
          │  DataNodes   │
          │  (N nodes)   │
          └─────────────────┘

這個(gè)架構(gòu)的核心設(shè)計(jì)思想包括:

1.雙 NameNode 熱備:Active NN 處理所有客戶端請(qǐng)求,Standby NN 實(shí)時(shí)同步元數(shù)據(jù)

2.JournalNode 集群:確保元數(shù)據(jù)的一致性和持久化

3.ZooKeeper 集群:負(fù)責(zé)故障檢測(cè)和自動(dòng)切換

4.ZKFC 進(jìn)程:監(jiān)控 NN 健康狀態(tài),觸發(fā)主備切換

1.3 高可用配置實(shí)戰(zhàn)

讓我們從實(shí)際配置開(kāi)始,一步步構(gòu)建這個(gè)高可用系統(tǒng)。

Step 1: 配置 hdfs-site.xml


  
 
   dfs.nameservices
   mycluster
 
 
  
 
   dfs.ha.namenodes.mycluster
   nn1,nn2
 
 
  
 
   dfs.namenode.rpc-address.mycluster.nn1
   node1:8020
 
 
  
 
   dfs.namenode.rpc-address.mycluster.nn2
   node2:8020
 
 
  
 
   dfs.namenode.shared.edits.dir
   qjournal://node1:8485;node2:8485;node3:8485/mycluster
 
 
  
 
   dfs.client.failover.proxy.provider.mycluster
   org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
 
 
  
 
   dfs.ha.fencing.methods
   
      sshfence
      shell(/bin/true)
   
 
 
  
 
   dfs.ha.fencing.ssh.private-key-files
   /home/hadoop/.ssh/id_rsa
 
 
  
 
   dfs.ha.automatic-failover.enabled
   true
 

Step 2: 配置 core-site.xml


  
 
   fs.defaultFS
   hdfs://mycluster
 
 
  
 
   ha.zookeeper.quorum
   node1:2181,node2:2181,node3:2181
 
 
  
 
   hadoop.tmp.dir
   /data/hadoop/tmp
 

1.4 故障切換測(cè)試與調(diào)優(yōu)

配置完成后,最關(guān)鍵的是驗(yàn)證故障切換是否真的可靠。我總結(jié)了一套完整的測(cè)試方案:

測(cè)試場(chǎng)景 1:正常切換

# 查看當(dāng)前 Active NN
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

# 手動(dòng)切換
hdfs haadmin -transitionToStandby nn1
hdfs haadmin -transitionToActive nn2

# 驗(yàn)證切換后的狀態(tài)
hdfs haadmin -getServiceState nn1 # 應(yīng)該顯示 standby
hdfs haadmin -getServiceState nn2 # 應(yīng)該顯示 active

測(cè)試場(chǎng)景 2:模擬故障

# 在 Active NN 節(jié)點(diǎn)上執(zhí)行
# 方法1:直接 kill 進(jìn)程
jps | grep NameNode | awk'{print $1}'| xargskill-9

# 方法2:模擬網(wǎng)絡(luò)故障
iptables -A INPUT -p tcp --dport 8020 -j DROP
iptables -A OUTPUT -p tcp --sport 8020 -j DROP

# 監(jiān)控自動(dòng)切換日志
tail-f /var/log/hadoop/hdfs/hadoop-hdfs-zkfc-*.log

關(guān)鍵調(diào)優(yōu)參數(shù)

經(jīng)過(guò)大量生產(chǎn)實(shí)踐,我總結(jié)出以下關(guān)鍵調(diào)優(yōu)參數(shù):

 

 dfs.ha.zkfc.health-monitor.rpc-timeout.ms
 5000 


 

 dfs.qjournal.write-txns.timeout.ms
 60000 


 

 dfs.client.failover.max.attempts
 15 



 dfs.client.failover.sleep.base.millis
 500 

二、YARN 資源調(diào)度優(yōu)化:讓每一份算力都物盡其用

2.1 YARN 資源調(diào)度的核心挑戰(zhàn)

在管理千節(jié)點(diǎn)規(guī)模的 Hadoop 集群時(shí),我發(fā)現(xiàn)資源調(diào)度是最容易被忽視,但又最影響用戶體驗(yàn)的環(huán)節(jié)。常見(jiàn)的問(wèn)題包括:

?資源利用率低:集群整體 CPU 使用率不足 40%,但用戶卻抱怨資源不夠

?任務(wù)等待時(shí)間長(zhǎng):小任務(wù)被大任務(wù)阻塞,簡(jiǎn)單的查詢要等待數(shù)小時(shí)

?資源分配不均:某些隊(duì)列資源閑置,某些隊(duì)列排隊(duì)嚴(yán)重

?優(yōu)先級(jí)管理混亂:緊急任務(wù)無(wú)法及時(shí)獲取資源

2.2 三大調(diào)度器深度對(duì)比

YARN 提供了三種調(diào)度器,每種都有其適用場(chǎng)景:

調(diào)度器 適用場(chǎng)景 優(yōu)勢(shì) 劣勢(shì)
FIFO Scheduler 測(cè)試環(huán)境、單用戶場(chǎng)景 實(shí)現(xiàn)簡(jiǎn)單、無(wú)額外開(kāi)銷 資源利用率低、無(wú)法多租戶
Capacity Scheduler 多租戶、需要資源隔離 資源保障、彈性共享 配置復(fù)雜、需要預(yù)先規(guī)劃
Fair Scheduler 動(dòng)態(tài)負(fù)載、公平共享 自動(dòng)均衡、配置靈活 可能造成資源碎片化

基于我的經(jīng)驗(yàn),90% 的生產(chǎn)環(huán)境應(yīng)該選擇 Capacity Scheduler,因?yàn)樗芴峁┳詈玫馁Y源隔離和保障。

2.3 Capacity Scheduler 最佳實(shí)踐

讓我分享一個(gè)真實(shí)的案例:某金融公司的大數(shù)據(jù)平臺(tái),需要支撐實(shí)時(shí)風(fēng)控、離線報(bào)表、數(shù)據(jù)挖掘三類業(yè)務(wù)。我們?cè)O(shè)計(jì)了如下的隊(duì)列結(jié)構(gòu):

root (100%)
├── production (70%)
│  ├── realtime (30%)   # 實(shí)時(shí)風(fēng)控,保障最低資源
│  ├── batch (25%)    # 離線報(bào)表,定時(shí)任務(wù)
│  └── adhoc (15%)    # 即席查詢,彈性伸縮
├── development (20%)    # 開(kāi)發(fā)測(cè)試環(huán)境
│  ├── dev-team1 (10%)
│  └── dev-team2 (10%)
└── maintenance (10%)    # 運(yùn)維任務(wù)專用

核心配置文件 capacity-scheduler.xml:


  
 
   yarn.scheduler.capacity.root.queues
   production,development,maintenance
 
 
  
 
   yarn.scheduler.capacity.root.production.capacity
   70
 
 
   yarn.scheduler.capacity.root.production.maximum-capacity
   90 
 
 
   yarn.scheduler.capacity.root.production.queues
   realtime,batch,adhoc
 
 
  
 
   yarn.scheduler.capacity.root.production.realtime.capacity
   30
 
 
   yarn.scheduler.capacity.root.production.realtime.maximum-capacity
   50
 
 
   yarn.scheduler.capacity.root.production.realtime.user-limit-factor
   2 
 
 
   yarn.scheduler.capacity.root.production.realtime.priority
   1000 
 
 
  
 
   yarn.scheduler.capacity.root.production.realtime.disable-preemption
   false
 
 
   yarn.scheduler.capacity.root.production.realtime.intra-queue-preemption.disable
   false
 
 
  
 
   yarn.scheduler.capacity.root.production.realtime.acl_submit_applications
   realtime-group
 
 
   yarn.scheduler.capacity.root.production.realtime.acl_administer_queue
   admin-group
 
 
  
 
   yarn.scheduler.capacity.root.production.batch.maximum-application-lifetime
   86400 
 
 
  
 
   yarn.scheduler.capacity.root.production.adhoc.maximum-applications
   100 
 

2.4 高級(jí)調(diào)度策略

1. 基于標(biāo)簽的調(diào)度(Node Labels)

在異構(gòu)集群中,我們可以通過(guò)節(jié)點(diǎn)標(biāo)簽實(shí)現(xiàn)更精細(xì)的資源管理:

# 創(chuàng)建節(jié)點(diǎn)標(biāo)簽
yarn rmadmin -addToClusterNodeLabels"GPU,SSD,MEMORY"

# 為節(jié)點(diǎn)打標(biāo)簽
yarn rmadmin -replaceLabelsOnNode"node1=GPU node2=GPU"
yarn rmadmin -replaceLabelsOnNode"node3=SSD node4=SSD"
yarn rmadmin -replaceLabelsOnNode"node5=MEMORY node6=MEMORY"

# 配置隊(duì)列使用特定標(biāo)簽

 yarn.scheduler.capacity.root.production.realtime.accessible-node-labels
 SSD


 yarn.scheduler.capacity.root.production.realtime.accessible-node-labels.SSD.capacity
 100

2. 動(dòng)態(tài)資源池(Dynamic Resource Pools)

針對(duì)業(yè)務(wù)負(fù)載的潮汐效應(yīng),我們實(shí)現(xiàn)了動(dòng)態(tài)資源池:

#!/usr/bin/env python3
# dynamic_resource_manager.py

importsubprocess
importjson
fromdatetimeimportdatetime

classDynamicResourceManager:
 def__init__(self):
   self.peak_hours = [(8,12), (14,18)] # 業(yè)務(wù)高峰期
   self.off_peak_hours = [(0,6), (22,24)] # 業(yè)務(wù)低谷期
   
 defget_current_load(self):
   """獲取當(dāng)前集群負(fù)載"""
    cmd ="yarn cluster -list"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
   # 解析輸出,獲取資源使用率
   returnself.parse_cluster_metrics(result.stdout)
 
 defadjust_queue_capacity(self, queue, capacity):
   """動(dòng)態(tài)調(diào)整隊(duì)列容量"""
    cmd =f"yarn rmadmin -refreshQueues"
   # 先更新配置文件
   self.update_capacity_config(queue, capacity)
   # 刷新隊(duì)列配置
    subprocess.run(cmd, shell=True)
   
 defauto_scale(self):
   """基于時(shí)間和負(fù)載的自動(dòng)伸縮"""
    current_hour = datetime.now().hour
    current_load =self.get_current_load()
   
   ifself.is_peak_hour(current_hour):
     # 高峰期:增加 realtime 隊(duì)列資源
     ifcurrent_load['realtime'] >80:
       self.adjust_queue_capacity('root.production.realtime',50)
       self.adjust_queue_capacity('root.production.batch',15)
   else:
     # 低谷期:增加 batch 隊(duì)列資源
     self.adjust_queue_capacity('root.production.realtime',20)
     self.adjust_queue_capacity('root.production.batch',40)
     
if__name__ =="__main__":
  manager = DynamicResourceManager()
  manager.auto_scale()

三、監(jiān)控與故障診斷:?jiǎn)栴}發(fā)現(xiàn)比解決更重要

3.1 構(gòu)建全方位監(jiān)控體系

一個(gè)完善的監(jiān)控體系應(yīng)該包含以下層次:

┌─────────────────────────────────────┐
│     應(yīng)用層監(jiān)控          │
│  (Job成功率/延遲/資源使用)     │
├─────────────────────────────────────┤
│     服務(wù)層監(jiān)控          │
│  (NN/RM/DN/NM 健康狀態(tài))      │
├─────────────────────────────────────┤
│     系統(tǒng)層監(jiān)控          │
│  (CPU/內(nèi)存/磁盤/網(wǎng)絡(luò))       │
├─────────────────────────────────────┤
│     基礎(chǔ)設(shè)施監(jiān)控         │
│  (機(jī)房/網(wǎng)絡(luò)/電力)         │
└─────────────────────────────────────┘

核心監(jiān)控指標(biāo)與告警閾值:

# prometheus-alerts.yml
groups:
-name:hdfs_alerts
 rules:
  -alert:NameNodeDown
   expr:up{job="namenode"}==0
   for:1m
   labels:
    severity:critical
   annotations:
    summary:"NameNode{{ $labels.instance }}is down"
    
  -alert:HDFSCapacityHigh
   expr:hdfs_cluster_capacity_used_percent>85
   for:5m
   labels:
    severity:warning
   annotations:
    summary:"HDFS capacity usage is{{ $value }}%"
    
  -alert:DataNodeDiskFailure
   expr:hdfs_datanode_failed_volumes>0
   for:1m
   labels:
    severity:warning
   annotations:
    summary:"DataNode{{ $labels.instance }}has{{ $value }}failed volumes"
    
-name:yarn_alerts
 rules:
  -alert:YarnQueueBlocked
   expr:yarn_queue_pending_applications>100
   for:10m
   labels:
    severity:warning
   annotations:
    summary:"Queue{{ $labels.queue }}has{{ $value }}pending applications"
    
  -alert:YarnMemoryPressure
   expr:yarn_cluster_memory_used_percent>90
   for:5m
   labels:
    severity:critical
   annotations:
    summary:"YARN cluster memory usage is{{ $value }}%"

3.2 常見(jiàn)故障處理 Playbook

故障場(chǎng)景 1:NameNode 進(jìn)入安全模式

# 檢查安全模式狀態(tài)
hdfs dfsadmin -safemode get

# 查看具體原因
hdfs dfsadmin -report

# 常見(jiàn)原因及解決方案:
# 1. 數(shù)據(jù)塊不足
hdfs fsck / -blocks -files -locations
# 強(qiáng)制離開(kāi)安全模式(慎用)
hdfs dfsadmin -safemode leave

# 2. DataNode 未完全啟動(dòng)
# 等待 DataNode 匯報(bào)完成,通常需要幾分鐘

# 3. 磁盤空間不足
# 清理日志和臨時(shí)文件
find /var/log/hadoop -name"*.log.*"-mtime +7 -delete

故障場(chǎng)景 2:YARN 應(yīng)用卡死

# 獲取應(yīng)用列表
yarn application -list

# 查看具體應(yīng)用狀態(tài)
yarn application -status application_1234567890_0001

# 查看應(yīng)用日志
yarn logs -applicationId application_1234567890_0001

# 強(qiáng)制終止應(yīng)用
yarn application -killapplication_1234567890_0001

# 釋放隊(duì)列資源
yarn rmadmin -refreshQueues

3.3 性能調(diào)優(yōu)實(shí)戰(zhàn)

HDFS 性能優(yōu)化:

 

 dfs.client.write.packet.size
 131072 



 dfs.datanode.handler.count
 20 


 

 dfs.datanode.max.transfer.threads
 8192 



 dfs.client.read.shortcircuit
 true 

YARN 性能優(yōu)化:

 

 yarn.nodemanager.resource.memory-mb
 65536 



 yarn.nodemanager.resource.cpu-vcores
 32 


 

 yarn.resourcemanager.scheduler.client.thread-count
 50 



 yarn.resourcemanager.scheduler.class
 org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

四、自動(dòng)化運(yùn)維工具鏈

4.1 自動(dòng)化巡檢腳本

#!/bin/bash
# hdfs_health_check.sh

LOG_FILE="/var/log/hdfs_health_check_$(date +%Y%m%d).log"

log_info() {
 echo"[$(date '+%Y-%m-%d %H:%M:%S')] INFO:$1"|tee-a$LOG_FILE
}

log_error() {
 echo"[$(date '+%Y-%m-%d %H:%M:%S')] ERROR:$1"|tee-a$LOG_FILE
}

# 檢查 NameNode 狀態(tài)
check_namenode() {
  log_info"Checking NameNode status..."
 
 fornninnn1 nn2;do
    state=$(hdfs haadmin -getServiceState$nn2>/dev/null)
   if[ $? -eq 0 ];then
      log_info"NameNode$nnis$state"
     if["$state"="active"];then
        ACTIVE_NN=$nn
     fi
   else
      log_error"Failed to get status for NameNode$nn"
      send_alert"NameNode$nnstatus check failed"
   fi
 done
 
 if[ -z"$ACTIVE_NN"];then
    log_error"No active NameNode found!"
    send_alert"Critical: No active NameNode"
   return1
 fi
}

# 檢查 HDFS 容量
check_hdfs_capacity() {
  log_info"Checking HDFS capacity..."
 
  capacity_info=$(hdfs dfsadmin -report | grep -A 1"Configured Capacity")
  used_percent=$(echo"$capacity_info"| grep"DFS Used%"| awk'{print $3}'|tr-d'%')
 
 if[ $(echo"$used_percent> 85"| bc) -eq 1 ];then
    log_error"HDFS usage is critical:${used_percent}%"
    send_alert"HDFS capacity critical:${used_percent}%"
 elif[ $(echo"$used_percent> 70"| bc) -eq 1 ];then
    log_info"HDFS usage warning:${used_percent}%"
 else
    log_info"HDFS usage normal:${used_percent}%"
 fi
}

# 檢查壞塊
check_corrupt_blocks() {
  log_info"Checking for corrupt blocks..."
 
  corrupt_blocks=$(hdfs dfsadmin -report | grep"Blocks with corrupt replicas"| awk'{print $5}')
 
 if["$corrupt_blocks"-gt 0 ];then
    log_error"Found$corrupt_blockscorrupt blocks"
    send_alert"HDFS has$corrupt_blockscorrupt blocks"
   
   # 自動(dòng)修復(fù)嘗試
    log_info"Attempting to fix corrupt blocks..."
    hdfs fsck / -delete
 else
    log_info"No corrupt blocks found"
 fi
}

# 發(fā)送告警
send_alert() {
 # 這里可以集成企業(yè)微信、釘釘?shù)雀婢? echo"$1"| mail -s"HDFS Alert"ops-team@company.com
}

# 主函數(shù)
main() {
  log_info"Starting HDFS health check..."
 
  check_namenode
  check_hdfs_capacity
  check_corrupt_blocks
 
  log_info"Health check completed"
}

main

4.2 容量規(guī)劃與預(yù)測(cè)

基于歷史數(shù)據(jù)的容量預(yù)測(cè)模型:

#!/usr/bin/env python3
# capacity_predictor.py

importpandasaspd
importnumpyasnp
fromsklearn.linear_modelimportLinearRegression
fromdatetimeimportdatetime, timedelta
importmatplotlib.pyplotasplt

classHDFSCapacityPredictor:
 def__init__(self):
   self.model = LinearRegression()
   self.history_data = []
   
 defcollect_metrics(self):
   """收集 HDFS 使用率數(shù)據(jù)"""
   # 實(shí)際環(huán)境中從監(jiān)控系統(tǒng)獲取
   # 這里用示例數(shù)據(jù)
   return{
     'timestamp': datetime.now(),
     'used_bytes':self.get_hdfs_used(),
     'total_bytes':self.get_hdfs_total()
    }
 
 deftrain_model(self, days=90):
   """基于歷史數(shù)據(jù)訓(xùn)練預(yù)測(cè)模型"""
    df = pd.DataFrame(self.history_data)
    df['days'] = (df['timestamp'] - df['timestamp'].min()).dt.days
   
    X = df[['days']].values
    y = df['used_bytes'].values
   
   self.model.fit(X, y)
   
   # 計(jì)算增長(zhǎng)率
    growth_rate =self.model.coef_[0]
    daily_growth_gb = growth_rate / (1024**3)
   
   returndaily_growth_gb
 
 defpredict_capacity_exhaustion(self):
   """預(yù)測(cè)容量耗盡時(shí)間"""
    current_used =self.get_hdfs_used()
    total_capacity =self.get_hdfs_total()
    daily_growth =self.train_model()
   
    remaining_capacity = total_capacity - current_used
    days_until_full = remaining_capacity / (daily_growth *1024**3)
   
    exhaustion_date = datetime.now() + timedelta(days=days_until_full)
   
   return{
     'days_remaining':int(days_until_full),
     'exhaustion_date': exhaustion_date.strftime('%Y-%m-%d'),
     'daily_growth_gb': daily_growth,
     'recommendation':self.get_recommendation(days_until_full)
    }
 
 defget_recommendation(self, days_remaining):
   """基于剩余天數(shù)給出建議"""
   ifdays_remaining 

五、生產(chǎn)環(huán)境最佳實(shí)踐總結(jié)

5.1 架構(gòu)設(shè)計(jì)原則

1.高可用優(yōu)先:寧可犧牲一些性能,也要保證服務(wù)可用性

2.監(jiān)控先行:沒(méi)有監(jiān)控的系統(tǒng)等于裸奔

3.自動(dòng)化運(yùn)維:能自動(dòng)化的絕不手工,減少人為錯(cuò)誤

4.容量冗余:始終保持 30% 以上的資源冗余

5.灰度發(fā)布:任何變更都要先在測(cè)試環(huán)境驗(yàn)證

5.2 運(yùn)維 CheckList

日常巡檢清單:

? NameNode 主備狀態(tài)正常

? HDFS 容量使用率 < 80%

? 無(wú)壞塊和丟失塊

? DataNode 全部在線

? YARN ResourceManager 狀態(tài)正常

? 隊(duì)列資源使用合理

? 無(wú)長(zhǎng)時(shí)間 pending 的任務(wù)

? 系統(tǒng)日志無(wú)異常錯(cuò)誤

? 最近的備份可用

5.3 故障恢復(fù) RTO/RPO 目標(biāo)

故障類型 RTO(恢復(fù)時(shí)間目標(biāo)) RPO(恢復(fù)點(diǎn)目標(biāo)) 實(shí)現(xiàn)方式
NameNode 故障 < 1 分鐘 0 HA 自動(dòng)切換
DataNode 故障 < 10 分鐘 0 副本自動(dòng)恢復(fù)
機(jī)架故障 < 30 分鐘 0 機(jī)架感知副本
機(jī)房故障 < 4 小時(shí) < 1 小時(shí) 跨機(jī)房容災(zāi)

結(jié)語(yǔ):運(yùn)維的最高境界是"無(wú)為而治"

經(jīng)過(guò)這些年的實(shí)踐,我越來(lái)越認(rèn)同一個(gè)理念:優(yōu)秀的運(yùn)維不是救火隊(duì)長(zhǎng),而是防火專家。當(dāng)你的系統(tǒng)能夠自動(dòng)處理 90% 的故障,當(dāng)你的監(jiān)控能夠提前預(yù)警潛在問(wèn)題,當(dāng)你的團(tuán)隊(duì)可以安心休假而不擔(dān)心線上服務(wù),這才是運(yùn)維的最高境界。

這篇文章分享的每一個(gè)配置、每一行代碼、每一個(gè)架構(gòu)決策,都來(lái)自真實(shí)的生產(chǎn)環(huán)境。希望這些經(jīng)驗(yàn)?zāi)軒椭闵僮邚澛罚瑯?gòu)建一個(gè)真正穩(wěn)定、高效、易維護(hù)的大數(shù)據(jù)平臺(tái)。

記住,技術(shù)永遠(yuǎn)在演進(jìn),但核心的運(yùn)維思想不會(huì)變:穩(wěn)定壓倒一切,預(yù)防勝于治療,自動(dòng)化解放人力

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • HDFS
    +關(guān)注

    關(guān)注

    1

    文章

    32

    瀏覽量

    10117
  • 大數(shù)據(jù)
    +關(guān)注

    關(guān)注

    64

    文章

    9063

    瀏覽量

    143759

原文標(biāo)題:大數(shù)據(jù)平臺(tái)運(yùn)維實(shí)戰(zhàn):從零構(gòu)建企業(yè)級(jí) HDFS 高可用與 YARN 資源調(diào)度體系

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    SAS走進(jìn)企業(yè)級(jí)存儲(chǔ)應(yīng)用

    SAS走進(jìn)企業(yè)級(jí)存儲(chǔ)應(yīng)用串行SCSI(SAS)的出現(xiàn)已經(jīng)有幾年了。2005年,在主要的接口技術(shù)中,由于OEM服務(wù)器制造商和系統(tǒng)集成商開(kāi)始提供串行SCSI解決方案,企業(yè)級(jí)存儲(chǔ)市場(chǎng)將會(huì)顯現(xiàn)革命性的進(jìn)展
    發(fā)表于 11-13 21:58

    睿訊企業(yè)級(jí)機(jī)房解決方案創(chuàng)新中心落戶深圳

    睿訊企業(yè)級(jí)機(jī)房解決方案創(chuàng)新中心落戶深圳4月26日,睿訊企業(yè)級(jí)機(jī)房解決方案創(chuàng)新中心在睿訊深圳辦公室亮相。這是繼睿訊KVM行業(yè)首家形象店在華強(qiáng)北賽格廣場(chǎng)成立之后的又一創(chuàng)舉,是睿訊為廣大機(jī)房
    發(fā)表于 05-11 14:07

    睿訊企業(yè)級(jí)機(jī)房解決方案創(chuàng)新中心落戶深圳

    睿訊企業(yè)級(jí)機(jī)房解決方案創(chuàng)新中心落戶深圳      4月26日,睿訊企業(yè)級(jí)機(jī)房解決方案創(chuàng)新中心在睿訊深圳辦公室
    發(fā)表于 05-14 14:50

    2017年企業(yè)級(jí)SaaS服務(wù)發(fā)展趨勢(shì)?

    企業(yè)級(jí)SaaS服務(wù)經(jīng)過(guò)2014年的萌芽,2015年的發(fā)展,2016年的高速增長(zhǎng),越來(lái)越多的企業(yè)更加傾向于通過(guò)云計(jì)算降低成本并實(shí)現(xiàn)資源優(yōu)化配置。據(jù)不完全統(tǒng)計(jì),截止到2017年,國(guó)內(nèi)企業(yè)級(jí)
    發(fā)表于 07-17 10:22

    采用nvSRAM確保企業(yè)級(jí)SSD故障時(shí)電源可靠性

    。企業(yè)級(jí)SSD緩存中的任何其它數(shù)據(jù)在電源故障情況下假定為丟失?!盎貙?xiě)”模式相對(duì)于“寫(xiě)通”模式而言能大幅提升隨機(jī)IOPS性能,因此更受隨機(jī)IOPS驅(qū)動(dòng)器的青睞。  為了確保“回寫(xiě)”實(shí)施方案的正常運(yùn)行,
    發(fā)表于 09-26 09:44

    大話企業(yè)級(jí)Android開(kāi)發(fā)

    大話企業(yè)級(jí)Android開(kāi)發(fā)
    發(fā)表于 07-11 19:39

    Linux的yarn介紹

    1.yarn介紹一個(gè)分布式運(yùn)算程序的資源調(diào)度系統(tǒng);yarn中有一個(gè)ResourceManager負(fù)責(zé)接收資源申請(qǐng)的請(qǐng)求
    發(fā)表于 07-17 08:33

    Flink on YARN(下):常見(jiàn)問(wèn)題與排查思路

    較多,1/2 節(jié)點(diǎn)上的 CPU 資源接近用滿內(nèi)存資源剩余較多,申請(qǐng)資源中某一維度資源值配置過(guò)大也可能造成無(wú)法申請(qǐng)到資源;檢查是否有
    發(fā)表于 10-10 14:14

    Flink on YARN(下):常見(jiàn)問(wèn)題與排查思路

    將推出 Flink on YARN 應(yīng)用解讀系列文章,分為上、下兩篇。上篇分享了基于 FLIP-6 重構(gòu)后的資源調(diào)度模型介紹 Flink on YARN 應(yīng)用啟動(dòng)全流程,本文將根據(jù)社區(qū)
    發(fā)表于 10-14 15:04

    大話企業(yè)級(jí)Android開(kāi)發(fā)

    大話企業(yè)級(jí)Android開(kāi)發(fā)
    發(fā)表于 03-31 11:37

    企業(yè)級(jí)的LInux系統(tǒng)日志管理

    企業(yè)級(jí)LInux系統(tǒng)日志管理
    發(fā)表于 05-29 11:33

    Yarn基本結(jié)構(gòu)和運(yùn)行原理解析

    一、Yarn基本結(jié)構(gòu)Hadoop三大核心組件:分布式文件系統(tǒng)HDFS、分布式計(jì)算框架MapReduce,分布式集群資源調(diào)度框架Yarn。
    發(fā)表于 01-05 16:58

    大話企業(yè)級(jí)Android開(kāi)發(fā)

    大話企業(yè)級(jí)Android開(kāi)發(fā)
    發(fā)表于 03-05 11:15

    Hadoop的YARN資源管理系統(tǒng)

    本質(zhì)上是資源管理系統(tǒng)。YARN提供了資源管理和資源調(diào)度等機(jī)制
    的頭像 發(fā)表于 03-15 17:00 ?3006次閱讀
    Hadoop的<b class='flag-5'>YARN</b><b class='flag-5'>資源</b>管理系統(tǒng)

    如何通過(guò)YARN設(shè)計(jì)分布式資源動(dòng)態(tài)調(diào)度協(xié)同分配系統(tǒng)

      Storm on yarn是目前主流的分布式資源調(diào)度框架,但其存在需要人工干預(yù)和無(wú)法根據(jù)資源可用性實(shí)時(shí)調(diào)整系統(tǒng)
    發(fā)表于 03-09 17:29 ?12次下載
    如何通過(guò)<b class='flag-5'>YARN</b>設(shè)計(jì)分布式<b class='flag-5'>資源</b>動(dòng)態(tài)<b class='flag-5'>調(diào)度</b>協(xié)同分配系統(tǒng)