Mapreduce 參數 mapred-site-xml

1 篇文章 / 0 new
author
Mapreduce 參數 mapred-site-xml
name value description
hadoop.job.history.location   The location where jobtracker history files are stored. The value for this key is treated as a URI, meaning that the files can be stored either on HDFS or the local file system. If no value is set here, the location defaults to the local file system, at file:///${hadoop.log.dir}/history. If the URI is missing a scheme, fs.default.name is used for the file system.
hadoop.job.history.user.location   User can specify a location to store the history files of a particular job. If nothing is specified, the logs are stored in output directory. The files are stored in "_logs/history/" in the directory. User can stop logging by giving the value "none".
mapred.job.tracker.history
.completed.location
  The completed job history files are stored at this single well known location. If nothing is specified, the files are stored at ${hadoop.job.history.location}/done.
mapreduce.jobhistory.max-age-ms 2592000000 Job history files older than this many milliseconds will be deleted when the history cleaner runs. Defaults to 2592000000 (30 days).
mapreduce.jobhistory
.cleaner.interval-ms
86400000 How often the job history cleaner checks for files to delete, in milliseconds. Defaults to 86400000 (one day). Files are only deleted if they are older than mapreduce.jobhistory.max-age-ms.
map/reduce
io.sort.factor
10 當 mappers 計算完成如果有產出,就會先寫入一段 memory buffer(預設是 100 MB), buffer 達到 80% (定義在 io.sort.spill.percent 裡) 之後就會寫入 disk,並產生一個 spill file。當 mapper 寫出的資料量大就有可能產生多個 spill files。在執行完成交給 reducer 之前會先進入合併及排序的階段,多個 spill files 會合併為單一且排序過的檔案。這個值就是設定一次合併的檔案數。例如: 有 50 個 mapper spill files,預設值是 10 的情況下,就會有 5 次合併的動作並產生 5 個中介檔,然後再多一次合併動作把 5 個中介檔合併為一個。加大這個值可以有效的減少合併的次數及產生的中介檔案,不過所需的記憶體也相對變大。以 Cloudera 的建議可以在 production 環境改成 25 或 32
map
io.sort.mb
100 這是在 io.sort.factor 裡說明的 memory buffer,越大的值也表示所產生的 spill files 會越少。但相對的使用的記憶體會增加,大檔案做合併及排序也不見得比較快。還有一個地方要注意,假設 mapred.child.java.opts 裡定義的 heap size 為 1024 MB,io.sort.mb 是 100 MB,則 client 的 mapper 就只剩 924 MB 可以用。建議可以設到 320。使用者也可以依需求在 submit jobs 之前自行調整
io.sort.record.percent 0.05 The percentage of io.sort.mb dedicated to tracking record boundaries. Let this value be r, io.sort.mb be x. The maximum number of records collected before the collection thread must block is equal to (r * x) / 4
map
io.sort.spill.percent
0.80 當mapper輸出到暫存記憶體的達到設定可用容量的百分比時則將資料寫入到磁碟,路徑為mapred.local.dir
map
mapred.linerecordreader
.maxlength
Integer.MAX_VALUE 指定每筆傳入mapper資料的許可最大長度. 可藉由此設定來檢測資料是否有損壞,並跳過處理與紀錄
io.map.index.skip 0 Number of index entries to skip between each entry. Zero by default. Setting this to values larger than zero can facilitate opening large map files using less memory.
mapred.job.tracker local 設定 jobtracker 的 hostname 及 port。預設是 local,表示所有的 job 會用 local job runner 來執行,而且只有一個 mapper 及一個 reducer。在這個設定下,如果要啟動 jobtracker service 反而會出錯。一般常看到的設定是 localhost:9001。不過跟 core-site.xml 裡的 fs.default.name 一樣,會建議用 hostname 來設定
mapred.job.tracker
.http.address
0.0.0.0:50030 jobtracker Web UI 用的 port。除非是為了 security 的考量才會需要改 binding 的 IP/Port,不然不需要改這個值
mapred.job.tracker
.handler.count
10 設定 jobtracker server threads 的數量,這些 threads 會用 RPC 跟其他的 tasktrackers 溝通。跟 hdfs-site.xml 裡的 dfs.namenode.handler.count 一樣,設的值越高表示 jobtracker 吃的記憶體也隨著增加。在官方文件裡的建議值是全部 tasktracer 數量的 4%。以個人經驗來說,如果 jobtracker 機器配備跟 namenode 同級,那 dfs.namenode.handler.count 及 mapred.job.tracker.handler.count 的設定可用一樣,100 個 nodes 配 100 個 threads
mapred.task.tracker
.report.address
127.0.0.1:0 The interface and port that task tracker server listens on. Since it is only connected to by the tasks, it uses the local interface. EXPERT ONLY. Should only be changed if your host does not have the loopback interface.
mapred.local.dir ${hadoop.tmp.dir}
/mapred/local
在 tasktracer 上存放暫存資料的目錄。跟 hdfs-site.xml 裡的 dfs.data.dir 設定一樣,指定多個目錄(volumes) 可用 “," 以加快存取速度。如果有使用 distributed cache 的話,檔案也會放在這個位置
mapred.system.dir ${hadoop.tmp.dir}
/mapred/system
在 HDFS 上的資料夾,放所有 M/R jobs 相關的控制資訊,一個正在執行的 M/R job 會在這個目錄裡建立一個子目錄
mapreduce.jobtracker
.staging.root.dir
${hadoop.tmp.dir}
/mapred/staging
The root of the staging area for users' job files In practice, this should be the directory where users' home directories are located (usually /user)
mapred.temp.dir ${hadoop.tmp.dir}
/mapred/temp
在 HDFS 上一個共享的資料夾,放所有 M/R 的暫存資料
mapred.local.dir.minspacestart 0 If the space in mapred.local.dir drops under this, do not ask for more tasks. Value in bytes.
mapred.local.dir.minspacekill 0 If the space in mapred.local.dir drops under this, do not ask more tasks until all the current ones have finished and cleaned up. Also, to save the rest of the tasks we have running, kill one of them, to clean up some space. Start with the reduce tasks, then go with the ones that have finished the least. Value in bytes.
mapred.tasktracke
r.expiry.interval
600000 Expert: The time-interval, in miliseconds, after which a tasktracker is declared 'lost' if it doesn't send heartbeats.
mapred.tasktracker
.resourcecalculatorplugin
  Name of the class whose instance will be used to query resource information on the tasktracker. The class must be an instance of org.apache.hadoop.util.ResourceCalculatorPlugin. If the value is null, the tasktracker attempts to use a class appropriate to the platform. Currently, the only platform supported is Linux.
mapred.tasktracker
.taskmemorymanager
.monitoring-interval
5000 The interval, in milliseconds, for which the tasktracker waits between two cycles of monitoring its tasks' memory usage. Used only if tasks' memory management is enabled via mapred.tasktracker.tasks.maxmemory.
mapred.tasktracker.tasks
.sleeptime-before-sigkill
5000 The time, in milliseconds, the tasktracker waits for sending a SIGKILL to a process, after it has been sent a SIGTERM.
mapred.map.tasks 2 The default number of map tasks per job. Ignored when mapred.job.tracker is "local".
mapred.reduce.tasks 1 The default number of reduce tasks per job. Typically set to 99% of the cluster's reduce capacity, so that if a node fails the reduces can still be executed in a single wave. Ignored when mapred.job.tracker is "local".
mapreduce.tasktracker
.outofband.heartbeat
false Expert: Set this to true to let the tasktracker send an out-of-band heartbeat on task-completion for better latency.
mapreduce.tasktracker
.outofband.heartbeat.damper
1000000 When out-of-band heartbeats are enabled, provides damping to avoid overwhelming the JobTracker if too many out-of-band heartbeats would occur. The damping is calculated such that the heartbeat interval is divided by (T*D + 1) where T is the number of completed tasks and D is the damper value. Setting this to a high value like the default provides no damping -- as soon as any task finishes, a heartbeat will be sent. Setting this parameter to 0 is equivalent to disabling the out-of-band heartbeat feature. A value of 1 would indicate that, after one task has completed, the time to wait before the next heartbeat would be 1/2 the usual time. After two tasks have finished, it would be 1/3 the usual time, etc.
mapred.jobtracker
.restart.recover
false 設成 true 可以讓 jobtracker 重啟的時候自動恢復之前執行到一半的 M/R jobs,可是這個功能在 Cloudera CDH3 中並無法正常運作。可以參考 Cloudera 的 Known issues JobTracker recovery does not work after a restart
mapreduce.job
.restart.recover
true A per-job override for job recovery. If set to false for a job then job recovery will not be attempted for that job upon restart even if mapred.jobtracker.restart.recover is enabled. Defaults to true so that jobs are recovered by default if mapred.jobtracker.restart.recover is enabled.
mapred.jobtracker.job
.history.block.size
3145728 The block size of the job history file. Since the job recovery uses job history, its important to dump job history to disk as soon as possible. Note that this is an expert level parameter. The default value is set to 3 MB.
mapreduce.job.split
.metainfo.maxsize
10000000 The maximum permissible size of the split metainfo file. The JobTracker won't attempt to read split metainfo files bigger than the configured value. No limits if set to -1.
mapred.jobtracker
.taskScheduler
org.apache
.hadoop.mapred
.JobQueueTaskScheduler
做 M/R job 排程所使用的 scheduler
mapred.jobtracker.nodegroup.aware false Identify if jobtracker is aware of nodegroup layer.
mapred.jobtracker.jobSchedulable org.apache
.hadoop.mapred
.JobSchedulable
The class responsible for an entity in FairScheduler that can launch tasks.
mapred.jobtracker.taskScheduler
.maxRunningTasksPerJob
  The maximum number of running tasks for a job before it gets preempted. No limits if undefined.
map
mapred.map.max.attempts
4 當 mapper 失敗時 tasktracer 重試此 mapper 的次數。在一個很大的 cluster 裡,mapper 或 reducer 失敗不一定是程式邏輯出錯,有可能是網路出問題造成短時間的 timeout。常遇到的狀況是重新執行一次就好了。一般來說不需要特別改這個值
reduce
mapred.reduce.max.attempts
4 同上,在設的是 reducer 的重試次數
reduce
mapred.reduce.parallel.copies
5 當有map完成輸出資料後, reducer就會開始複製這輸出資料, 此參數用來設定使用多少線程來進行此項工作
mapreduce.reduce.shuffle
.maxfetchfailures
10 The maximum number of times a reducer tries to fetch a map output before it reports it.
mapreduce.reduce.shuffle
.connect.timeout
180000 Expert: The maximum amount of time (in milli seconds) a reduce task spends in trying to connect to a tasktracker for getting map output.
mapreduce.reduce.shuffle
.read.timeout
180000 Expert: The maximum amount of time (in milli seconds) a reduce task waits for map output data to be available for reading after obtaining connection.
mapred.task.timeout 600000 The number of milliseconds before a task will be terminated if it neither reads an input, writes an output, nor updates its status string.
mapred.tasktracker.map
.tasks.maximum
2 tasktracer 可同時執行的 mapper 數量。一般來說,設定的值會依 CPU core 數而定。例如: 一台機器有 8 core CPU,一個 core 跑兩個 processes,可使用的數量是 8×2-2=14 (要減掉 datanode 及 tasktracer 使用的 slot 數),則 mapper 及 reducer 數量可設為 7。要注意的是,設的值越高不見得是好事,除了 CPU utilization 之外,記憶體使用量也是考慮因素之一。假設 datanode 使用 1G,tasktracker 也用 1G,mapper 及 reducer 都用預設值 200 MB。那總記憶體使用量是 1000+1000+14×200=4800(MB)。因此要看機器的規格來決定
mapred.tasktracker.reduce
.tasks.maximum
2 tasktracer 可同時執行的 reducer 數量。基本的配置和 mapred.tasktracker.map.tasks.maximum 一樣。有個可以考慮的點是,在執行 M/R job 裡有許多是只有 mapper 不需要 reducer 的,例如 HBase import/export。所以可以視需求加大 mapper 的個數並減少 reducer 的個數
mapred.jobtracker
.completeuserjobs.maximum
100 在 jobtracker 記憶體中保存已完成的 job 個數,並讓使用者方便在 jobtracker UI 上查詢。如果超過 100 個 jobs ,就會寫入 disk 並放到 job history 中。這個設定是依每個使用者而設的,所以使用者多而且 job 數也多的情況會造成 jobtracker 使用太多的記憶體,可能會導致常做 full GC 或 OOME。建議可以只設 10
mapreduce.reduce.input.limit -1 The limit on the input size of the reduce. If the estimated input size of the reduce is greater than this value, job is failed. A value of -1 means that there is no limit set.
mapred.job.tracker
.retiredjobs.cache.size
1000 The number of retired job status to keep in the cache.
mapred.job.tracker
.jobhistory.lru.cache.size
5 The number of job history files loaded in memory. The jobs are loaded when they are first accessed. The cache is cleared based on LRU.
JVM
mapred.child.java.opts
-Xmx200m tasktracer 會依每個要執行的 java task 啟動獨立的 child process,這個值可以設定每個 process 的 JVM 參數。例如: 要增加 heap size 及 gc log 的話可以改成: -Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc
@taskid@ 是內建的參數,tasktracer 會把這個值轉成實際執行的 task id。各 app 也可在 submit job 之前,依據自己的需求調整這個設定參數 mapred.child.ulimit 則控制子程序的最大虛擬記憶體空間.
JVM
mapred.child.ulimit
  設定最大的虛擬記憶體使用量。跟 mapred.child.java.opts 不太一樣,mapred.child.java.opts 所設定的 -Xmx 只是 tasktracer 所啟動的 java child process 所用的 heap size,但 mapred.child.ulimit 所設定的包括 child process 本身及其所啟動的其他 sub process 的記憶體總合。建議這個值的大小應為 mapred.child.java.opts 指定的 2~3 倍。例如: 在 mapred.child.java.opts 設定 1G,則 mapred.child.ulimit 設為 3G。
不然,在 task 執行時期可能會出現以下的錯誤訊息,雖然看起來是 warning,但已經表示 JVM 沒啟動成功
2012-07-29 10:57:28,199 INFO org.apache.hadoop.mapred.JvmManager: JVM : jvm_20..054_0001_m_1994801458 exited with exit code 134. Number of tasks it ran: 0
2012-07-29 10:57:28,200 WARN org.apache.hadoop.mapred.TaskRunner: attempt_20..054_0001_m_000005_3 : Child Error
java.io.IOException: Task process exit with nonzero status of 134.
     at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:227)
因為這個參數比較敏感,應該要由系統管理者指定適合的值並設為 final,也就是不允許使用者自己修改。讓這個值為空,並直接修改系統 limits.conf 也是一個解決方式
mapred.child.env   User added environment variables for the task tracker child processes. Example : 1) A=foo This will set the env variable A to foo 2) B=$B:c This is inherit tasktracker's B env variable.
mapred.cluster
.map.memory.mb
-1 The size, in terms of virtual memory, of a single map slot in the Map-Reduce framework, used by the scheduler. A job can ask for multiple slots for a single map task via mapred.job.map.memory.mb, upto the limit specified by mapred.cluster.max.map.memory.mb, if the scheduler supports the feature. The value of -1 indicates that this feature is turned off.
mapred.cluster
.reduce.memory.mb
-1 The size, in terms of virtual memory, of a single reduce slot in the Map-Reduce framework, used by the scheduler. A job can ask for multiple slots for a single reduce task via mapred.job.reduce.memory.mb, upto the limit specified by mapred.cluster.max.reduce.memory.mb, if the scheduler supports the feature. The value of -1 indicates that this feature is turned off.
mapred.cluster.max
.map.memory.mb
-1 The maximum size, in terms of virtual memory, of a single map task launched by the Map-Reduce framework, used by the scheduler. A job can ask for multiple slots for a single map task via mapred.job.map.memory.mb, upto the limit specified by mapred.cluster.max.map.memory.mb, if the scheduler supports the feature. The value of -1 indicates that this feature is turned off.
mapred.cluster.max
.reduce.memory.mb
-1 The maximum size, in terms of virtual memory, of a single reduce task launched by the Map-Reduce framework, used by the scheduler. A job can ask for multiple slots for a single reduce task via mapred.job.reduce.memory.mb, upto the limit specified by mapred.cluster.max.reduce.memory.mb, if the scheduler supports the feature. The value of -1 indicates that this feature is turned off.
mapred.job.map.memory.mb -1 The size, in terms of virtual memory, of a single map task for the job. A job can ask for multiple slots for a single map task, rounded up to the next multiple of mapred.cluster.map.memory.mb and upto the limit specified by mapred.cluster.max.map.memory.mb, if the scheduler supports the feature. The value of -1 indicates that this feature is turned off iff mapred.cluster.map.memory.mb is also turned off (-1).
mapred.job.reduce.memory.mb -1 The size, in terms of virtual memory, of a single reduce task for the job. A job can ask for multiple slots for a single map task, rounded up to the next multiple of mapred.cluster.reduce.memory.mb and upto the limit specified by mapred.cluster.max.reduce.memory.mb, if the scheduler supports the feature. The value of -1 indicates that this feature is turned off iff mapred.cluster.reduce.memory.mb is also turned off (-1).
mapred.child.tmp ./tmp To set the value of tmp directory for map and reduce tasks. If the value is an absolute path, it is directly assigned. Otherwise, it is prepended with task's working directory. The java tasks are executed with option -Djava.io.tmpdir='the absolute path of the tmp dir'. Pipes and streaming are set with environment variable, TMPDIR='the absolute path of the tmp dir'
reduce
mapred.inmem
.merge.threshold
1000 當map輸出或合併輸出的資料到達指定的門檻值時則寫入到磁碟中, 若此直設為0表示無門檻限制
reduce
mapred.job.shuffle
.merge.percent
0.66 reduce接收map資料先儲存在暫存區,當達到此設定的比率則寫入到磁碟中
reduce
mapred.job.shuffle.input
.buffer.percent
0.70 設定使用多少reduce的暫存記憶體(百分比), 作為接收map資料的暫存區.
mapred.job.reduce.input
.buffer.percent
0.0 The percentage of memory- relative to the maximum heap size- to retain map outputs during the reduce. When the shuffle is concluded, any remaining map outputs in memory must consume less than this threshold before the reduce can begin.
mapred.map.tasks
.speculative.execution
true 決定是否開啟 mapper 的推測性執行(Speculative Execution)。一般來說,假設一個 job 有 100 個 mappers,其中 99 個很快就完成,剩最後一個非常的慢,系統還是會等到他完成整個 job 才算結束。會慢的原因可能是硬體有問題,網路不穩或程式寫的不夠好。但這不是 Hadoop 本身要處理的問題。Hadoop 能做的是,在另一個 tasktracer 上執行同樣的 mapper,先執行完的 mapper output 會傳給 reducer,比較慢而沒有執行完的 mapper 會自動被所屬的 tasktracer 殺掉。要注意的是,被殺掉的 task 數也會被計算在 mapred.reduce.max.attempts 裡。
推測性執行並不是為了做平行運算用的,原本的 mapper 及推測性 mapper (speculative mapper) 也不會同時被執行。判斷是否會啟動另一個 speculative mapper 的理由是當原本的 mapper 執行超過某個特定時間(至少一分鐘),而且原本的 mapper 長時間沒有回報任何新的進度才會被執行。這也不是讓程式可靠度提升的正確方式,如果發現原本的程式邏輯有錯造成某些 mappers 執行較慢,應該以改程式為主。另外,如果開發者沒有想到推測性執行的可能性,可能同樣的 mapper 讀寫同一份資源造成 race condition。
在 production 的環境會有大量的 M/R job 在執行,建議的做法是設為 false,不要讓系統消耗過多的資源去執行多餘的 mapper。由 client 來決定是否使用推測性執行會比較好
mapred.reduce.tasks
.speculative.execution
true 同上,差別只在設的是 reducer 的推測性執行
JVM
mapred.job.reuse
.jvm.num.tasks
1 指定幾個不同作業的任務可以共用一個JVM來執行. -1則是沒有限制
job.setJobTasksToExecutePerJvm()
mapred.min.split.size 0 The minimum size chunk that map input should be split into. Note that some file formats may have minimum split sizes that take priority over this setting.
mapred.jobtracker
.maxtasks.per.job
-1 The maximum number of tasks for a single job. A value of -1 indicates that there is no maximum.
mapred.submit.replication 10 The replication level for submitted job files. This should be around the square root of the number of nodes.
mapred.tasktracker.dns.interface default The name of the Network Interface from which a task tracker should report its IP address.
mapred.tasktracker
.dns.nameserver
default The host name or IP address of the name server (DNS) which a TaskTracker should use to determine the host name used by the JobTracker for communication and display purposes.
reduce
tasktracker.http.threads
40 tasktracer http server 所使用的 thread 數量,主要是讓 reducer 在 shuffle 階段取得 mapper 的中間產出。這是一個全域的變數,並不能依據各自的需求做修改。一般來說,在小的 cluster 裡保持原來設定即可。越大的值所使用的記憶體也會相對增加,但效果不見得顯著。在 Apache 官網上的測試報告,2000 個 nodes 也只設定到 50 而已
mapred.task.tracker.http.address 0.0.0.0:50060 tasktracker Web UI 用的 port。除非是為了 security 的考量才會需要改 binding 的 IP/Port,不然不需要改這個值
keep.failed.task.files false Should the files for failed tasks be kept. This should only be used on jobs that are failing, because the storage is never reclaimed. It also prevents the map outputs from being erased from the reduce directory as they are consumed.
mapred.output.compress false Should the job outputs be compressed?
mapred.output.compression
.type
RECORD If the job outputs are to compressed as SequenceFiles, how should they be compressed? Should be one of NONE, RECORD or BLOCK.
mapred.output.compression
.codec
org.apache.hadoop.io
.compress.DefaultCodec
If the job outputs are compressed, how should they be compressed?
map
mapred.compress.map.output
false 決定 mapper 的 output 是否要壓縮。一般來說,效能的瓶頸大部分是在 IO,而不是 CPU。所以大型的 cluster 來說最好設為 true,可以減少 mapper 的資料寫入 disk 的時間,節省暫存檔的空間,減少網路傳輸量,及把資料轉給 reducer 的時間
map
mapred.map.output
.compression.codec
org.apache.hadoop.io
.compress.DefaultCodec
如果 mapred.compress.map.output 設為 true,則會用這個 codec 來執行壓縮。一般常見的壓縮格式
  • deflate: org.apache.hadoop.io.compress.DefaultCodec,已內建
  • gzip: org.apache.hadoop.io.compress.GzipCodec,已內建
  • bzip2: org.apache.hadoop.io.compress.BZip2Codec,已內建
  • lzo: com.hadoop.compression.lzo.LzoCodec,因為 lzo 是 GPL license,Apache 或 Cloudera 的版本沒有內建 ,需要自行裝 lzo package
  • snappy: org.apache.hadoop.io.compress.SnappyCodec,Cloudera 的版本已經有內建這個 codec
map.sort.class org.apache.hadoop
.util.QuickSort
The default sort class for sorting keys.
mapred.userlog.limit.kb 0 The maximum size of user-logs of each task in KB. 0 disables the cap.
mapred.userlog.retain.hours 24 The maximum time, in hours, for which the user-logs are to be retained after the job completion.
mapred.user.jobconf.limit 5242880 The maximum allowed size of the user jobconf. The default is set to 5 MB
mapred.hosts   跟 hdfs-site.xml 裡的 dfs.hosts 一樣。此值是指定一個檔案位置,名字可自取,如 : /etc/hadoop/conf/mapred-hosts,並列出所有可以連結 jobtracer 的機器清單。不在清單上的機器是沒有權限的
mapred.hosts.exclude   跟 hdfs-site.xml 裡的 dfs.hosts.exclude 一樣。當需要汰換或移除多台機器的 tasktracer 時會用到。一般來說,為了 data locality 的考量,一台機器上會同時起 datanode 和 tasktracer。在汰換時也需要同時停掉這些 services。所以方便起見,dfs.hosts 和 mapred.hosts 會共用同一個檔案,dfs.hosts.exclude 和 mapred.hosts.exclude 也會共用同一個檔案
mapred.heartbeats.in.second 100 Expert: Approximate number of heart-beats that could arrive at JobTracker in a second. Assuming each RPC can be processed in 10msec, the default value is made 100 RPCs in a second.
mapred.max.tracker.blacklists 4 The number of blacklists for a tasktracker by various jobs after which the tasktracker will be marked as potentially faulty and is a candidate for graylisting across all jobs. (Unlike blacklisting, this is advisory; the tracker remains active. However, it is reported as graylisted in the web UI, with the expectation that chronically graylisted trackers will be manually decommissioned.) This value is tied to mapred.jobtracker.blacklist.fault-timeout-window; faults older than the window width are forgiven, so the tracker will recover from transient problems. It will also become healthy after a restart.
mapred.jobtracker.blacklist
.fault-timeout-window
180 The timeout (in minutes) after which per-job tasktracker faults are forgiven. The window is logically a circular buffer of time-interval buckets whose width is defined by mapred.jobtracker.blacklist.fault-bucket-width; when the "now" pointer moves across a bucket boundary, the previous contents (faults) of the new bucket are cleared. In other words, the timeout's granularity is determined by the bucket width.
mapred.jobtracker.blacklist
.fault-bucket-width
15 The width (in minutes) of each bucket in the tasktracker fault timeout window. Each bucket is reused in a circular manner after a full timeout-window interval (defined by mapred.jobtracker.blacklist.fault-timeout-window).
mapred.max.tracker.failures 4 The number of task-failures on a tasktracker of a given job after which new tasks of that job aren't assigned to it.
jobclient.output.filter FAILED The filter for controlling the output of the task's userlogs sent to the console of the JobClient. The permissible options are: NONE, KILLED, FAILED, SUCCEEDED and ALL.
mapred.job.tracker.persist
.jobstatus.active
false Indicates if persistency of job status information is active or not.
mapred.job.tracker.persist
.jobstatus.hours
0 The number of hours job status information is persisted in DFS. The job status information will be available after it drops of the memory queue and between jobtracker restarts. With a zero value the job status information is not persisted at all in DFS.
mapred.job.tracker.persist
.jobstatus.dir
/jobtracker/jobsInfo The directory where the job status information is persisted in a file system to be available after it drops of the memory queue and between jobtracker restarts.
mapreduce.job.complete
.cancel.delegation.tokens
true if false - do not unregister/cancel delegation tokens from renewal, because same tokens may be used by spawned jobs
mapred.task.profile false To set whether the system should collect profiler information for some of the tasks in this job? The information is stored in the user log directory. The value is "true" if task profiling is enabled.
mapred.task.profile.maps 0-2 To set the ranges of map tasks to profile. mapred.task.profile has to be set to true for the value to be accounted.
mapred.task.profile.reduces 0-2 To set the ranges of reduce tasks to profile. mapred.task.profile has to be set to true for the value to be accounted.
mapred.line.input
.format.linespermap
1 Number of lines per split in NLineInputFormat.
mapred.skip.attempts.to
.start.skipping
2 The number of Task attempts AFTER which skip mode will be kicked off. When skip mode is kicked off, the tasks reports the range of records which it will process next, to the TaskTracker. So that on failures, TT knows which ones are possibly the bad records. On further executions, those are skipped.
map
mapred.skip.map.auto
.incr.proc.count
true The flag which if set to true, 跳過損壞的紀錄,跳過的紀錄預設在 _logs/skip
SkipBadRecords.COUNTER_MAP_PROCESSED_RECORDS is incremented by MapRunner after invoking the map function. This value must be set to false for applications which process the records asynchronously or buffer the input records. For example streaming. In such cases applications should increment this counter on their own.
reduce
mapred.skip.reduce.auto
.incr.proc.count
true The flag which if set to true, 跳過損壞的紀錄,跳過的紀錄預設在 _logs/skip
SkipBadRecords.COUNTER_REDUCE_PROCESSED_GROUPS is incremented by framework after invoking the reduce function. This value must be set to false for applications which process the records asynchronously or buffer the input records. For example streaming. In such cases applications should increment this counter on their own.
reduce
mapred.skip.out.dir
  跳過的紀錄輸出目錄. 若無指定則預設為 _logs/skip. 若指定為 "none" 則不紀錄跳過的資料
mapred.skip.map.max.skip.records 0 The number of acceptable skip records surrounding the bad record PER bad record in mapper. The number includes the bad record as well. To turn the feature of detection/skipping of bad records off, set the value to 0. The framework tries to narrow down the skipped range by retrying until this threshold is met OR all attempts get exhausted for this task. Set the value to Long.MAX_VALUE to indicate that framework need not try to narrow down. Whatever records(depends on application) get skipped are acceptable.
mapred.skip.reduce
.max.skip.groups
0 The number of acceptable skip groups surrounding the bad group PER bad group in reducer. The number includes the bad group as well. To turn the feature of detection/skipping of bad groups off, set the value to 0. The framework tries to narrow down the skipped range by retrying until this threshold is met OR all attempts get exhausted for this task. Set the value to Long.MAX_VALUE to indicate that framework need not try to narrow down. Whatever groups(depends on application) get skipped are acceptable.
mapreduce.ifile.readahead true Configuration key to enable/disable IFile readahead.
mapreduce.ifile.readahead.bytes 4194304 Configuration key to set the IFile readahead length in bytes.
callback
job.end.notification.url
  當一個 job 執行完畢,不管成功或失敗,jobtracker 會根據這個設定送出一個 http request 通知指定的 url。例如: http://localhost:8080/jobstatus?jobId=$jobId& jobStatus=$jobStatus。$jobId 和 $jobStatus 是內建的參數,jobtracker 會把這兩個值轉成實際執行的 job id 和 status。jobstatus 是自己實作的程式,裡面可以依據傳來的 job id 再回 jobtracker.jsp 查詢更多的訊息並導入到不同的 logging system。對於做 M/R job monitoring 非常好用,不需要一直 polling jobtracker 來得知現有 job 執行的狀態
callback
job.end.retry.attempts
0 重送次數
callback
job.end.retry.interval
30000 重送間隔時間
hadoop.rpc.socket.factory
.class.JobSubmissionProtocol
  SocketFactory to use to connect to a Map/Reduce master (JobTracker). If null or empty, then use hadoop.rpc.socket.class.default.
mapred.task.cache.levels 2 This is the max level of the task cache. For example, if the level is 2, the tasks cached are at the host level and at the rack level.
mapred.queue.names default Comma separated list of queues configured for this jobtracker. Jobs are added to queues and schedulers can configure different scheduling properties for the various queues. To configure a property for a queue, the name of the queue must match the name specified in this value. Queue properties that are common to all schedulers are configured here with the naming convention, mapred.queue.$QUEUE-NAME.$PROPERTY-NAME, for e.g. mapred.queue.default.submit-job-acl. The number of queues configured in this parameter could depend on the type of scheduler being used, as specified in mapred.jobtracker.taskScheduler. For example, the JobQueueTaskScheduler supports only a single queue, which is the default configured here. Before adding more queues, ensure that the scheduler you've configured supports multiple queues.
mapred.acls.enabled false Specifies whether ACLs should be checked for authorization of users for doing various queue and job level operations. ACLs are disabled by default. If enabled, access control checks are made by JobTracker and TaskTracker when requests are made by users for queue operations like submit job to a queue and kill a job in the queue and job operations like viewing the job-details (See mapreduce.job.acl-view-job) or for modifying the job (See mapreduce.job.acl-modify-job) using Map/Reduce APIs, RPCs or via the console and web user interfaces.
mapred.queue.default.state RUNNING This values defines the state , default queue is in. the values can be either "STOPPED" or "RUNNING" This value can be changed at runtime.
mapred.job.queue.name default Queue to which a job is submitted. This must match one of the queues defined in mapred.queue.names for the system. Also, the ACL setup for the queue must allow the current user to submit a job to the queue. Before specifying a queue, ensure that the system is configured with the queue, and access is allowed for submitting jobs to the queue.
mapreduce.job.acl-modify-job   Job specific access-control list for 'modifying' the job. It is only used if authorization is enabled in Map/Reduce by setting the configuration property mapred.acls.enabled to true. This specifies the list of users and/or groups who can do modification operations on the job. For specifying a list of users and groups the format to use is "user1,user2 group1,group". If set to '*', it allows all users/groups to modify this job. If set to ' '(i.e. space), it allows none. This configuration is used to guard all the modifications with respect to this job and takes care of all the following operations: o killing this job o killing a task of this job, failing a task of this job o setting the priority of this job Each of these operations are also protected by the per-queue level ACL "acl-administer-jobs" configured via mapred-queues.xml. So a caller should have the authorization to satisfy either the queue-level ACL or the job-level ACL. Irrespective of this ACL configuration, job-owner, the user who started the cluster, cluster administrators configured via mapreduce.cluster.administrators and queue administrators of the queue to which this job is submitted to configured via mapred.queue.queue-name.acl-administer-jobs in mapred-queue-acls.xml can do all the modification operations on a job. By default, nobody else besides job-owner, the user who started the cluster, cluster administrators and queue administrators can perform modification operations on a job.
mapreduce.job.acl-view-job   Job specific access-control list for 'viewing' the job. It is only used if authorization is enabled in Map/Reduce by setting the configuration property mapred.acls.enabled to true. This specifies the list of users and/or groups who can view private details about the job. For specifying a list of users and groups the format to use is "user1,user2 group1,group". If set to '*', it allows all users/groups to modify this job. If set to ' '(i.e. space), it allows none. This configuration is used to guard some of the job-views and at present only protects APIs that can return possibly sensitive information of the job-owner like o job-level counters o task-level counters o tasks' diagnostic information o task-logs displayed on the TaskTracker web-UI and o job.xml showed by the JobTracker's web-UI Every other piece of information of jobs is still accessible by any other user, for e.g., JobStatus, JobProfile, list of jobs in the queue, etc. Irrespective of this ACL configuration, job-owner, the user who started the cluster, cluster administrators configured via mapreduce.cluster.administrators and queue administrators of the queue to which this job is submitted to configured via mapred.queue.queue-name.acl-administer-jobs in mapred-queue-acls.xml can do all the view operations on a job. By default, nobody else besides job-owner, the user who started the cluster, cluster administrators and queue administrators can perform view operations on a job.
mapred.tasktracker.indexcache.mb 10 The maximum memory that a task tracker allows for the index cache that is used when serving map outputs to reducers.
mapred.combine
.recordsBeforeProgress
10000 The number of records to process during combine output collection before sending a progress notification to the TaskTracker.
mapred.merge
.recordsBeforeProgress
10000 The number of records to process during merge before sending a progress notification to the TaskTracker.
mapred.reduce.slowstart
.completed.maps
0.05 當一個 job 裡的 mappers 數完成 5% 的時候開始執行 reducers。例如: 有 100 個 mappers 的情況,只要做完 5 個 mappers 就開始執行 reducers。
下面討論兩個極端的狀況
  • 0: 表示 reducers 會立即執行。一般來說不會這樣設定,reducers 還是會等待 mapper 執行完。
  • 1: 會等到所有的 mappers 執行完才開始執行 reducers。這很容易因為某個 mappers 執行較慢而拖慢整個 job 的執行時間。
client app 也可依據各自的需求修改這個參數。建議可設為 0.75,也就是 3/4 的 mappers 執行完後就執行 reducers
mapred.task.tracker.task-controller org.apache
.hadoop.mapred
.DefaultTaskController
TaskController which is used to launch and manage task execution
mapreduce.tasktracker.group   Expert: Group to which TaskTracker belongs. If LinuxTaskController is configured via mapreduce.tasktracker.taskcontroller, the group owner of the task-controller binary should be same as this group.
mapred.disk.healthChecker.interval 60000 How often the TaskTracker checks the health of its local directories. Configuring this to a value smaller than the heartbeat interval is equivalent to setting this to heartbeat interval value.
mapred.healthChecker.script.path   Absolute path to the script which is periodicallyrun by the node health monitoring service to determine if the node is healthy or not. If the value of this key is empty or the file does not exist in the location configured here, the node health monitoring service is not started.
mapred.healthChecker.interval 60000 Frequency of the node health script to be run, in milliseconds
mapred.healthChecker.script.timeout 600000 Time after node health script should be killed if unresponsive and considered that the script has failed.
mapred.healthChecker.script.args   List of arguments which are to be passed to node health script when it is being launched comma seperated.
mapreduce.job.counters.max 120 Limit on the number of counters allowed per job.
mapreduce.job.counters.groups.max 50 Limit on the number of counter groups allowed per job.
mapreduce.job.counters
.counter.name.max
64 Limit on the length of counter names in jobs. Names exceeding this limit will be truncated.
mapreduce.job.counters
.group.name.max
128 Limit on the length of counter group names in jobs. Names exceeding this limit will be truncated.
  • JobTracker
    • mapreduce.jobtracker.keytab.file
      預設值 : N/A
      說明 : 當 core-site.xml 裡的 hadoop.security.authentication 參數設為 “kerberos" 時就要指定 keytab 的位置。例如 : /etc/hadoop/conf/mapred.keytab
    • mapreduce.jobtracker.kerberos.principal
      預設值 : N/A
      說明 : 指定 kerberos principal 名稱,這在產生 keytab 檔案時會指定,一般常用的命名規則是 mapred/_HOST@KERBEROS-REALM.COM
  • TaskTracker
    • mapred.max.map.failures.percent
    • 預設值 : 0
      說明 : 設 0 表示不能有任何一個 mapper 失敗,不然整個 job 會失敗。如果在 M/R jobs 裡不需要這麼高的容錯率,允許 100 個 mapper 裡失敗 5 個也算 job 執行成功,那可以把這個值設為 5/100 = 5%。
    • mapreduce.tasktracker.keytab.file
      預設值 : N/A
      說明 : 當 core-site.xml 裡的 hadoop.security.authentication 參數設為 “kerberos" 時就要指定 keytab 的位置。例如 : /etc/hadoop/conf/mapred.keytab
    • mapreduce.tasktracker.kerberos.principal
      預設值 : N/A
      說明 : 指定 kerberos principal 名稱,這在產生 keytab 檔案時會指定,一般常用的命名規則是 mapred/_HOST@KERBEROS-REALM.COM
from http://fenriswolf.me/2012/08/06/hadoop-%E5%8F%83%E6%95%B8%E8%A8%AD%E5%AE...
Free Web Hosting