1. 程式人生 > >Hadoop運維配置

Hadoop運維配置

  • hdfs-default.xml

    hadoop.hdfs.configuration.version=1 // 配置檔案的版本

    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.namenode.rpc-address=0.0.0.0:50090 // NN的RPC地址和埠

    dfs.namenode.http-address=0.0.0.0:50070 // NN的HTTP地址和埠。0表示任意空閒埠。

    dfs.datanode.du.reserved=0 // 每個磁碟(volume)的保留空間,位元組。要注意留足夠的空間給非HDFS檔案使用。建議保留磁碟容量的5%或者50G以上

    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.shared.edits.dir=null // 在多個NN中共享儲存目錄,用於存放edits檔案。這個目錄,由active寫,由standby讀,以保持名稱空間資料一致。此目錄不需要是dfs.namenode.edits.dir中列出的。在非HA叢集中,它不會使用。建議使用qj方式,可以不關注這個選項

    dfs.namenode.edits.journalp-lugin.qjournal=org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager // qj方式共享edits。建議使用此方式

    dfs.permissions.enabled=true // 是否在HDFS中開啟許可權檢查。

    dfs.permissions.superusergroup=supergroup // 超級使用者組。僅能設定一個。

    dfs.datanode.data.dir=file://${hadoop.tmp.dir}/dfs/data // 本地磁碟目錄,HDFS資料應該儲存Block的地方。可以是逗號分隔的目錄列表(典型的,每個目錄在不同的磁碟)。這些目錄被輪流使用,一個塊儲存在這個目錄,下一個塊儲存在下一個目錄,依次迴圈。每個塊在同一個機器上僅儲存一份。不存在的目錄被忽略。必須建立資料夾,否則被視為不存在。

    dfs.replication=3 // 資料塊副本數。此值可以在建立檔案時設定,客戶端可以自由設定,也可以在命令列修改。不同檔案可以有不同的副本數。預設值用於未指定時。

    dfs.replication.max=512 // 最大塊副本數,不要大於節點總數。

    dfs.namenode.replication.min=1 // 最小塊副本數。在上傳檔案時,達到最小副本數,就認為上傳是成功的

    dfs.blocksize=67108864 // 塊大小,位元組。可以使用字尾: k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa)指定大小 (就像128k, 512m, 1g, 等待)。

    dfs.client.block.write.retries=3 // 客戶端寫資料到DN時,最大重試次數。超過重試次數就會報出錯誤。

    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.heartbeat.interval=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.datanode.balance.bandwidthPerSec=1048576 // 在做資料平衡時,每個DN最大頻寬佔用,每秒位元組。預設值是1M。建議可以到10M

    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。

    dfs.datanode.handler.count=10 // DN的服務執行緒數。這些執行緒僅用於接收請求,處理業務命令

    dfs.datanode.failed.volumes.tolerated=0 // 可以接受的卷的失敗數量。預設值0表示,任一個卷失敗都會導致DN關閉。建議設定此值,避免個別磁碟問題。如果此值超過真實磁碟數,將會報錯,啟動失敗

    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.ha.namenode.id=null // NN的ID,如果沒有配置,由系統決定。通過匹配本地節點地址和配置的地址。這裡設定的是本機的NN的ID(此配置僅對NN生效),由於要配置2個NN,建議沒有特殊需要,這裡不進行配置

    dfs.ha.automatic-failover.enabled=FALSE // 是否開啟自動故障轉移。建議開啟,true

    dfs.namenode.avoid.write.stale.datanode=FALSE // 決定是否避開在髒DN上寫資料。寫操作將會避開髒DN,除非超過一個配置的比率 (dfs.namenode.write.stale.datanode.ratio)。嘗試開啟

    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.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.secondary.http-address=0.0.0.0:50090 // SNN的http服務地址。如果是0,服務將隨機選擇一個空閒埠。使用了HA後,就不再使用SNN了
    dfs.https.enable=FALSE // 允許HDFS支援HTTPS(SSL)。建議不支援

    dfs.datanode.dns.interface=default // DN彙報它的IP地址的網絡卡。我們給DN指定了0.0.0.0之類的地址,這個地址需要被解析成對外地址,這裡指定的是網絡卡名,即那個網絡卡上繫結的IP是可以對外的IP,一般的,預設值就足夠了

    dfs.datanode.dns.nameserver=default // DNS的域名或者IP地址。DN用它來確定自己的域名,在對外聯絡和顯示時呼叫。一般的,預設值就足夠了

    dfs.namenode.backup.address=0.0.0.0:50100 // NN的BK節點地址和埠,0表示隨機選用。使用HA,就不需要關注此選項了。建議不使用BK節點

    dfs.namenode.backup.http-address=0.0.0.0:50105 // 使用HA,就不需要關注此選項了。建議不使用BK節點

    dfs.namenode.replication.considerLoad=true // 設定在選擇存放目標時是否考慮負載。需要

    dfs.default.chunk.view.size=32768 // 在瀏覽器中檢視一個檔案時,可以看到的位元組數。

    dfs.namenode.name.dir=file://${hadoop.tmp.dir}/dfs/name // 本地磁碟目錄,NN儲存fsimage檔案的地方。可以是按逗號分隔的目錄列表,fsimage檔案會儲存在全部目錄,冗餘安全。這裡多個目錄設定,最好在多個磁碟,另外,如果其中一個磁碟故障,不會導致系統故障,會跳過壞磁碟。由於使用了HA,建議僅設定一個。如果特別在意安全,可以設定2個

    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.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.image.transfer.timeout=600000 // Image檔案傳輸時超時。HA方式使用不到,可不關注

    dfs.image.transfer.bandwidthPerSec=0 // Image檔案傳輸時可以使用的最大頻寬,秒位元組。0表示沒有限制。HA方式使用不到,可不關注

    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連線物件的超時時間。 小值使用記憶體小。大值可以加快訪問,通過避開建立新的連線物件。

    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.client.file-block-storage-locations.timeout=60 // Timeout (in seconds) for the parallel RPCs made in DistributedFileSystem#getFileBlockStorageLocations()

    dfs.domain.socket.path=/var/run/hadoop-hdfs/dn._PORT // 可選選項。socket檔案路徑,unix下。用來在DN和本地的HDFS客戶端加快網路連線。如果字串”_PORT”出現在路徑中,它將被DN的TCP埠替換。