W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Apache HDFS的常規(guī)配置指南不在本文中進(jìn)行詳細(xì)的介紹。有關(guān)配置HDFS的詳細(xì)信息,請(qǐng)參閱https://hadoop.apache.org/上提供的文檔。本節(jié)以HBase的形式介紹HDFS。
在大多數(shù)情況下,HBase將其數(shù)據(jù)存儲(chǔ)在Apache HDFS中。這包括包含數(shù)據(jù)的HFile,以及在將數(shù)據(jù)寫入HFile之前存儲(chǔ)數(shù)據(jù)并預(yù)防RegionServer崩潰的預(yù)寫日志(WAL)。HDFS為HBase中的數(shù)據(jù)提供可靠性和保護(hù),因?yàn)樗欠植际降?。為了以最高效率運(yùn)行,HBase需要在本地提供數(shù)據(jù)。因此,在每個(gè)RegionServer上運(yùn)行HDFS DataNode是一種很好的做法。
HBase是使用HDFS DFSClient
類的HDFS客戶端,對(duì)此類的引用顯示在HBase日志中,并帶有其他HDFS客戶端日志消息。
與HBase相關(guān)的一些HDFS配置需要在HDFS(服務(wù)器)端完成。其他必須在HBase內(nèi)完成(在客戶端)。需要在服務(wù)器端和客戶端設(shè)置其他設(shè)置。
寫入時(shí),HDFS將通信從一個(gè)DataNode傳輸?shù)搅硪粋€(gè)DataNode。HBase使用HDFS客戶端類與HDFS NameNode和DataNode進(jìn)行通信。DataNode之間的通信問(wèn)題記錄在HDFS日志中,而不是HBase日志中。
HBase使用ipc.Client
接口和DataNode
類與DataNode進(jìn)行通信。對(duì)這些的引用將出現(xiàn)在HBase日志中。這些通信信道中的每一個(gè)使用不同的端口(默認(rèn)為50010和50020)。通過(guò)dfs.datanode.address
和dfs.datanode.ipc.address
參數(shù)在HDFS配置中配置端口。
在對(duì)HBase中的HDFS問(wèn)題進(jìn)行故障排除時(shí),請(qǐng)檢查兩個(gè)位置中的日志是否存在錯(cuò)誤。
默認(rèn)情況下,HDFS不會(huì)將節(jié)點(diǎn)標(biāo)記為已死,直到630秒無(wú)法訪問(wèn)。在Hadoop 1.1和Hadoop 2.x中,可以通過(guò)啟用對(duì)陳舊DataNode的檢查來(lái)緩解此問(wèn)題,但默認(rèn)情況下禁用此檢查。您可以通過(guò)dfs.namenode.avoid.read.stale.datanode
和dfs.namenode.avoid.write.stale.datanode settings
單獨(dú)啟用讀取和寫入檢查。陳舊的DataNode是dfs.namenode.stale.datanode.interval
(默認(rèn)為30秒)無(wú)法訪問(wèn)的。避免過(guò)時(shí)的數(shù)據(jù)節(jié)點(diǎn),并將其標(biāo)記為讀取或?qū)懭氩僮鞯淖詈罂赡苣繕?biāo)。
您可以配置各種重試和超時(shí)的設(shè)置。請(qǐng)始終參考HDFS文檔以獲取當(dāng)前建議和默認(rèn)值。這里列出了一些對(duì)HBase很重要的設(shè)置。默認(rèn)值是Hadoop 2.3的最新版本。查看Hadoop文檔以獲取最新的值和建議。
HDFS平衡器嘗試在DataNode中均勻分布HDFS塊。HBase依賴于壓縮來(lái)在區(qū)域分裂或失敗后恢復(fù)局部性。這兩種類型的平衡不能很好地協(xié)同工作。
過(guò)去,普遍接受的建議是關(guān)閉HDFS負(fù)載均衡器并依賴HBase均衡器,因?yàn)镠DFS均衡器會(huì)降低局部性。如果您的HDFS版本低于2.7.1,此建議仍然有效。
HDFS-6133通過(guò)將dfs.datanode.block-pinning.enabled
屬性設(shè)置true
為HDFS服務(wù)配置,可以從HDFS負(fù)載均衡器中排除優(yōu)先節(jié)點(diǎn)(固定)塊 。
可以通過(guò)將HBase均衡器類(CONF: hbase.master.loadbalancer.class
)切換到org.apache.hadoop.hbase.favored.FavoredNodeLoadBalancer
來(lái)啟用HDFS的favorites -nodes特性。
提示:HDFS-6133在HDFS 2.7.0及更高版本中可用,但HBase不支持在HDFS 2.7.0上運(yùn)行,因此您必須使用HDFS 2.7.1或更高版本才能在HBase中使用此功能
客戶端(HBASE)和HDFS DataNode之間發(fā)生連接超時(shí)。它們可能在建立連接,嘗試讀取或嘗試寫入時(shí)發(fā)生。下面的兩個(gè)設(shè)置組合使用,并影響DFSClient和DataNode,ipc.cClient和DataNode之間的連接,以及兩個(gè)DataNode之間的通信。
dfs.client.socket-timeout
(默認(rèn)值:60000)建立連接或讀取時(shí)客戶端連接超時(shí)之前的時(shí)間。該值以毫秒表示,因此默認(rèn)值為60秒。
dfs.datanode.socket.write.timeout
(默認(rèn)值:480000)寫入操作超時(shí)之前的時(shí)間量。默認(rèn)值為8分鐘,以毫秒表示。
日志中經(jīng)常會(huì)出現(xiàn)以下類型的錯(cuò)誤。
INFO HDFS.DFSClient: Failed to connect to /xxx50010, add to deadNodes and continue java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=/region-server-1:50010]::塊的所有DataNode都已死,無(wú)法恢復(fù)。以下是導(dǎo)致此錯(cuò)誤的事件序列:
INFO org.apache.hadoop.HDFS.DFSClient: Exception in createBlockOutputStream java.net.SocketTimeoutException: 69000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=/ xxx:50010]::此類錯(cuò)誤表示寫入問(wèn)題。在這種情況下,主人想要分割日志。它沒(méi)有本地DataNode,因此它嘗試連接到遠(yuǎn)程DataNode,但DataNode已經(jīng)死了。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: