- fs.default.name (必需)
預設值 : file:///
說明 : 設定 Hadoop namenode 的 hostname 及 port,預設是 Standalone mode,如果是 Pseudo-Distributed mode 要指定為 hdfs://localhost:9000,但是這個缺點是只有在本機才能操作,從其他機器不能連。建議可直接使用 Cluster mode,指定 hdfs://hostname:9000。但是 Hadoop 是依據 hostname 去做 ip binding,所以要注意 /etc/hosts 裡 hostname 不能對應到 127.0.0.1,要對應實際的 ip。10.1.112.70 hostname如果發現不能從其他機器連線的話,在 namenode 上用 netstat 看 ip/port mapping 是否正確
tcp 0 0 ::ffff:10.1.112.70:9000 :::* LISTEN 2691/javatcp 0 0 ::ffff:10.1.112.70:9000 ::ffff:10.1.112.70:49119 ESTABLISHED 2691/javatcp 0 0 ::ffff:10.1.112.70:9000 ::ffff:10.1.112.70:49113 ESTABLISHED 2691/java - hadoop.tmp.dir (必需)
預設值 : /tmp/hadoop-${user.name}
說明 : Hadoop 存放暫存檔案的目錄(是程式使用的虛擬的基本目錄結構),會根據 user account 在此目錄下開不同的子目錄。但是放在預設的 /tmp 下可能會有一個問題,一般在 Centos 會 enable tmpwatch,tmpwatch 會定期把 /tmp 下沒用到的檔案砍掉,如果不希望系統做這件事,可以 disable tmpwatch 或把 hadoop.tmp.dir 指到不同的目錄下 - fs.checkpoint.dir
預設值 : ${hadoop.tmp.dir}/dfs/namesecondary
說明 : secondary namenode 存放暫存檔案的目錄,如果有多個目錄可用",“隔開。設定多個目錄 的好處是 Hadoop 會把 temp image files 分別寫到指定的多個目錄,以避免其中一份資料壞掉。seconary namenode 相關的設定不一定需要,甚至在 Hadoop cluster 可以不需要起 secondary namenode。但重起 namenode 時也會做 file merge,當檔案很大時,重起的時間會非常的長。為了減少 downtime,建議在 production site 都會啟動 secondary namenode。而且要起在跟 namenode 不同的機器,以保證當 namenode 硬碟壞掉的時候,還可以從 secondary namenode 上把資料備份回來。 - fs.checkpoint.period
預設值 : 3600(秒)
說明 : 控制 secondary namenode 的 checkpoint 時間間隔。如果距離上次 checkpoint 的時間大於這個參數設定的值,就會觸發 checkpoint。secondary namenode 會把 namenode 的 fsimage 和 editlog 做 snapshot。如果存取 Hadoop 的次數頻繁或為了減少重起 namenode 的 downtime,可以把這個值設小一點。 - fs.checkpoint.size
預設值 : 67108864(byte)
說明 : 如果 Hadoop 非常的忙碌,editlog 可能會在短時間內長的很大,fs.checkpoint.period 的設定不見得可以完全預測這個狀況,所以保險的做法會多設定這個值,以保證當檔案大到超過 fs.checkpoint.size 的值也會觸發 checkpoint。 - io.file.buffer.size
預設值 : 4096(byte)
說明 : 這是讀寫 sequence file 的 buffer size, 可減少 I/O 次數。在大型的 Hadoop cluster,建議可設定為 65536 到 131072。 - ipc.client.connection.maxidletime
預設值 : 10000(毫秒)
說明 : 設定 Hadoop client 連線時最大的閒置時間,預設是 10 秒。如果 Hadoop cluster 的網路連線不穩,可以把這個值設到 60000(60秒)。 - ipc.server.tcpnodelay
預設值 : false
說明 : 在 Hadoop server 是否啟動 Nagle’s 演算法。設 true 會 disable 這個演算法,關掉會減少延遲,但是會增加小封包的傳輸。server site 不太需要這定這個值。 - ipc.client.tcpnodelay
預設值 : false
說明 : 在 Hadoop client 是否啟動 Nagle’s 演算法。設 true 會 disable 這個演算法,關掉會減少延遲,但是會增加小封包的傳輸。client site 建議把這個值設 true。 - hadoop.security.authorization
預設值 : false
說明 : 是不是要開啟 service-level 帳號驗證機制,開啟之後 Hadoop 在執行任何動作之前都會先確認是否有權限。詳細的權限設定會放在 hadoop-policy.xml 裡。例如要讓 fenriswolf 這個 account 及 mapreduce group 可以 submit M/R jobs,要設定 security.job.submission.protocol.acl<property><name>security.job.submission.protocol.acl</name><value>fenriswolf mapreduce</value></property> - hadoop.security.authentication
預設值 : simple
說明 : simple 表示沒有 authentication,Hadoop 會用 system account 及 group 來控管權限。另外可以指定為 kerberos, 這部分相對比較複雜,要有一個 kerberos server 並產生 account keytab,在執行任何操作前 client 要先用 kinit 指令對 kerberos server 認證,之後的任何操作都是以 kerberos account 來執行。 - hadoop.kerberos.kinit.command
預設值 : N/A
說明 : 如果 hadoop.security.authentication 設為 kerberos 就要多設這個參數指定 Kerberos kinit 指令的路徑。在 CentOS 裝 krb5-workstation package 後預設安裝路徑為 /usr/kerberos/bin/kinit - fs.trash.interval
預設值 : 0(分)
說明 : 清掉垃圾筒的時間。預設是不清, 所以在刪除資料時要自己執行hadoop fs -rm -skipTrash或
hadoop fs -expunge來清除垃圾筒的資料,但是強制用 -skipTrash 會造成誤刪的資料救不回來,user 也會常常會忘記做 -expunge 而造成 Hadoop 空間不會釋放。建議可以設為 1440 讓 Hadoop 每天清除垃圾筒。
- topology.script.file.name
預設值 : N/A
說明 : 實作 Hadoop Rack Awareness 的機制,指定一個可執行檔,input 會是一組 hostname 或 ip,回傳值是 rack name 清單。不指定的情況下,Hadoop 會預設所有的 node 都在同一個 rack 之下。
以下是一個 python 的範例,不過用 shell script 或其他語言寫也可以#!/usr/bin/pythonimport sysfrom string import joinDEFAULT = '/dc/rack0';RACK_MAP = {'10.1.113.37' : '/dc/rack1','hadoop-worker01' : '/dc/rack1','10.1.113.77' : '/dc/rack1','hadoop-worker02' : '/dc/rack1','10.1.113.45' : '/dc/rack2','hadoop-work03' : '/dc/rack2','10.1.113.48' : '/dc/rack2','hadoop-work04' : '/dc/rack2',}if len(sys.argv) == 1:print DEFAULTelse:print join([RACK_MAP.get(i, DEFAULT) for i in sys.argv[1:]]," ")
如上圖所示,一個非常大的 Hadoop cluster 可能會跨多個 data centers,每個 data center 會有多個 racks,每個 rack 有多個 nodes。假設 Hadoop replication number 設 3,在 Hadoop 做 replication 時會根據這個設定,第一份資料放在 local node,第二份資料放在另一個 rack 的某個 node,第三份資料會放在與第二份同個 rack 但不同的 node 下。當網路設定有問題或斷線時,某一個 rack 可能會全部不見,放在不同的 rack 可以保證仍然能存取到資料。為了增加網路的容錯能力,一般都會設定這個 script。
如果在 cluster 已經有資料的情況下才設定 rack topology,可以用 hadoop balancer 指令讓所有的 blocks 重新分配 - topology.script.number.args
預設值 : 100
說明 : 每次傳給 topology.script.file.name script 的參數個數。如果 Hadoop node 個數過多,topology.script.file.name script 會被執行多次,一次傳入 100 個參數 - hadoop.native.lib
預設值 : true
說明 : 預設 Hadoop 會去找所有可用的 native libraries 並自動 load 進來使用,例如壓縮類的 libraries 像 GZIP, LZO 等等。會設成 false 的原因通常是為了 debug,Hadoop 會把 native libraries 換成相對應的 java 實作方式來執行,例如 GZIP,以方便使用者檢測 libraries 是否執行錯誤。但是 LZO 這類的 libraries 並沒有 java 實作,所以還是會 call native libraries 來做壓縮,也就沒有 debug 的效果了。詳細的壓縮格式類型會在 mapred-site.xml 設定。
name | value | Description |
---|---|---|
fs.default.name | hdfs://hadoopmaster:9000 | 定義HadoopMaster的URI和埠 |
fs.checkpoint.dir | /opt/data/hadoop1/hdfs/namesecondary1 | 定義hadoop的name備份的路徑,官方文檔說是讀取這個,寫入dfs.name.dir |
fs.checkpoint.period | 1800 | 定義name備份的備份間隔時間,秒為單位,只對snn生效,默認一小時 |
fs.checkpoint.size | 33554432 | 以日誌大小間隔做備份間隔,只對snn生效,默認64M |
io.compression.codecs | org.apache.hadoop.io.compress.DefaultCodec com.hadoop.compression.lzo.LzoCodec com.hadoop.compression.lzo.LzopCodec org.apache.hadoop.io.compress.GzipCodec org.apache.hadoop.io.compress.BZip2Codec |
Hadoop所使用的編解碼器,gzip和bzip2為自帶,lzo需安裝hadoopgpl或者kevinweil,逗號分隔,snappy也需要單獨安裝 |
io.compression.codec.lzo.class | com.hadoop.compression.lzo.LzoCodec | LZO所使用的壓縮編碼器 |
topology.script.file.name | /hadoop/bin/RackAware.py | 機架感知腳本位置 |
topology.script.number.args | 1000 | 機架感知腳本管理的主機數,IP位址 |
fs.trash.interval | 10800 | HDFS垃圾箱設置,可以恢復誤刪除,分鐘數,0為禁用,添加該項無需重啟hadoop |
hadoop.http.filter.initializers | org.apache.hadoop.security. AuthenticationFilterInitializer | 需要jobtracker,tasktracker namenode,datanode等http訪問埠用戶驗證使用,需配置所有節點 |
hadoop.http.authentication.type | simple | kerberos | | 驗證方式,默認為簡單,也可自己定義class,需配置所有節點 |
hadoop.http.authentication. token.validity |
36000 | 驗證權杖的有效時間,需配置所有節點 |
hadoop.http.authentication. signature.secret |
默認可不寫參數 | 默認不寫在hadoop啟動時自動生成私密簽名,需配置所有節點 |
hadoop.http.authentication.cookie .domain |
domian.tld | http驗證所使用的cookie的功能變數名稱,IP位址訪問則該項無效,必須給所有節點都配置功能變數名稱才可以。 |
hadoop.http.authentication. simple.anonymous.allowed |
true | false | 簡單驗證專用,默認允許匿名訪問,true |
hadoop.http.authentication. kerberos.principal |
HTTP/localhost@$LOCALHOST | Kerberos驗證專用,參加認證的實體機必須使用HTTP作為K的Name |
hadoop.http.authentication. kerberos.keytab |
/home/xianglei/hadoop.keytab | Kerberos驗證專用,密鑰文件存放位置 |
hadoop.security.authorization | true|false | Hadoop服務層級驗證安全驗證,需配合hadoop-policy.xml使用,配置好以後用dfsadmin,mradmin -refreshServiceAcl刷新生效 |
io.file.buffer.size | 131072 | 用作序列化檔處理時讀寫buffer的大小 |
hadoop.security.authentication | simple | kerberos | hadoop本身的許可權驗證,非http訪問,simple或者kerberos |
hadoop.logfile.size | 1000000000 | 設置日誌檔大小,超過則產生新日誌 |
hadoop.logfile.count | 20 | 最大日誌數 |
io.bytes.per.checksum | 1024 | 每校驗碼所校驗的位元組數,不要大於io.file.buffer.size |
io.skip.checksum.errors | true | false | 處理序列化檔時跳過校驗碼錯誤,不拋異常。默認false |
io.serializations | org.apache.hadoop.io.serializer. WritableSerialization | 序列化的編解碼器 |
io.seqfile.compress.blocksize | 1024000 | 塊壓縮的序列化檔的最小塊大小,位元組 |
webinterface.private.actions | true | false | 設為true,則JT和NN的tracker網頁會出現殺任務刪檔等操作連接,默認是false |
from http://fenriswolf.me/2012/04/05/hadoop-%E5%8F%83%E6%95%B8%E8%A8%AD%E5%AE...