Hadoop HA集群兩個NameNode都是standby或者主NameNode是standby,從NameNode是active的情況集錦

文章目錄

  • 背景
  • 架構
  • HDFS HA配置
  • 錯誤原因
  • 解決方案
    • 方案一
    • 方案二
    • 方案三(首先查看自己各參數文件是否配置出錯)
  • 后記
  • 補充
    • failover
    • transitionToActive
  • 常用端口號及配置文件
    • 常用端口號
      • hadoop3.x
      • hadoop2.x
    • 常用配置文件

這里說一下配置Hadoop HA集群可能出現的兩種情況,第一種就是兩個NameNode都是standby,第二種就是主Master是standby,從Master是active。

背景

針對Hadoop 1.x中可能出現的NameNode單點故障(SPOF)或者短時間無法使用的情況,Hadoop 2.x 通過增加一個NameNode的方式進行了改善,而增加一個NameNode后,實際在沒有出現問題時,只需要一個NameNode,所以兩個NameNode一個處于Standby狀態,一個處于Active狀態。Standby不對外提供服務,僅同步Active NameNode的狀態,以便Active NameNode出現問題時及時切換成Active狀態。

架構

Hadoop 2.x 的兩個NameNode一般會配置在兩臺獨立的機器上,Active NameNode會響應集群客戶端,而Standby NameNode只是作為Active NameNode的備份,保證在Active NameNode出現問題時能夠快速的替代它。

Standby NameNode通過JournalNodes的通信來與Active NameNode保持同步。

Active NameNode和Standby NameNode在哪個節點上,是由zookeeper通過主備選舉機制來確定的。

HDFS HA配置

NameNode:對應配置相同的兩臺物理機,分別運行Active NameNode和Standby NameNode。

JournalNode:JournalNode不會耗費太多的資源,可以和其它進程部署在一起,如NameNode、Datanode、ResourceManager等,需要至少3個且為基數,這樣可以允許(N-1)/2個JNS進程失敗。

DataNode:根據數據量的大小和處理數據所需資源進行配置,一般實際應用中數量較多,且分布在較多的機器上。

NameNode和SecondaryNameNode不要安裝在同一臺服務器

ResourceManager也很消耗內存,不要和NameNode、SecondaryNameNode放在同一臺機器上。

通過hdfs haadmin -getServiceState nn1hdfs haadmin -getServiceState nn2命令查看,發現兩個NameNode的狀態都是standby
通過hdfs dfsadmin -report命令查看,發現HDFS數據均為0

錯誤原因

當首次執行命令hadoop namenode -format格式化NameNode時,會在dfs.namenode.name.dir對應路徑下生成current/VERSION文件,其中記錄了clusterID,同時dfs.datanode.data.dir對應的DataNode目錄中也會生成current/VERSION文件,其中clustreID的與NameNode中clusterID的值相同。
當再次執行hadoop namenode -format命令時,NameNode對應的目錄下會重新生成clusterID,導致和DataNode對應的clusterID不一致,從而造成上述問題。

解決方案

方案一

  1. 關掉集群
./stop-dfs.sh
  1. 刪掉各個節點上DataNode對應的目錄
rm -rf data
  1. 格式化NameNode
hadoop namenode -format
  1. 重啟集群
./start-dfs.sh

方案二

  1. 關掉集群
./stop-dfs.sh
  1. 編輯clusterID使Namenode和DataNode同步
vim clusterID
  1. 重啟集群
./start-dfs.sh

注意:
在生產環境中,謹慎使用hadoop namenode -format命令。以上操作是在首次搭建集群時且沒有重要數據的情況下執行的。

hdfs haadmin -transitionToActive nn1

方案三(首先查看自己各參數文件是否配置出錯)

1、首先在hdfs-site.xml中添加下面的參數,該參數的值默認為false:

<property><name>dfs.ha.automatic-failover.enabled.ns</name><value>true</value>
</property>

2、在core-site.xml文件中添加下面的參數,該參數的值為ZooKeeper服務器的地址,ZKFC將使用該地址。

<property><name>ha.zookeeper.quorum<name><value>spark01.kfk.com:2181,spark02.kfk.com:2181,spark03.kfk.com:2181<value>
<property>

首先你要確定不用ha的時候你的hadoop集群是正常的,不然找錯誤的方向就偏離了

配置HA 需要zookeeper,先要看看是不是zookeeper沒有配置好的問題

如果都正常,在hadoop安裝目錄執行sbin/hadoop-daemon.sh start zkfc,這句是啟動zookeeper選舉制度,然后執行 hdfs haadmin -transitionToActive nn1 ,其中nn1是你的namenode中的一個(如果是新配置的HAhadoop集群,可能是zkfc(DFSZKFailoverController)沒有格式化導致namenode節點的自動切換機制沒有開啟)

在HA或者HDFS中,上面的兩個參數還需要以NameServiceID為后綴,比如dfs.ha.automatic-failover.enabled.mycluster。除了上面的兩個參數外,還有其它幾個參數用于自動故障轉移,比如ha.zookeeper.session-timeout.ms,但對于大多數安裝來說都不是必須的。

在添加了上述的配置參數后,下一步就是在ZooKeeper中初始化要求的狀態,可以在任一NameNode中運行hdfs zkfc -formatZK命令實現該目的,該命令在ZooKeeper中創建znode

執行該命令需要進入Hadoop的安裝目錄下面的bin目錄中找到hdfs這個命令,輸入上面的命令執行,然后就可以修復這個問題了。

注意:之前,先得啟動好每臺機器的zookeeper進程。

后記

對于hdfs的一些命令,不熟悉的情況下,可以先用以下的命令查看。

hdfs -help  查看命令
hdfs haadmin -help 

這里記錄一下常用的命令

hdfs haadmin -getAllServiceState   查詢所有NN的服務狀態
hdfs haadmin -transitionToActive nn1 開啟nn1為active狀態
hdfs haadmin -transitionToActive nn2 開啟nn2為active狀態
hdfs haadmin -transitionToStandby nn1 開啟nn1為standby狀態
hdfs haadmin -failover nn1 nn2   手動執行故障轉移
hadoop-daemon.sh start namenode 啟動 namemode進程
kill -9 namenode進程號    使namenode進程掛掉
yarn rmadmin -getServiceState rm1  查看resourcemanager節點狀態
hdfs --daemon start/stop namenode/datanode/secondarynamenode   分別啟動/停止HDFS組件
yarn --daemon start/stop resourcemanager/nodemanager    啟動/停止YARN

注意,其實hdfs自帶的命令里,都提供了,若兩者都是standby狀態怎么執行。若兩者都是active狀態怎么執行。這里,不多贅述。

補充

failover

切換NameNode的主備狀態,一般推薦用此方式來切換主備

執行hdfs haadmin -failover <serviceId of current active> <serviceId of new active>命令,切換NameNode的主備狀態。

例如:
nn1當前是Active NameNode,想讓nn2成為新的Active NameNode,可執行以下命令。

haadmin -getAllServiceState 
hdfs haadmin -failover nn2 nn1  將 nn1 變為 主

如果nn2當前已是Active NameNode,執行以下命令后,nn2仍為新的Active NameNode。

haadmin -getAllServiceState 
hdfs haadmin -failover nn1 nn2  將 nn2 變為 主

transitionToActive

將給定的NameNode切換成主,不會做fencing(和failover有區別的點)

當開啟了故障自動切換failover(dfs.ha.automatic-failover.enabled=true)之后,無法手動進行。想要 transitionToActive 切換主,就需要 帶上 強制手動的標志 --forcemanual

hdfs haadmin -transitionToActive nn1

此時 nn1: standby nn2: active

hdfs haadmin -getAllServiceState
hdfs haadmin -transitionToActive --forcemanual nn1

此時提示的是 nn2 已經是 active,切換不起作用

當active節點正常時,使用hdfs haadmin -transitionToActive命令對兩個namenode節點切換都不起作用.

此時試試將 active 狀態切換成 standby

hdfs haadmin -getAllServiceState
hdfs haadmin -transitionToStandby --forcemanual nn2
hdfs haadmin -getAllServiceState

此時提示的是 nn2 已經是 standby,切換生效

當active節點正常時,執行hdfs haadmin -transitionToStandby命令可以將active的namenode節點轉換成standby狀態。

常用端口號及配置文件

常用端口號

hadoop3.x

  • HDFS NameNode 內部通常端口:8020/9000/9820

  • HDFS NameNode 用戶查詢端口:9870

  • Yarn查看任務運行情況:8088

  • 歷史服務器:19888

hadoop2.x

  • HDFS NameNode 內部通常端口:8020/9000

  • HDFS NameNode 用戶查詢端口:50070

  • Yarn查看任務運行情況:8088

  • 歷史服務器:19888

常用配置文件

  • 3.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers

  • 2.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slaves

轉載自 :https://blog.csdn.net/u014727709/article/details/131194566
歡迎start,歡迎評論,歡迎指正

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40923.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40923.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40923.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux多線程【初識線程】

?個人主頁&#xff1a; 北 海 &#x1f389;所屬專欄&#xff1a; Linux學習之旅 &#x1f383;操作環境&#xff1a; CentOS 7.6 阿里云遠程服務器 文章目錄 &#x1f307;前言&#x1f3d9;?正文1、什么是線程&#xff1f;1.1、基本概念1.2、線程理解1.3、進程與線程的關系…

分布式事務與解決方案

一、什么是分布式事務 首先我們知道本地事務是指事務方法中的操作只依賴本地數據庫&#xff0c;可保證事務的ACID特性。而在分布式系統中&#xff0c;一個應用系統被拆分為多個可獨立部署的微服務&#xff0c;在一個微服務的事務方法中&#xff0c;除了依賴本地數據庫外&#…

【深入理解ES6】塊級作用域綁定

1. var聲明及變量提升機制 提升&#xff08;Hoisting&#xff09;機制&#xff1a;通過關鍵字var聲明的變量&#xff0c;都會被當成在當前作用域頂部生命的變量。 function getValue(condition){if(condition){var value "blue";console.log(value);}else{// 此處…

代碼隨想錄算法訓練營第三十六天 | 435. 無重疊區間,763.劃分字母區間,56. 合并區間

代碼隨想錄算法訓練營第三十六天 | 435. 無重疊區間&#xff0c;763.劃分字母區間&#xff0c;56. 合并區間 435. 無重疊區間:eyes:題目總結:eyes: 763.劃分字母區間:eyes:題目總結:eyes: 56. 合并區間:eyes:題目總結:eyes: 435. 無重疊區間 題目鏈接 視頻講解 給定一個區間的…

并發編程系列-Semaphore

Semaphore&#xff0c;如今通常被翻譯為"信號量"&#xff0c;過去也曾被翻譯為"信號燈"&#xff0c;因為類似于現實生活中的紅綠燈&#xff0c;車輛是否能通行取決于是否是綠燈。同樣&#xff0c;在編程世界中&#xff0c;線程是否能執行取決于信號量是否允…

8.10 用redis實現緩存功能和Spring Cache

什么是緩存? 緩存(Cache), 就是數據交換的緩沖區,俗稱的緩存就是緩沖區內的數據,一般從數據庫中獲取,存儲于本地代碼。 通過Redis來緩存數據&#xff0c;減少數據庫查詢操作; 邏輯 每個分類的菜品保存一份緩存數據 數據庫菜品數據有變更時清理緩存數據 如何將商品數據緩存起…

p-級數的上界(Upper bound of p-series)

積分判別法-The Integral Test https://math.stackexchange.com/questions/2858067/upper-bound-of-p-series https://courses.lumenlearning.com/calculus2/chapter/the-p-series-and-estimating-series-value/ 兩個重要級數&#xff08;p級數和幾何級數&#xff09; ht…

WPF顯示初始界面--SplashScreen

WPF顯示初始界面–SplashScreen 前言 WPF應用程序的運行速度快&#xff0c;但并不能在瞬間啟動。當第一次啟動應用程序時&#xff0c;會有一些延遲&#xff0c;因為公共語言運行時&#xff08;CLR&#xff09;首先需要初始化.NET環境&#xff0c;然后啟動應用程序。 對于WPF中…

高憶管理:股票T+0交易是什么意思?t+0交易有什么好處?

股票的買賣準則有很多種&#xff0c;T0買賣便是其中之一。那么股票T0買賣是什么意思&#xff1f;t0買賣有什么優點&#xff1f;高憶管理也為大家預備了相關內容&#xff0c;以供參考。 股票T0買賣是什么意思&#xff1f; T0買賣準則是指出資者當天買入的股票能夠在當天賣出&am…

IP 多播協議(IP Multicast Protocol)

IP 多播協議&#xff08;IP Multicast Protocol&#xff09;是一種在網絡中一對多傳輸數據的通信方式。在傳統的單播通信中&#xff0c;數據從一個發送方發送到一個接收方&#xff1b;而在多播通信中&#xff0c;數據可以從一個發送方傳輸到多個接收方&#xff0c;從而有效地節…

SpringBoot 異步、郵件任務

異步任務 創建一個Hello項目 創建一個類AsyncService 異步處理還是非常常用的&#xff0c;比如我們在網站上發送郵件&#xff0c;后臺會去發送郵件&#xff0c;此時前臺會造成響應不動&#xff0c;直到郵件發送完畢&#xff0c;響應才會成功&#xff0c;所以我們一般會采用多線…

神經網絡基礎-神經網絡補充概念-03-邏輯回歸損失函數

概念 邏輯回歸使用的損失函數通常是"對數損失"&#xff08;也稱為"交叉熵損失"&#xff09;或"邏輯損失"。這些損失函數在訓練過程中用于衡量模型預測與實際標簽之間的差異&#xff0c;從而幫助模型逐步調整權重參數&#xff0c;以更好地擬合數…

指靜脈開集測試(OpenSet-test)代碼(包含7個數據集)

七個數據集:sdu、mmc、hkpu、scut、utfvp、vera、nupt 一、SDU 80%用于訓練,20%用于作為開集測試 1.數據集分割代碼 ①先把636個類別提取出來 func: 創建temp_sdu,將636個類劃分出來。下一個代碼塊將進行openset_sdu的分割import os from shutil import copy, rmtre…

c++--SLT六大組件之間的關系

1.SLT六大組件&#xff1a; 容器&#xff0c;迭代器&#xff0c;算法&#xff0c;仿函數&#xff0c;適配器&#xff0c;空間配置器 2.六大組件之間的關系 容器&#xff1a;容器是STL最基礎的組件&#xff0c;沒有容器&#xff0c;就沒有數據&#xff0c;容器的作用就是用來存…

IO流 詳細介紹

一、IO流概述 1.IO&#xff1a;輸入(Input讀取數據)/輸出(Output寫數據) 2.流&#xff1a;是一種抽象概念&#xff0c;是對數據傳輸的總稱,也就是說數據在設備間的傳輸稱為流&#xff0c;流的本質是數據傳輸IO流就是用來處理設備間數據傳輸問題的。 3.常見的應用&#xff1a…

【Sklearn】基于隨機森林算法的數據分類預測(Excel可直接替換數據)

【Sklearn】基于隨機森林算法的數據分類預測(Excel可直接替換數據) 1.模型原理1.1 模型原理1.2 數學模型2.模型參數3.文件結構4.Excel數據5.下載地址6.完整代碼7.運行結果1.模型原理 隨機森林(Random Forest)是一種集成學習方法,通過組合多個決策樹來構建強大的分類或回歸…

JVM - 垃圾回收機制

JVM的垃圾回收機制(簡稱GC) JVM的垃圾回收機制非常強大&#xff0c;是JVM的一個很重要的功能&#xff0c;而且這也是跟對象實例息息相關的&#xff0c;如果對象實例不用了要怎么清除呢&#xff1f; 如何判斷對象已經沒用了 當JVM認為一個對像已經沒用了&#xff0c;就會把這個…

初識Sentinel

目錄 1.解決雪崩的方式有4種&#xff1a; 1.1.2超時處理&#xff1a; 1.1.3倉壁模式 1.1.4.斷路器 1.1.5.限流 1.1.6.總結 1.2.服務保護技術對比 1.3.Sentinel介紹和安裝 1.3.1.初識Sentinel 1.3.2.安裝Sentinel 1.4.微服務整合Sentinel 2.流量控制 2.1.簇點鏈路 …

Ubuntu中怎么清空mysql數據

要清空 MySQL 數據&#xff0c;可以使用以下步驟來執行。請注意&#xff0c;這將會永久刪除數據庫中的所有數據&#xff0c;請謹慎操作&#xff0c;并在操作前備份重要數據。 登錄 MySQL&#xff1a; 打開終端&#xff0c;使用以下命令登錄到 MySQL 數據庫。根據情況&#xf…

黑馬項目一階段面試58題 Web14題(一)

一、什么是AJAX 異步的JavaScript和XML。用來做前端和后端的異步請求的技術。 異步請求&#xff1a;只更新部分前端界面的請求&#xff0c;做到局部更新。 比如注冊&#xff0c;提示用戶名已存在而整個頁面沒有動 比如百度圖片搜索美女&#xff0c;進度條越變越短&#xff…