服务器系统功能描述,Hadoop mapreduce核心功能描述
在任務執(zhí)行期間,應用程序在寫文件時可以利用這個特性,比如 通過 FileOutputFormat.getWorkOutputPath()獲得${mapred.work.output.dir}目錄, 并在其下創(chuàng)建任意任務執(zhí)行時所需的side-file,框架在任務嘗試成功時會馬上移動這些文件,因此不需要在程序內(nèi)為每次任務嘗試選取一個獨一無二的名字。
注意:在每次任務嘗試執(zhí)行期間,${mapred.work.output.dir} 的值實際上是 ${mapred.output.dir}/_temporary/_{$taskid},這個值是Map/Reduce框架創(chuàng)建的。 所以使用這個特性的方法是,在 FileOutputFormat.getWorkOutputPath() 路徑下創(chuàng)建side-file即可。
對于只使用map不使用reduce的作業(yè),這個結(jié)論也成立。這種情況下,map的輸出結(jié)果直接生成到HDFS上。
RecordWriter
RecordWriter 生成 對到輸出文件。
RecordWriter的實現(xiàn)把作業(yè)的輸出結(jié)果寫到 FileSystem。
其他有用的特性
Counters
Counters 是多個由Map/Reduce框架或者應用程序定義的全局計數(shù)器。 每一個Counter可以是任何一種 Enum類型。同一特定Enum類型的Counter可以匯集到一個組,其類型為Counters.Group。
應用程序可以定義任意(Enum類型)的Counters并且可以通過 map 或者 reduce方法中的 Reporter.incrCounter(Enum, long)或者 Reporter.incrCounter(String, String, long) 更新。之后框架會匯總這些全局counters。
DistributedCache
DistributedCache 可將具體應用相關(guān)的、大尺寸的、只讀的文件有效地分布放置。
DistributedCache 是Map/Reduce框架提供的功能,能夠緩存應用程序所需的文件 (包括文本,檔案文件,jar文件等)。
應用程序在JobConf中通過url(hdfs://)指定需要被緩存的文件。 DistributedCache假定由hdfs://格式url指定的文件已經(jīng)在 FileSystem上了。
Map-Redcue框架在作業(yè)所有任務執(zhí)行之前會把必要的文件拷貝到slave節(jié)點上。 它運行高效是因為每個作業(yè)的文件只拷貝一次并且為那些沒有文檔的slave節(jié)點緩存文檔。
DistributedCache 根據(jù)緩存文檔修改的時間戳進行追蹤。 在作業(yè)執(zhí)行期間,當前應用程序或者外部程序不能修改緩存文件。
distributedCache可以分發(fā)簡單的只讀數(shù)據(jù)或文本文件,也可以分發(fā)復雜類型的文件例如歸檔文件和jar文件。歸檔文件(zip,tar,tgz和tar.gz文件)在slave節(jié)點上會被解檔(un-archived)。 這些文件可以設置執(zhí)行權(quán)限。
用戶可以通過設置mapred.cache.{files|archives}來分發(fā)文件。 如果要分發(fā)多個文件,可以使用逗號分隔文件所在路徑。也可以利用API來設置該屬性: DistributedCache.addCacheFile(URI,conf)/ DistributedCache.addCacheArchive(URI,conf) and DistributedCache.setCacheFiles(URIs,conf)/ DistributedCache.setCacheArchives(URIs,conf) 其中URI的形式是 hdfs://host:port/absolute-path#link-name 在Streaming程序中,可以通過命令行選項 -cacheFile/-cacheArchive 分發(fā)文件。
用戶可以通過 DistributedCache.createSymlink(Configuration)方法讓DistributedCache 在當前工作目錄下創(chuàng)建到緩存文件的符號鏈接。 或者通過設置配置文件屬性mapred.create.symlink為yes。 分布式緩存會截取URI的片段作為鏈接的名字。 例如,URI是 hdfs://namenode:port/lib.so.1#lib.so, 則在task當前工作目錄會有名為lib.so的鏈接, 它會鏈接分布式緩存中的lib.so.1。
DistributedCache可在map/reduce任務中作為 一種基礎(chǔ)軟件分發(fā)機制使用。它可以被用于分發(fā)jar包和本地庫(native libraries)。 DistributedCache.addArchiveToClassPath(Path, Configuration)和 DistributedCache.addFileToClassPath(Path, Configuration) API能夠被用于 緩存文件和jar包,并把它們加入子jvm的classpath。也可以通過設置配置文檔里的屬性 mapred.job.classpath.{files|archives}達到相同的效果。緩存文件可用于分發(fā)和裝載本地庫。
Tool
Tool 接口支持處理常用的Hadoop命令行選項。
Tool 是Map/Reduce工具或應用的標準。應用程序應只處理其定制參數(shù), 要把標準命令行選項通過 ToolRunner.run(Tool, String[]) 委托給 GenericOptionsParser處理。
Hadoop命令行的常用選項有:
-conf
-D
-fs
-jt
IsolationRunner
IsolationRunner 是幫助調(diào)試Map/Reduce程序的工具。
使用IsolationRunner的方法是,首先設置 keep.failed.tasks.files屬性為true (同時參考keep.tasks.files.pattern)。
然后,登錄到任務運行失敗的節(jié)點上,進入 TaskTracker的本地路徑運行 IsolationRunner:
$ cd /taskTracker/${taskid}/work
$ bin/hadoop org.apache.hadoop.mapred.IsolationRunner ../job.xml
IsolationRunner會把失敗的任務放在單獨的一個能夠調(diào)試的jvm上運行,并且采用和之前完全一樣的輸入數(shù)據(jù)。
Profiling
Profiling是一個工具,它使用內(nèi)置的java profiler工具進行分析獲得(2-3個)map或reduce樣例運行分析報告。
用戶可以通過設置屬性mapred.task.profile指定系統(tǒng)是否采集profiler信息。 利用api JobConf.setProfileEnabled(boolean)可以修改屬性值。如果設為true, 則開啟profiling功能。profiler信息保存在用戶日志目錄下。缺省情況,profiling功能是關(guān)閉的。
如果用戶設定使用profiling功能,可以使用配置文檔里的屬性 mapred.task.profile.{maps|reduces} 設置要profile map/reduce task的范圍。設置該屬性值的api是 JobConf.setProfileTaskRange(boolean,String)。 范圍的缺省值是0-2。
用戶可以通過設定配置文檔里的屬性mapred.task.profile.params 來指定profiler配置參數(shù)。修改屬性要使用api JobConf.setProfileParams(String)。當運行task時,如果字符串包含%s。 它會被替換成profileing的輸出文件名。這些參數(shù)會在命令行里傳遞到子JVM中。缺省的profiling 參數(shù)是 -agentlib:hprof=cpu=samples,heap=sites,force=n,thread=y,verbose=n,file=%s。
調(diào)試
Map/Reduce框架能夠運行用戶提供的用于調(diào)試的腳本程序。 當map/reduce任務失敗時,用戶可以通過運行腳本在任務日志(例如任務的標準輸出、標準錯誤、系統(tǒng)日志以及作業(yè)配置文件)上做后續(xù)處理工作。用戶提供的調(diào)試腳本程序的標準輸出和標準錯誤會輸出為診斷文件。如果需要的話這些輸出結(jié)果也可以打印在用戶界面上。
在接下來的章節(jié),我們討論如何與作業(yè)一起提交調(diào)試腳本。為了提交調(diào)試腳本, 首先要把這個腳本分發(fā)出去,而且還要在配置文件里設置。
如何分發(fā)腳本文件:
用戶要用 DistributedCache 機制來分發(fā)和鏈接腳本文件
如何提交腳本:
一個快速提交調(diào)試腳本的方法是分別為需要調(diào)試的map任務和reduce任務設置 "mapred.map.task.debug.script" 和 "mapred.reduce.task.debug.script" 屬性的值。這些屬性也可以通過 JobConf.setMapDebugScript(String) 和 JobConf.setReduceDebugScript(String) API來設置。對于streaming, 可以分別為需要調(diào)試的map任務和reduce任務使用命令行選項-mapdebug 和 -reducedegug來提交調(diào)試腳本。
腳本的參數(shù)是任務的標準輸出、標準錯誤、系統(tǒng)日志以及作業(yè)配置文件。在運行map/reduce失敗的節(jié)點上運行調(diào)試命令是:
$script $stdout $stderr $syslog $jobconf
Pipes 程序根據(jù)第五個參數(shù)獲得c++程序名。 因此調(diào)試pipes程序的命令是
$script $stdout $stderr $syslog $jobconf $program
默認行為
對于pipes,默認的腳本會用gdb處理core dump, 打印 stack trace并且給出正在運行線程的信息。
JobControl
JobControl是一個工具,它封裝了一組Map/Reduce作業(yè)以及他們之間的依賴關(guān)系。
數(shù)據(jù)壓縮
Hadoop Map/Reduce框架為應用程序的寫入文件操作提供壓縮工具,這些工具可以為map輸出的中間數(shù)據(jù)和作業(yè)最終輸出數(shù)據(jù)(例如reduce的輸出)提供支持。它還附帶了一些 CompressionCodec的實現(xiàn),比如實現(xiàn)了 zlib和lzo壓縮算法。 Hadoop同樣支持gzip文件格式。
考慮到性能問題(zlib)以及Java類庫的缺失(lzo)等因素,Hadoop也為上述壓縮解壓算法提供本地庫的實現(xiàn)。更多的細節(jié)請參考 這里。
中間輸出
應用程序可以通過 JobConf.setCompressMapOutput(boolean)api控制map輸出的中間結(jié)果,并且可以通過 JobConf.setMapOutputCompressorClass(Class)api指定 CompressionCodec。
作業(yè)輸出
應用程序可以通過 FileOutputFormat.setCompressOutput(JobConf, boolean) api控制輸出是否需要壓縮并且可以使用 FileOutputFormat.setOutputCompressorClass(JobConf, Class)api指定CompressionCodec。
如果作業(yè)輸出要保存成 SequenceFileOutputFormat格式,需要使用 SequenceFileOutputFormat.setOutputCompressionType(JobConf, SequenceFile.CompressionType)api,來設定 SequenceFile.CompressionType(i.e. RECORD / BLOCK - 默認是RECORD)。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的服务器系统功能描述,Hadoop mapreduce核心功能描述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技嘉注入usb 3.0工具_技嘉怎么安装
- 下一篇: mac抹掉磁盘重装系统未能与服务器取得联