core-site.xml
重要參數
hadoop.tmp.dir=/tmp/hadoop-${user.name}
Hadoop的臨時目錄,其它目錄會基於此路徑。本地目錄。 只可以設置一個值;建議設置到一個足夠空間的地方,而不是默認的/tmp下 服務端參數,修改需重啟
hadoop.security.authorization=false
安全服務驗證是否開啟
內網環境不建議開啟。安全性要求高的環境需要開啟
io.file.buffer.size=4096
使用sequence files時,讀寫文件時使用的緩沖大小。應該設置為內存頁的倍數
fs.defaultFS=file:///
hadoop使用的文件系統名稱。URI形式。uri's的scheme需要由(fs.SCHEME.impl)指定文件系統實現類。 uri's的authority部分用來指定host, port等。默認是本地文件系統。 HA方式,這里設置服務名,例如:hdfs://mycluster1 HDFS的客戶端訪問HDFS需要此參數。
fs.trash.interval=0
以分鍾為單位的垃圾回收時間,垃圾站中數據超過此時間,會被刪除。如果是0,垃圾回收機制關閉。
可以配置在服務器端和客戶端。如果在服務器端配置trash無效,會檢查客戶端配置。如果服務器端配置有效,客戶端配置會忽略。 建議開啟,建議4320(3天) 垃圾回收站,如有同名文件被刪除,會給文件順序編號,例如:a.txt,a.txt(1)
fs.trash.checkpoint.interval=0
以分鍾為單位的垃圾回收檢查間隔。應該小於或等於fs.trash.interval。如果是0,值等同於fs.trash.interval。每次檢查器運行,會創建新的檢查點。
建議設置為60(1小時)
dfs.ha.fencing.methods=null
HDFS的HA功能的防腦裂方法。可以是內建的方法(例如shell和sshfence)或者用戶定義的方法。建議使用sshfence(hadoop:9922),括號內的是用戶名和端口,注意,這需要NN的2台機器之間能夠免密碼登陸 fences是防止腦裂的方法,保證NN中僅一個是Active的,如果2者都是Active的,新的會把舊的強制Kill。
dfs.ha.fencing.ssh.private-key-files=null
使用sshfence時,SSH的私鑰文件。 使用了sshfence,這個必須指定
ha.zookeeper.quorum=null
Ha功能,需要一組zk地址,用逗號分隔。被ZKFailoverController使用於自動失效備援failover
ha.zookeeper.session-timeout.ms=5000
ZK連接超時。ZKFC連接ZK時用。設置一個小值可以更快的探測到服務器崩潰(crash),但也會更頻繁的觸發失效備援,在傳輸錯誤或者網絡不暢時。建議10s-30s 日志中出現這樣的報錯時,需要配置: 2020-03-07 19:16:10,534 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: node3/10.0.0.33:8485. Already tried 9 time(s);
retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS) 2020-03-07 19:16:10,536 WARN org.apache.hadoop.hdfs.server.namenode.FSEditLog: Unable to determine input streams from QJM to [10.0.0.31:8485, 10.0.0.32:8485, 10.0.0.33:8485]. Skipping. org.apache.hadoop.hdfs.qjournal.client.QuorumException: Got too many exceptions to achieve quorum size 2/3. 3 exceptions thrown: 原因是namenode連接不上JournalNode的IPC。先啟動JournalNode再啟動namenode就可以了
hadoop.http.staticuser.user=dr.who
在網頁界面訪問數據使用的用戶名。默認值是一個不真實存在的用戶,此用戶權限很小,不能訪問不同用戶的數據。這保證了數據安全。
也可以設置為hdfs和hadoop等具有較高權限的用戶,但會導致能夠登陸網頁界面的人能看到其它用戶數據。實際設置請綜合考慮。如無特殊需求。使用默認值就好
fs.permissions.umask-mode=22
在創建文件和目錄時使用此umask值(用戶掩碼)。類linux上的文件權限掩碼。可以使用8進制數字也可以使用符號 例如:"022" (8進制,等同於以符號表示的u=rwx,g=r-x,o=r-x),或者"u=rwx,g=rwx,o="(符號法,等同於8進制的007)。注意,8進制的掩碼,和實際權限設置值正好相反,建議使用符號表示法,描述更清晰
hadoop.http.authentication.type=simple
Oozie Http終端安全驗證。可選值:simple | kerberos |#AUTHENTICATION_HANDLER_CLASSNAME#
建議simple,關閉驗證
非重要參數
關於io設置參數
io.native.lib.available=true
是否啟動Hadoop的本地庫,默認啟用。本地庫可以加快基本操作,例如IO,壓縮等。
io.bytes.per.checksum=512
每次進行校驗和檢查的字節數。一定不能大於io.file.buffer.size.
io.skip.checksum.errors=false
是否跳過校驗和錯誤,默認是否,校驗和異常時會拋出錯誤。
io.serializations=org.apache.hadoop.io.serializer.WritableSerialization,org.apache.hadoop.io.serializer.avro.AvroSpecificSerialization,org.apache.hadoop.io.serializer.avro.AvroReflectSerialization
序列化類列表,可以被用來獲取序列化器和反序列化器(serializers and deserializers)。
io.seqfile.local.dir=${hadoop.tmp.dir}/io/local
本地文件目錄。sequence file在merge過程中存儲內部數據的地方。可以是逗號分隔的一組目錄。最好在不同磁盤以分散IO。實際不存在的目錄會被忽略。
io.map.index.skip=0
跳過的索引實體數量在entry之間。默認是0。設置大於0的值可以用更少的內存打開大MapFiles。注意:MpaFile是一組Sequence文件,是排序后的,帶內部索引的文件
io.map.index.interval=128
MapFile包含兩個文件,數據文件和索引文件。每io.map.index.interval個記錄寫入數據文件,一條記錄(行key,數據文件位置)寫入索引文件。
io.seqfile.compress.blocksize=1000000 1
SequenceFiles以塊壓縮方式壓縮時,塊大小大於此值時才啟動壓縮。
io.seqfile.lazydecompress=true
懶惰解壓,僅在必要時解壓,僅對塊壓縮的SequenceFiles有效。
io.seqfile.sorter.recordlimit=1000000
在SequenceFiles.Sorter spill過程中,保存在內存中的記錄數
io.mapfile.bloom.size=1048576
在BloomMapFile使用的布隆過濾器內存大小。
io.mapfile.bloom.error.rate=0.005
BloomMapFile中使用布隆過濾器失敗比率. 如果減少這個值,使用的內存會成指數增長。
IPC參數
ipc.client.idlethreshold=4000
連接數閥值,超過此值,需要進行空閑連接檢查
ipc.client.kill.max=10
定義客戶端最大數量,超過會被斷開連接
ipc.client.connection.maxidletime=10000
毫秒,最大時間,超過后客戶端會斷開和服務器的連接。
ipc.client.connect.max.retries=10
客戶端連接重試次數。
ipc.client.connect.max.retries.on.timeouts=45
在連接超時后,客戶端連接重試次數
ipc.server.listen.queue.size=128
定義服務器端接收客戶端連接的監聽隊列長度
機架感知配置參數
net.topology.node.switch.mapping.impl=org.apache.hadoop.net.ScriptBasedMapping
機架感知實現類。
net.topology.script.file.name=null
配合ScriptBasedMapping使用。腳本文件。此腳本文件,輸入是ip地址,輸出是機架路徑。
net.topology.script.number.args=100
機架感知腳本文件的參數最大數量。腳本每次運行被傳遞的參數,每個參數是一個ip地址
net.topology.table.file.name=null
在net.topology.script.file.name被設置為 org.apache.hadoop.net.TableMapping時,可以使用此配置。
文件格式是一個有兩個列的文本文件,使用空白字符分隔。第一列是DNS或IP地址,第二列是機架路徑。如無指定,使用默認機架(/default-rack)
高可用參數配置
dfs.ha.fencing.ssh.connect-timeout=30000
SSH連接超時,毫秒,僅適用於內建的sshfence fencer。
ha.zookeeper.parent-znode=/hadoop-ha
ZK失效備援功能,需要在ZK上創建節點,這里是根節點的名稱。ZKFC會在這下面工作。
注意,NameService ID會 被寫到此節點下,所以即便是開啟federation功能,也僅需要指定一個值。
ha.zookeeper.acl=world:anyone:rwcda
ZKFC創建的ZK節點的訪問控制權限設置。可以多個,逗號分隔。此設置和ZK的CLI使用相同的格式。
ha.zookeeper.auth=null
ZK操作時的權限驗證。
ha.health-monitor.connect-retry-interval.ms=1000
HA功能的健康監控連接重試間隔
ha.health-monitor.check-interval.ms=1000
HA功能的健康監控連接間隔
ha.health-monitor.sleep-after-disconnect.ms=1000
HA功能的健康監控,在因網絡問題失去連接后休眠多久。用於避免立即重試,此時網絡問題仍在,沒有意義
ha.health-monitor.rpc-timeout.ms=45000
HA功能健康監控的超時時間,毫秒
ha.failover-controller.new-active.rpc-timeout.ms=60000
FC等待新的NN變成active狀態的超時時間。
ha.failover-controller.graceful-fence.rpc-timeout.ms=5000
FC等待舊的active變成standby的超時時間。
ha.failover-controller.graceful-fence.connection.retries=1
FC在做完美隔離是的連接重試次數(graceful fencing)
ha.failover-controller.cli-check.rpc-timeout.ms=20000
手動運行的FC功能(從CLI)等待健康檢查、服務狀態的超時時間。
文件系統配置參數
fs.AbstractFileSystem.hdfs.impl=org.apache.hadoop.fs.Hdfs
文件系統實現類:hdfs
fs.df.interval=60000
磁盤使用統計刷新間隔,以毫秒為單位
fs.automatic.close=true
默認的,文件系統實例在程序退出時自動關閉,通過JVM shutdown hook方式。可以把此屬性設置為false取消這種操作。這是一個高級選項,需要使用者特別關注關閉順序。不要關閉
hdfs-default.xml
重要參數
dfs.datanode.address=0.0.0.0:50010
DN服務地址和端口,用於數據傳輸。0表示任意空閑端口。
dfs.datanode.http.address=0.0.0.0:50075
DN的HTTP服務地址和端口。0表示任意空閑端口。
dfs.datanode.ipc.address=0.0.0.0:50020
DN的IPC地址和端口。0表示任意空閑端口。
dfs.datanode.handler.count=10
DN的服務線程數。這些線程僅用於接收請求,處理業務命令
dfs.datanode.du.reserved=0
每個磁盤(volume)的保留空間,字節。要注意留足夠的空間給非HDFS文件使用。建議保留磁盤容量的5%或者50G以上
dfs.datanode.data.dir=file://${hadoop.tmp.dir}/dfs/data
本地磁盤目錄,HDFS數據應該存儲Block的地方。可以是逗號分隔的目錄列表(典型的,每個目錄在不同的磁盤)。
這些目錄被輪流使用,一個塊存儲在這個目錄,下一個塊存儲在下一個目錄,依次循環。每個塊在同一個機器上僅存儲一份。不存在的目錄被忽略。必須創建文件夾,否則被視為不存在。
dfs.client.block.write.replace-datanode-on-failure.enable=true
在進行pipeline寫數據(上傳數據的方式)時,如果DN或者磁盤故障,客戶端將嘗試移除失敗的DN,然后寫到剩下的磁盤。
一個結果是,pipeline中的DN減少了。這個特性是添加新的DN到pipeline。這是一個站點范圍的選項。當集群規模非常小時,例如3個或者更小,集群管理者可能想要禁止掉此特性。
dfs.client.block.write.replace-datanode-on-failure.policy=DEFAULT
此屬性僅在dfs.client.block.write.replace-datanode-on-failure.enable設置為true時有效。 ALWAYS: 總是添加新的DN NEVER: 從不添加新的DN DEFAULT: 設r是副本數,n是要寫的DN數。在r>=3並且floor(r/2)>=n或者r>n(前提是文件是hflushed/appended)時添加新的DN。
dfs.datanode.failed.volumes.tolerated=0
可以接受的卷的失敗數量。默認值0表示,任一個卷失敗都會導致DN關閉。
建議設置此值,避免個別磁盤問題。如果此值超過真實磁盤數,將會報錯,啟動失敗
dfs.datanode.balance.bandwidthPerSec=1048576
在做數據平衡時,每個DN最大帶寬占用,每秒字節。默認值是1M。建議可以到10M
dfs.heartbeat.interval=3
DN的心跳間隔,秒
dfs.namenode.avoid.write.stale.datanode=FALSE
決定是否避開在臟DN上寫數據。寫操作將會避開臟DN,除非超過一個配置的比率 (dfs.namenode.write.stale.datanode.ratio)。
嘗試開啟
dfs.namenode.rpc-address=0.0.0.0:50090
NN的RPC地址和端口
dfs.namenode.http-address=0.0.0.0:50070
NN的HTTP地址和端口。0表示任意空閑端口。
dfs.namenode.name.dir=file://${hadoop.tmp.dir}/dfs/name
本地磁盤目錄,NN存儲fsimage文件的地方。可以是按逗號分隔的目錄列表,fsimage文件會存儲在全部目錄,冗余安全。
這里多個目錄設定,最好在多個磁盤,另外,如果其中一個磁盤故障,不會導致系統故障,會跳過壞磁盤。由於使用了HA,建議僅設置一個。如果特別在意安全,可以設置2個
dfs.namenode.name.dir.restore=FALSE
設置為true,允許NN嘗試恢復之前失敗的dfs.namenode.name.dir目錄。在創建checkpoint是做此嘗試。如果設置多個磁盤,建議允許
dfs.namenode.edits.dir=${dfs.namenode.name.dir}
本地文件,NN存放edits文件的目錄。可以是逗號分隔的目錄列表。edits文件會存儲在每個目錄,冗余安全。
dfs.namenode.edits.journal-plugin.qjournal=org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager
qj方式共享edits。建議使用此方式
dfs.permissions.enabled=true
是否在HDFS中開啟權限檢查。
dfs.permissions.superusergroup=supergroup
超級用戶組。僅能設置一個。
dfs.replication=3
數據塊副本數。此值可以在創建文件是設定,客戶端可以只有設定,也可以在命令行修改。不同文件可以有不同的副本數。默認值用於未指定時。
dfs.replication.max=512
最大塊副本數,不要大於節點總數。
dfs.namenode.replication.min=1
最小塊副本數。在上傳文件時,達到最小副本數,就認為上傳是成功的
dfs.blocksize=134217728
默認128M,塊大小,字節。可以使用后綴: k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa)指定大小 (就像128k, 512m, 1g, 等待)。
dfs.client.block.write.retries=3
客戶端寫數據到DN時,最大重試次數。超過重試次數就會報出錯誤。
dfs.namenode.handler.count=10
NN的服務線程數。用於處理RPC請求。
dfs.namenode.safemode.threshold-pct=0.999f
數據進入安全模式閥值,百分比,float形式,數據塊達到最小副本數(dfs.namenode.replication.min)的百分比。
值小於等於0意味着在退出安全模式前不等待數據修復。大於1的值將導致無法離開安全模式。
dfs.namenode.safemode.extension=30000
安全模式擴展存在時間,在需要的閥值達到后,毫秒。可以設置為0,或者比較短的一個時間,例如3秒
dfs.hosts=null
文件名,包含了一個host列表,允許列表內機器連到NN。必須指定完整路徑。如果值為空,全部hosts都允許連入。
dfs.hosts.exclude=null
文件名,包含了一個hosts列表,不允許列表內機器連到NN。必須指定完整路徑。如果值為空。沒有host被禁止。如果上述2個都設置並且有重合,dfs.hosts中優先級高。
dfs.stream-buffer-size=4096
文件流緩存大小。需要是硬件page大小的整數倍。在讀寫操作時,數據緩存大小。注意和core-default.xml中指定文件類型的緩存是不同的,這個是dfs共用的
dfs.namenode.num.extra.edits.retained=1000000
除最小的必須的editlog之外,額外保留的editlog文件數量。這是有用的,可以用於審核目的,或者HA設置一個遠程Standby節點並且有時可能離線時,都需要保留一個較長的backlog。 典型的,每個edit大約幾百字節,默認的1百萬editlog大約有百兆到1G。注意:早先的extra edits文件可能操作這里設置的值,因為還有其它選項,例如dfs.namenode.max.extra.edits.segments.retained 建議值:2200,約3天的
dfs.namenode.support.allow.format=true
NN是否允許被格式化?在生產系統,把它設置為false,阻止任何格式化操作在一個運行的DFS上。
建議初次格式化后,修改配置禁止
dfs.client.failover.max.attempts=15
專家設置。客戶端失敗重試次數。
dfs.client.failover.connection.retries=0
專家設置。IPC客戶端失敗重試次數。在網絡不穩定時建議加大此值
dfs.client.failover.connection.retries.on.timeouts=0
專家設置。IPC客戶端失敗重試次數,此失敗僅指超時失敗。在網絡不穩定時建議加大此值
dfs.nameservices=null
nameservices列表。逗號分隔。
我們常用的僅配置一個,啟動federation功能需要配置多個
dfs.nameservice.id=null
nameservice id,如果沒有配置或者配置多個,由匹配到的本地節點地址配置的IP地址決定。我們進配置一個NS的情況下,建議這里不配置
dfs.ha.namenodes.EXAMPLENAMESERVICE=null
包含一個NN列表。EXAMPLENAMESERVICE是指具體的nameservice名稱,通常就是dfs.nameservices中配置的。值是預備配置的NN的ID。
ID是自己取的,不重復就可以,例如nn1,nn2
dfs.namenode.checkpoint.max-retries=3
snn請求nn的檢查點重試次數
dfs.namenode.checkpoint.txns=1000000
多少次事務開始checkpoint
dfs.namenode.checkpoint.period=3600
兩次checkpoint的間隔時間,秒
dfs.ha.namenode.id=null
NN的ID,如果沒有配置,由系統決定。通過匹配本地節點地址和配置的地址。
這里設置的是本機的NN的ID(此配置僅對NN生效),由於要配置2個NN,
建議沒有特殊需要,這里不進行配置
dfs.ha.automatic-failover.enabled=FALSE
是否開啟自動故障轉移。
建議開啟,true
dfs.journalnode.rpc-address=0.0.0.0:8485
JournalNode RPC服務地址和端口
dfs.journalnode.http-address=0.0.0.0:8480
JournalNode的HTTP地址和端口。端口設置為0表示隨機選擇。
dfs.namenode.audit.loggers=default
審查日志的實現類列表,能夠接收audit事件。它們需要實現 org.apache.hadoop.hdfs.server.namenode.AuditLogger接口。
默認值"default"可以用於引用默認的audit logger, 它使用配置的日志系統。安裝客戶自己的audit loggers可能影響NN的穩定性和性能。 建議default,開啟
影像性能關鍵參數
dfs.namenode.fs-limits.max-component-length=0
路徑中每個部分的最大字節長度(目錄名,文件名的長度)。0表示不檢查長度。長文件名影響性能
dfs.namenode.fs-limits.max-directory-items=0
設置每個目錄最多擁有多少個子目錄或者文件。0表示無限制。同一目錄下子文件和目錄多影響性能
dfs.namenode.fs-limits.min-block-size=1048576
最小的Block大小,字節。在NN創建時強制驗證。避免用戶設定過小的Block Size,導致過多的Block,這非常影響性能。
dfs.namenode.fs-limits.max-blocks-per-file=1048576
每個文件最大的Block數。在NN寫時強制檢查。用於防止創建超大文件。
非重要參數
dfs.client.socket-timeout=60*1000
dfs.datanode.socket.write.timeout=8*60*1000
dfs.datanode.socket.reuse.keepalive=1000
dfs.namenode.logging.level=info
DFS的NN的日志等級。值可以是:info,dir(跟蹤命名空間變動),"block" (跟蹤塊的創建刪除,replication變動),或者"all".
dfs.namenode.replication.considerLoad=true
設定在選擇存放目標時是否考慮負載。默認true
dfs.default.chunk.view.size=32768
在瀏覽器中查看一個文件時,可以看到的字節數。
dfs.block.access.token.enable=FALSE
訪問DN時是否驗證訪問令牌。建議false,不檢查
dfs.datanode.data.dir.perm=700
本地數據目錄權限設定。8進制或者符號方式都可以。
dfs.blockreport.intervalMsec=21600000
數據塊匯報間隔,毫秒,默認是6小時。
dfs.blockreport.initialDelay=0
第一次數據塊匯報時延遲,秒。目的是減輕NN壓力?
dfs.datanode.directoryscan.interval=21600
DN的數據塊掃描間隔,秒。磁盤上數據和內存中數據調整一致。
dfs.datanode.directoryscan.threads=1
線程池要有多少線程用來並發的壓縮磁盤的匯報數據。
dfs.namenode.safemode.min.datanodes=0
NN收到回報的DN的數量的最小值,達不到此值,NN不退出安全模式。(在系統啟動時發生作用)。
<=0的值表示不關心DN數量,在啟動時。大於DN實際數量的值會導致無法離開安全模式。建議不設置此值
dfs.namenode.max.objects=0
DFS支持的最大文件、目錄、數據塊數量。0無限制。
dfs.namenode.decommission.interval=30
NN周期性檢查退役是否完成的間隔,秒。
dfs.namenode.decommission.nodes.per.interval=5
NN檢查退役是否完成,每dfs.namenode.decommission.interval秒檢查的節點數量。
dfs.namenode.replication.interval=3
NN周期性計算DN的副本情況的頻率,秒。
dfs.namenode.accesstime.precision=3600000
HDFS文件的訪問時間精確到此值,默認是1小時。0表示禁用訪問時間。
dfs.datanode.plugins=null
DN上的插件列表,逗號分隔。
dfs.namenode.plugins=null
NN上的插件列表,逗號分隔。
dfs.bytes-per-checksum=512
每次計算校驗和的字節數。一定不能大於dfs.stream-buffer-size。
dfs.client-write-packet-size=65536
客戶端寫數據時的包的大小。包是塊中的更小單位數據集合
dfs.client.write.exclude.nodes.cache.expiry.interval.millis=600000
最大周期去讓DN保持在例外節點隊列中。毫秒。操過此周期,先前被排除的DN將被移除緩存並被嘗試再次申請Block。默認為10分鍾。
dfs.namenode.num.extra.edits.retained=1000000
數量限制,額外的edits事務數。
dfs.namenode.max.extra.edits.segments.retained=10000
extra edit日志文件segments的最大數量。除了用於NN重啟時的最小edits文件之外。一個segments包含多個日志文件
dfs.image.compress=FALSE
Image文件要壓縮嗎?
dfs.image.compression.codec=org.apache.hadoop.io.compress.DefaultCodec
Image文件壓縮編碼。必須是在io.compression.codecs中定義的編碼。
dfs.datanode.max.transfer.threads=4096
= 舊參數 dfs.datanode.max.xcievers
DN上傳送數據出入的最大線程數。
dfs.datanode.readahead.bytes=4193404
預讀磁盤數據。如果Hadoop本地庫生效,DN可以調用posix_fadvise系統獲取頁面數據到操作系統的緩存中。
這個配置指定讀取當前讀取位置之前的字節數。設置為0,取消此功能。無本地庫,此功能也無效。?
dfs.datanode.drop.cache.behind.reads=FALSE
在有些場景下,特別是對一些大的,並且不可能重用的數據,緩存在操作系統的緩存區是無用的。此時,DN可以配置自動清理緩存區數據,在已經發生向客戶端之后。此功能自動失效,在讀取小數據片時。(例如HBase的隨機讀寫場景)。通過釋放緩存,這在某些場景下可以提高性能。Hadoop本地庫無效,此功能無效。看起來是一個可以嘗試的特性
dfs.datanode.drop.cache.behind.writes=FALSE
同dfs.datanode.drop.cache.behind.reads相似。
dfs.datanode.sync.behind.writes=FALSE
如果是true,在寫之后,DN將指示操作系統把隊列中數據全部立即寫磁盤。和常用的OS策略不同,它們可能在觸發寫磁盤之前等待30秒。Hadoop本地庫無效,此功能無效。
dfs.client.failover.sleep.base.millis=500
專家設置。失敗重試間的等待時間,毫秒。這里的值是個基本值,實際值會根據失敗/成功次數遞增/遞減50%。第一次失敗會立即重試。第二次將延遲至少dfs.client.failover.sleep.base.millis毫秒。依次類推。
dfs.client.failover.sleep.max.millis=15000
專家設置。失敗重試見的等待時間最大值,毫秒。
dfs.ha.log-roll.period=120
StandbyNode要求Active滾動EditLog,由於StandBy只能從已經完成的Log Segments中讀,所以Standby上的數據新鮮程度依賴於以如何的頻率滾動日志。秒。另外,故障轉移也會觸發一次日志滾動,所以StandbyNode在Active之前,數據也會更新成最新的。秒,默認是2分鍾。
dfs.ha.tail-edits.period=60
StandbyNode以此頻率檢測共享目錄中最新的日志,秒。
dfs.ha.zkfc.port=8019
zkfc的rpc端口
dfs.support.append=TRUE
是否允許append。
dfs.client.use.datanode.hostname=FALSE
是否客戶端應該使用DN的HostName,在連接DN時,默認是使用IP。
dfs.datanode.use.datanode.hostname=FALSE
是否DN應該使用HostName連接其它DN,在數據傳輸時。默認是是IP。
dfs.client.local.interfaces=null
逗號分隔的網卡列表,用於在客戶端和DN之間傳輸數據時。當創建連接時,客戶端隨機選擇一個並綁定它的socket到這個網卡的IP上。
名字可以以網卡名(例如 "eth0"), 子網卡名 (eg "eth0:0"), 或者IP地址(which may be specified using CIDR notation to match a range of IPs)。
dfs.namenode.avoid.read.stale.datanode=FALSE
決定是否避開從臟DN上讀數據。臟DN指在一個指定的時間間隔內沒有收到心跳信息。臟DN將被移到可以讀取節點列表的尾端。嘗試開啟
dfs.namenode.stale.datanode.interval=30000
標記一個DN是臟的時間間隔。例如,如果NN在此設定的時間內沒有接收到來自某一個節點的心跳信息,此DN將被標記為臟的。此間隔不能太小,否則容易導致被頻繁的標記為臟DN。
我們建議是1分鍾
dfs.namenode.write.stale.datanode.ratio=0.5f
當全部DN被標記為臟DN的比率高於此閥值,停止不寫數據到臟DN的策略,以免造成熱點問題(有效的,可寫的DN太少,壓力太大)。
dfs.webhdfs.enabled=FALSE
在NN和DN上開啟WebHDFS (REST API)功能。
可以開啟嘗試
hadoop.fuse.connection.timeout=300
秒,在fuse_dfs中緩存libhdfs連接對象的超時時間。 小值使用內存小。大值可以加快訪問,通過避開創建新的連接對象。
hadoop.fuse.timer.period=5
秒
dfs.encrypt.data.transfer=FALSE
是否加密傳輸數據?僅需要配置在NN和DN。客戶端可以自行判斷。
dfs.encrypt.data.transfer.algorithm=null
可以設置為"3des"或"rc4"。否則使用默認的,通常是usually 3DES。3DES更安全,RC4更快。
dfs.datanode.hdfs-blocks-metadata.enabled=TRUE
布爾值,設定后台DN端是否支持DistributedFileSystem#getFileVBlockStorageLocations API。
dfs.client.file-block-storage-locations.num-threads=10
在調用DistributedFileSystem#getFileBlockStorageLocations()的並發RPC的線程數
dfs.domain.socket.path=/var/run/hadoop-hdfs/dn._PORT
可選選項。socket文件路徑,unix下。用來在DN和本地的HDFS客戶端加快網絡連接。如果字符串"_PORT"出現在路徑中,它將被DN的TCP端口替換。
yarn-default.xml
重要配置參數
yarn.app.mapreduce.am.env=null
用戶為MR AM添加環境變量。例如: A=foo 設置環境變量A為foo B=$B:c 繼承並設置TT內的B變量
yarn.app.mapreduce.am.command-opts=-Xmx1024m
MR AM的Java opts。如下符號會被替換: @taskid@ 被替換成當前的TaskID。其它出現的'@'不會改變。例如,為了讓gc日志能夠按task打印存儲在/tmp目錄,可以設置'value'為:-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc 如果hadoop本地庫可以使用,使用-Djava.library.path參數可能造成程序的此功能無效。這個值應該被替換,設置在MR的JVM環境中LD_LIBRARY_PATH變量中,使用 mapreduce.map.env和mapreduce.reduce.env配置項。
yarn.app.mapreduce.am.resource.mb=1536
AM申請的內存
yarn.resourcemanager.address=0.0.0.0:8032
RM地址:端口
yarn.resourcemanager.scheduler.address=0.0.0.0:8030
調度器地址:端口
yarn.admin.acl=*
ACL中誰可以管理YARN集群
yarn.resourcemanager.admin.address=0.0.0.0:8033
RM管理接口地址:端口
yarn.resourcemanager.am.max-retries=1
AM重試最大次數。服務端參數。重啟生效。
建議4
yarn.resourcemanager.nodes.include-path=null
存儲有效節點列表的文件
yarn.resourcemanager.nodes.exclude-path=null
存儲拒絕節點列表的文件。如和包含文件沖突,包含文件優先級高
yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler
調度器實現類。
建議使用公平調度器
yarn.scheduler.minimum-allocation-mb=1024
每個container想RM申請內存的最小大小。兆字節。內存請求小於此值,實際申請到的是此值大小。默認值偏大
yarn.scheduler.maximum-allocation-mb=8192
每個container向RM申請內存的最大大小,兆字節。申請值大於此值,將最多得到此值內存。
yarn.resourcemanager.recovery.enabled=FALSE
是否啟動RM的狀態恢復功能。如果true,必須指定yarn.resourcemanager.store.class。嘗試啟用
yarn.resourcemanager.store.class=null
用於持久存儲的類。嘗試開啟
yarn.resourcemanager.max-completed-applications=10000
RM中保存的最大完成的app數量。內存中存儲。
yarn.nodemanager.address=0.0.0.0:0
NM中的container管理器的地址:端口
yarn.nodemanager.env-whitelist=JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,YARN_HOME
container應該覆蓋而不是使用NM的環境變量名單。允許container自己配置的環境變量
yarn.nodemanager.delete.debug-delay-sec=0
秒,一個app完成后,NM刪除服務將刪除app的本地文件目錄和日志目錄。為了診斷問題,把這個選項設置成足夠大的值(例如,設置為10分鍾),可以繼續訪問這些目錄。設置此選項,需要重啟NM。Yarn應用的工作目錄根路徑是yarn.nodemanager.local-dirs,Yarn應用日志目錄的根路徑是yarn.nodemanager.log-dirs。
調試問題時可用
yarn.nodemanager.local-dirs=${hadoop.tmp.dir}/nm-local-dir
本地文件存儲目錄,列表。一個應用的本地文件目錄定位方式:${yarn.nodemanager.local-dirs}/usercache/${user}/appcache/application_${appid}。每個container的工作目錄,是此目錄的子目錄,目錄名是container_${contid}。
非常重要,建議配置多個磁盤,平衡IO。
yarn.nodemanager.log-dirs=${yarn.log.dir}/userlogs
存儲container日志的地方。一個應用的本地日志目錄定位是:${yarn.nodemanager.log-dirs}/application_${appid}。每個container的日志目錄在此目錄下,名字是container_{$contid}。每個container目錄中包含stderr, stdin, and syslog等container產生的文件
非常重要,建議配置多個磁盤
yarn.log-aggregation-enable=FALSE
是否允許日志匯聚功能。建議開啟
yarn.log-aggregation.retain-seconds=-1
保存匯聚日志時間,秒,超過會刪除,-1表示不刪除。 注意,設置的過小,將導致NN垃圾碎片。建議3-7天 = 7 * 86400 = 604800
yarn.nodemanager.log.retain-seconds=10800
保留用戶日志的時間,秒。在日志匯聚功能關閉時生效。
建議7天
yarn.nodemanager.remote-app-log-dir=/tmp/logs
匯聚日志的地方,目錄路徑,HDFS系統。
對於開了權限檢查的系統,注意權限問題。HDFS上。
yarn.nodemanager.remote-app-log-dir-suffix=logs
匯聚日志目錄路徑后綴。匯聚目錄創建在{yarn.nodemanager.remote-app-log-dir}/${user}/{thisParam}
yarn.nodemanager.resource.memory-mb=8192
NM上可以用於container申請的物理內存大小,MB。
yarn.nodemanager.vmem-pmem-ratio=2.1
在設置container的內存限制時,虛擬內存到物理內存的比率。Container申請的內存如果超過此物理內存,可以以此比率獲取虛擬內存用於滿足需求。
虛擬地址的是物理地址的倍數上限。建議設置的大點,例如:4.1,8.1,此虛擬內存並非內存,而是占用的虛擬地址。
yarn.nodemanager.webapp.address=0.0.0.0:8042
NM的網頁界面地址和端口。
yarn.nodemanager.log-aggregation.compression-type=none
匯聚日志的壓縮類型。匯聚日志是TFile格式文件。Hadoop-3315。可以使用的值有none,lzo,gz等。 可以嘗試
yarn.nodemanager.aux-services=null
請配置為:mapreduce.shuffle,在Yarn上開啟MR的必須項
yarn.nodemanager.aux-services.mapreduce.shuffle.class=org.apache.hadoop.mapred.ShuffleHandler
對應參考yarn.nodemanager.aux-services
mapreduce.job.jar=null
Job客戶端參數。提交的job的jar文件。
mapreduce.job.hdfs-servers=${fs.defaultFS}
Job客戶端參數。
yarn.application.classpath=$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/,$HADOOP_COMMON_HOME/share/hadoop/common/lib/,$HADOOP_HDFS_HOME/share/hadoop/hdfs/,$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/,$YARN_HOME/share/hadoop/yarn/*,$YARN_HOME/share/hadoop/yarn/lib/*
YARN應用的CLASSPATH,逗號分隔列表。
非重要配置參數
yarn.app.mapreduce.am.job.task.listener.thread-count=30
MR AM處理RPC調用的線程數。
yarn.app.mapreduce.am.job.client.port-range=null
MR AM能夠綁定使用的端口范圍。例如:50000-50050,50100-50200。 如果你先要全部的有用端口,可以留空(默認值null)。
yarn.app.mapreduce.am.job.committer.cancel-timeout=60000
毫秒,如果job被kill了,等待output committer取消操作的時間。
yarn.app.mapreduce.am.scheduler.heartbeat.interval-ms=1000
MR AM發送心跳到RM的時間間隔,毫秒
yarn.app.mapreduce.client-am.ipc.max-retries=3
在重新連接RM獲取Application狀態前,客戶端重試連接AM的次數。
yarn.app.mapreduce.client.max-retries=3
客戶端重連RM/HS/AM的次數。這是基於ipc接口上的規則
yarn.ipc.client.factory.class=null
創建客戶端IPC類的工廠類
yarn.ipc.serializer.type=protocolbuffers
使用哪種序列化類
yarn.ipc.server.factory.class=null
創建IPC服務類的工廠類
yarn.ipc.exception.factory.class=null
創建IPC異常的工廠
yarn.ipc.record.factory.class=null
創建序列化記錄的工廠類
yarn.ipc.rpc.class=org.apache.hadoop.yarn.ipc.HadoopYarnProtoRPC
RPC類實現類
yarn.resourcemanager.client.thread-count=50
RM用來處理客戶端請求的線程數
yarn.am.liveness-monitor.expiry-interval-ms=600000
AM報告間隔,毫秒。?
yarn.resourcemanager.scheduler.client.thread-count=50
調度器用於處理請求的線程數
yarn.resourcemanager.webapp.address=0.0.0.0:8088
RM的網頁接口地址:端口
yarn.acl.enable=TRUE
開啟訪問控制
yarn.resourcemanager.admin.client.thread-count=1
RM管理端口處理事務的線程數
yarn.resourcemanager.amliveliness-monitor.interval-ms=1000
RM檢查AM存活的間隔
yarn.resourcemanager.container.liveness-monitor.interval-ms=600000
檢查container存活的時間間隔,毫秒。建議短一些,例如3分鍾
yarn.nm.liveness-monitor.expiry-interval-ms=600000
RM判斷NM死亡的時間間隔。
非主動檢查,被動等待,不連接時間超過此值
10分鍾無檢查到活動,判定NM死亡
yarn.resourcemanager.nm.liveness-monitor.interval-ms=1000
RM檢查NM存活的時間間隔。
yarn.resourcemanager.resource-tracker.client.thread-count=50
處理資源跟蹤調用的線程數。?
yarn.nodemanager.admin-env=MALLOC_ARENA_MAX=$MALLOC_ARENA_MAX
應該從NM傳送到container的環境變量
yarn.nodemanager.container-executor.class=org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor
啟動containers的類。
yarn.nodemanager.container-manager.thread-count=20
用於container管理的線程數