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