hadoop之 exceeds the limit of concurrent xcievers處理

張衝andy發表於2018-02-01


dfs.datanode.max.transfer.threads: 預設 4096 < 2.0之前該引數為dfs.datanode.max.xcievers >
解釋:Specifies the maximum number of threads to use for transferring data in and out of the DN.

表示datanode上負責進行檔案操作的執行緒數。如果需要處理的檔案過多,而這個引數設定得過低就會有一部分檔案處理不過來,就會報異常。
linux系統中所有的檔案操作都被繫結到一個socket上,進一步具體可以把他看做是一個執行緒。而這個引數就是指定這種執行緒的個數。
在datanode裡面有一個專門的執行緒組來維護這些執行緒,同時有一個守護執行緒來監視這個執行緒組的體量,它負責監測執行緒數量是否到達上線,
超過就丟擲異常,則需調大 hdfs-site.xml 檔案中的 dfs.datanode.max.transfer.threads 。

dfs.datanode.max.transfer.threads 引數設定過小,datanode 異常:
ERROR org.apache.hadoop.dfs.DataNode: DatanodeRegistration(10.10.10.53:50010,
storageID=DS-1570581820-10.10.10.53-50010-1224117842339,infoPort=50075, ipcPort=50020)
:DataXceiver: java.io.IOException: xceiverCount 258 exceeds the limit of concurrent xcievers 256

注意:dfs.datanode.max.transfer.threads 數目不能大於系統開啟檔案數的設定,即/etc/security/limits.conf中nofile的數值。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2150739/,如需轉載,請註明出處,否則將追究法律責任。

相關文章