故障排除和調(diào)試HBase:HBase和HDFS

2018-12-07 11:13 更新

HBase和HDFS

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的重要信息和指南

HBase是HDFS的客戶端

HBase是使用HDFS DFSClient類的HDFS客戶端,對此類的引用顯示在HBase日志中,并帶有其他HDFS客戶端日志消息。

在多個地方需要配置

與HBase相關(guān)的一些HDFS配置需要在HDFS(服務(wù)器)端完成。其他必須在HBase內(nèi)完成(在客戶端)。需要在服務(wù)器端和客戶端設(shè)置其他設(shè)置。

影響HBase的寫入錯誤可能會記錄在HDFS日志中而不是HBase日志中。

寫入時,HDFS將通信從一個DataNode傳輸?shù)搅硪粋€DataNode。HBase使用HDFS客戶端類與HDFS NameNode和DataNode進行通信。DataNode之間的通信問題記錄在HDFS日志中,而不是HBase日志中。

HBase使用兩個不同的端口與HDFS通信

HBase使用ipc.Client接口和DataNode類與DataNode進行通信。對這些的引用將出現(xiàn)在HBase日志中。這些通信信道中的每一個使用不同的端口(默認為50010和50020)。通過dfs.datanode.addressdfs.datanode.ipc.address參數(shù)在HDFS配置中配置端口。

可能會在HBase、HDFS其中一個,或兩者中記錄錯誤

在對HBase中的HDFS問題進行故障排除時,請檢查兩個位置中的日志是否存在錯誤。

HDFS需要一段時間才能將節(jié)點標(biāo)記為已死。您可以配置HDFS以避免使用陳舊的DataNode。

默認情況下,HDFS不會將節(jié)點標(biāo)記為已死,直到630秒無法訪問。在Hadoop 1.1和Hadoop 2.x中,可以通過啟用對陳舊DataNode的檢查來緩解此問題,但默認情況下禁用此檢查。您可以通過dfs.namenode.avoid.read.stale.datanodedfs.namenode.avoid.write.stale.datanode settings單獨啟用讀取和寫入檢查。陳舊的DataNode是dfs.namenode.stale.datanode.interval(默認為30秒)無法訪問的。避免過時的數(shù)據(jù)節(jié)點,并將其標(biāo)記為讀取或?qū)懭氩僮鞯淖詈罂赡苣繕?biāo)。

HDFS重試和超時的設(shè)置對HBase很重要

您可以配置各種重試和超時的設(shè)置。請始終參考HDFS文檔以獲取當(dāng)前建議和默認值。這里列出了一些對HBase很重要的設(shè)置。默認值是Hadoop 2.3的最新版本。查看Hadoop文檔以獲取最新的值和建議。

HBase Balancer和HDFS Balancer不兼容

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)死了。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號