玩大數據期間碰到的一些問題總結

文章目錄

  • 問題一:Zookeeper節點數量為什么建議是奇數個?
  • 問題二:HA機制的Hadoop集群中Journal Node 作用
  • 問題三:兩個datanode節點互相排斥怎么解決(集群無法識別新加入的Datanode)?
  • 問題四:如何修改Zookeeper日志 zookeeper.out輸出路徑
  • 問題五:HDFS block丟失過多進入安全模式(safe mode)的解決方法
  • 問題六:datanode數據存放位置研究

問題一:Zookeeper節點數量為什么建議是奇數個?

原因是:“Zookeeper集群,當有一半以上的節點數在工作中的時候,集群才對外服務”。

怎么理解上面這句話呢,用實驗數據說話:
實驗一:

設置節點數量為偶數 4, 啟動 2 個節點。觀察結果:集群不對外服務啟動 3 個節點。觀察結果:集群開始對外服務
實驗二:

設置節點數量為奇數個 5啟動3個節點。觀察結果:集群開始對外服務

總結:
Zookeeper的算法邏輯里面,“一半以上的節點”,是不包括等于一半的。所以無論設置集群總數量為 2n+1 個節點 或者 2n 個節點,最少都需要依賴 n+1 個節點,分別可以容納 n 個 或 n-1 個節點掛掉(也就是說就算掛n個節點ZK系統照樣運行)。 (相比之下,設置為 2n+1, 可以比設置為 2n 多掛掉一個節點)。所以這里說的是建議奇數個而不是一定是奇數個節點

問題二:HA機制的Hadoop集群中Journal Node 作用

兩個NameNode為了數據同步,會通過一組稱作JournalNodes的獨立進程進行相互通信。當active狀態的NameNode的命名空間有任何修改時,會告知大部分的JournalNodes進程。standby狀態的NameNode有能力讀取JNs中的變更信息,并且一直監控edit log的變化,把變化應用于自己的命名空間。standby可以確保在集群出錯時,命名空間狀態已經完全同步了。
集群啟動時,可以同時啟動2個NameNode。這些NameNode只有一個是active的,另一個屬于standby狀態。active狀態意味著提供服務,standby狀態意味著處于休眠狀態,只進行數據同步,時刻準備著提供服務,如圖所示:
在這里插入圖片描述
在一個典型的HA集群中,每個NameNode是一臺獨立的服務器。在任一時刻,只有一個NameNode處于active狀態,另一個處于standby狀態。其中,active狀態的NameNode負責所有的客戶端操作,standby狀態的NameNode處于從屬地位,維護著數據狀態,隨時準備切換。

兩個NameNode為了數據同步,會通過一組稱作JournalNodes的獨立進程進行相互通信(JournalNodes依賴于Zookeeper來實現兩個NameNode之間數據的同步功能)。當active狀態的NameNode的命名空間有任何修改時,會告知大部分的JournalNodes進程。standby狀態的NameNode有能力讀取JNs中的變更信息,并且一直監控edit log的變化,把變化應用于自己的命名空間。standby可以確保在集群出錯時,命名空間狀態已經完全同步了,如圖所示
在這里插入圖片描述

為了確保快速切換,standby狀態的NameNode有必要知道集群中所有數據塊的位置。為了做到這點,所有的datanodes必須配置兩個NameNode的地址,發送數據塊位置信息和心跳給他們兩個。

對于HA集群而言,確保同一時刻只有一個NameNode處于active狀態是至關重要的。否則,兩個NameNode的數據狀態就會產生分歧,可能丟失數據,或者產生錯誤的結果。為了保證這點,JNs必須確保同一時刻只有一個NameNode可以向自己寫數據。

JournalNode服務器:運行的JournalNode進程非常輕量,可以部署在其他的服務器上。注意:必須允許至少3個節點。當然可以運行更多,但是必須是奇數個,如3、5、7、9個等等。當運行N個節點時,系統可以容忍至少(N-1)/2(N至少為3)個節點失敗而不影響正常運行

在HA集群中,standby狀態的NameNode可以完成checkpoint操作,因此沒必要配置Secondary NameNode、CheckpointNode、BackupNode。如果真的配置了,還會報錯。

問題三:兩個datanode節點互相排斥怎么解決(集群無法識別新加入的Datanode)?

之前有兩個datanode節點,這里新添加了一個datanode節點,但是在集群中卻未表現出來。
到對應的管理界面只看到兩個存活的節點
Live Nodes 為 2,
Dead Nodes 為 0
然后我切換到Datanodes界面查看:
發現mini2和mini3存活, 我就刷新了幾下, 發現變成了mini3和mini4存活了, 我一直刷呀刷,發現有mini2就沒有mini4,有mini4就沒有mini2, mini2與mini4互相排斥,
然后我上傳了一個文件,結果mini2掛掉了 , 經過排查發現是我的
/root/apps/hadoop/tmp/dfs/data/current目錄下了VERSION文件里:
在這里插入圖片描述
在這里插入圖片描述
mini2和mini4的 datanodeUuid是一樣的(在虛擬機中玩集群添加節點的時候直接克隆虛擬機,雖然將新增的節點配置好后,但是由于對應datanode的配置信息(如版本信息)依舊是別的的節點的配置信息,所以才會出現這種情況,這時候只需要將之前節點生成的datanode的配置信息刪除,讓該節點重新生成配置信息即可)原來是datanode的Uuid沖突了
解決方法:
把mini4的VERSION文件刪除,重啟datanode即可
停止: hadoop-daemon.sh stop datanode
啟動: hadoop-daemon.sh start datanode

問題四:如何修改Zookeeper日志 zookeeper.out輸出路徑

如果不做修改,默認zookeeper的日志輸出信息都打印到了zookeeper.out文件中,這樣輸出路徑和大小沒法控制,因為日志文件沒有輪轉。所以需要修改日志輸出方式。
具體操作如下:
1、修改$ZOOKEEPER_HOME/bin目錄下的zkEnv.sh文件,ZOO_LOG_DIR指定想要輸出到哪個目錄,ZOO_LOG4J_PROP,指定INFO,ROLLINGFILE的日志APPENDER.

2、修改$ZOOKEEPER_HOME/conf/log4j.properties文件的:
zookeeper.root.logger的值與前一個文件的ZOO_LOG4J_PROP 保持一致,該日志配置是以日志文件大小輪轉的,如果想要按照天輪轉,可以修改為DaliyRollingFileAppender

問題五:HDFS block丟失過多進入安全模式(safe mode)的解決方法

因磁盤空間不足,內存不足,系統掉電等其他原因導致dataNode datablock丟失。
解決辦法(Solution)*

安裝HDFS客戶端,并執行如下命令:

步驟 1     執行命令退出安全模式:hadoop dfsadmin -safemode leave步驟 2     執行健康檢查,刪除損壞掉的block。  hdfs fsck  /  -delete

注意: 這種方式會出現數據丟失,損壞的block會被刪掉。

問題六:datanode數據存放位置研究

Datanode中數據實際存放位置:

自定義路徑+dfs/data/current/BP-190247797-192.168.10.220-1460040893538/current/finalized

一、curren

/home/zjsd/hadoopdata/dfs/data/current/BP-190247797-192.168.10.220-1460040893538/current/如圖:
在這里插入圖片描述

dfsUsed:該文件中存放該DataNode容量被占有的大小&&DataNode總容量
Finalized:數據實際所在的位置
VERSION:數據塊的版本信息
DataNode空間存儲的ID
layoutVersion:軟件所處的版本

二、Datanode的版本信息:
在這里插入圖片描述

參考:https://blog.csdn.net/wbzhang2594/article/details/53893275
參考:https://blog.csdn.net/kiwi_kid/article/details/53514314
參考:
https://blog.csdn.net/csdm_admin/article/details/63253538?utm_source=itdadao&utm_medium=referral
參考:https://blog.csdn.net/wangshuminjava/article/details/79306358
參考:https://blog.csdn.net/czp11210/article/details/76695745
參考:https://blog.csdn.net/xiaoshunzi111/article/details/51239679

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

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

相關文章

JAVA的SSH框架登錄注冊

Struts 的MVC設計模式可以使我們的邏輯變得很清晰,主要負責表示層的顯示。 Spring 的IOC和AOP可以使我們的項目在最大限度上解藕。 hibernate的就是實體對象的持久化了, 數據庫的封裝。 項目截圖:(代碼是按照項目截圖上傳的,直接對號入座即可…

Visual Studio Code 前端調試不完全指南

本文最初發布于我的個人博客:咀嚼之味Visual Studio Code (以下簡稱 vscode) 如今已經代替 Sublime,成為前端工程師們最喜愛的代碼編輯器。它作為一個大型的開源項目,不斷推陳出新;社區中涌現出大量優質的插件,以支持我…

MySQL中(delete、truncate、drop) 的區別

delete、truncate、drop的用法 MySQL 數據表中delete刪除數據的通用語法: ###刪除 students_tbl 表中 student_id 為3 的記錄: delete from students_tbl where student_id3; MySQL 數據表中truncate刪除數據的通用語法: ###刪除 students_…

機器學習之LDA主題模型算法

文章目錄1、知道LDA的特點和應用方向1.1、特點1.2、應用方向2、知道Beta分布和Dirichlet分布數學含義3、了解共軛先驗分布4、知道先驗概率和后驗概率5、知道參數α值的大小對應的含義6、掌握LDA主題模型的生成過程7、知道超參數α等值的參考值8、LDA總結1、知道LDA的特點和應用…

分別寫出引入CSS的3種方式, 特點, 優先級

第一&#xff1a;css的三種引入方式 1.行內樣式 最直接最簡單的一種&#xff0c;直接對HTML標簽使用style""&#xff0c;例如&#xff1a; <p style"color:#F00; "></p> 缺點&#xff1a;HTML頁面不純凈&#xff0c;文件體積大&#xff0c…

[Go] Template 使用簡介

Golang 提供了兩個標準庫用來處理模板 text/template 和 html/template。我們使用 html/template 格式化 html 字符。 模板引擎 模板引擎很多&#xff0c;Python 的 jinja&#xff0c;nodejs 的 jade 等都很好。所謂模板引擎&#xff0c;則將模板和數據進行渲染的輸出格式化后的…

內存泄露監測

2019獨角獸企業重金招聘Python工程師標準>>> iOS 內存泄露監測 144 作者 謝謝生活 已關注 2017.05.19 17:38* 字數 4235 閱讀 209評論 0喜歡 6 iOS可能存在的內存泄露&#xff1a;block 循環引用。當一個對象有一個block屬性&#xff0c;而block屬性又引用這個對象…

玩Azkaban跳過的坑

文章目錄一號坑&#xff1a;啟動Azkaban報錯&#xff1a;User xml file conf/azkaban-users.xml doesnt exist.二號坑&#xff1a;報錯&#xff1a;failed SslSocketConnector0.0.0.0:8443: java.io.FileNotFoundException: /home/hadoop/app/azkaban/azkaban-web-2.5.0/bin/ke…

兩種解除禁止右鍵、選中、復制的方法

我在網上找的 兩種解除禁止右鍵、選中、復制的方法 1、直接存到書簽點擊即可 javascript:(function(){var docdocument;var bddoc.body;bd.onselectstartbd.oncopybd.onpastebd.onkeydownbd.oncontextmenubd.onmousemovebd.onselectstartbd.ondragstartdoc.onselectstartdoc.o…

刪除節點removeChild()

http://www.imooc.com/code/1700 刪除節點removeChild() removeChild() 方法從子節點列表中刪除某個節點。如刪除成功&#xff0c;此方法可返回被刪除的節點&#xff0c;如失敗&#xff0c;則返回 NULL。 語法: nodeObject.removeChild(node) 參數: node &#xff1a;必需&…

機器學習自主解決安全威脅離我們還有多遠?

曾經聽見不止一次這樣的問題&#xff1a; “機器學習會替代基于人工經驗規則的安全解決方案么&#xff1f;”把這個問題放在去年來看&#xff0c;我們已經得到了非常多的討論甚至是一些已經實際應用的解決方案&#xff0c;對于人工智能在安全以及其它各種對數據進行價值挖掘的場…

Linux執行定時任務(crontab)遇到的坑

文章目錄前言&#xff1a;1、建立定時任務的兩種方式1.1、crontab -e1.2、vi /etc/ crontab2、兩種方法的區別2.1、用戶級2.2、系統級3、解決辦法前言&#xff1a; 之前第一次要在生產環境部署定時任務&#xff0c;無奈的是&#xff0c;博主對定時任務這塊還是個小白&#xff…

Vue:解決[Vue warn]: Failed to resolve directive: modle (found in Anonymous)

解決問題 [Vue warn]: Failed to resolve directive: modle (found in <ComponentA>) console.error(("[Vue warn]: " msg trace)); 原因是 我把model 寫成了 modle 這類錯誤一般是單詞寫錯了 (found in <Anonymous>) 解決思路

Oracle樹查詢及相關函數

Oracle樹查詢的最重要的就是select...start with... connect by ...prior 語法了。依托于該語法&#xff0c;我們可以將一個表形結構的中以樹的順序列出來。在下面列述了Oracle中樹型查詢的常用查詢方式以及經常使用的與樹查詢相關的Oracle特性函數等&#xff0c;在這里只涉及到…

Mysql常用函數總結

文章目錄前言&#xff1a;1、日期相關函數1.1、mysql獲取未來、現在、過去的時間&#xff1a;DATE_SUB&#xff08;&#xff09;、DATE_ADD()1.2、格式化日期&#xff1a;date_format&#xff08;&#xff09;1.3、MySQL 日期、時間相減函數&#xff1a;datediff(date1,date2),…

一行Python代碼制作動態二維碼

目錄 1、普通二維碼 2、藝術二維碼 3、動態二維碼 在GitHub上發現了一個比較有意思的項目&#xff0c;只需要一行Python代碼就可以快捷方便生成普通二維碼、藝術二維碼(黑白/彩色)和動態GIF二維碼。 GitHub網站參加&#xff1a;https://github.com/sylnsfar/qrcode 用法比…

Vue常用經典開源項目匯總參考-海量

Vue常用經典開源項目匯總參考-海量 Vue是什么&#xff1f; Vue.js&#xff08;讀音 /vju?/, 類似于 view&#xff09; 是一套構建用戶界面的 漸進式框架。與其他重量級框架不同的是&#xff0c;Vue 采用自底向上增量開發的設計。Vue 的核心庫只關注視圖層&#xff0c;并且非常…

鼠標移入視頻播放,鼠標移出播放停止,恢復到原來狀態

<!doctype html> <html lang"en"> <head><meta charset"UTF-8"><title>鼠標移入視頻播放&#xff0c;鼠標移出播放停止&#xff0c;恢復到原來狀態</title><link rel"shortcut icon" href"http://f…

Pycharm常用高效技巧總結

文章目錄1、PyCharm如何自動生成函數注釋2、pycharm運行程序時在Python console窗口中運行3、Pycharm在創建py文件時,如何自動添加文件頭注釋4、Pycharm配置遠程調試5、pycharm同一目錄下無法import明明已經存在的.py文件1、PyCharm如何自動生成函數注釋 一般在函數def()行下敲…

EntityFramework中常用的數據刪除方式

最近在學EF&#xff0c;目前了解到刪除操作有三種方式&#xff0c; 第一&#xff0c;官方推薦的先查詢數據&#xff0c;再根據查詢的對象&#xff0c;刪除對象。 這是第一種&#xff0c;官方推薦 第二&#xff0c;自己創建一個對象&#xff0c;然后附加&#xff0c;然后刪除。 …