服务器系统功能描述,Hadoop mapreduce核心功能描述

在任务执行期间,应用程序在写文件时可以利用这个特性,比如 通过 FileOutputFormat.getWorkOutputPath()获得${mapred.work.output.dir}目录, 并在其下创建任意任务执行时所需的side-file,框架在任务尝试成功时会马上移动这些文件,因此不需要在程序内为每次任务尝试选取一个独一无二的名字。

注意:在每次任务尝试执行期间,${mapred.work.output.dir} 的值实际上是 ${mapred.output.dir}/_temporary/_{$taskid},这个值是Map/Reduce框架创建的。 所以使用这个特性的方法是,在 FileOutputFormat.getWorkOutputPath() 路径下创建side-file即可。

对于只使用map不使用reduce的作业,这个结论也成立。这种情况下,map的输出结果直接生成到HDFS上。

RecordWriter

RecordWriter 生成 对到输出文件。

RecordWriter的实现把作业的输出结果写到 FileSystem。

其他有用的特性

Counters

Counters 是多个由Map/Reduce框架或者应用程序定义的全局计数器。 每一个Counter可以是任何一种 Enum类型。同一特定Enum类型的Counter可以汇集到一个组,其类型为Counters.Group。

应用程序可以定义任意(Enum类型)的Counters并且可以通过 map 或者 reduce方法中的 Reporter.incrCounter(Enum, long)或者 Reporter.incrCounter(String, String, long) 更新。之后框架会汇总这些全局counters。

DistributedCache

DistributedCache 可将具体应用相关的、大尺寸的、只读的文件有效地分布放置。

DistributedCache 是Map/Reduce框架提供的功能,能够缓存应用程序所需的文件 (包括文本,档案文件,jar文件等)。

应用程序在JobConf中通过url(hdfs://)指定需要被缓存的文件。 DistributedCache假定由hdfs://格式url指定的文件已经在 FileSystem上了。

Map-Redcue框架在作业所有任务执行之前会把必要的文件拷贝到slave节点上。 它运行高效是因为每个作业的文件只拷贝一次并且为那些没有文档的slave节点缓存文档。

DistributedCache 根据缓存文档修改的时间戳进行追踪。 在作业执行期间,当前应用程序或者外部程序不能修改缓存文件。

distributedCache可以分发简单的只读数据或文本文件,也可以分发复杂类型的文件例如归档文件和jar文件。归档文件(zip,tar,tgz和tar.gz文件)在slave节点上会被解档(un-archived)。 这些文件可以设置执行权限。

用户可以通过设置mapred.cache.{files|archives}来分发文件。 如果要分发多个文件,可以使用逗号分隔文件所在路径。也可以利用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 分发文件。

用户可以通过 DistributedCache.createSymlink(Configuration)方法让DistributedCache 在当前工作目录下创建到缓存文件的符号链接。 或者通过设置配置文件属性mapred.create.symlink为yes。 分布式缓存会截取URI的片段作为链接的名字。 例如,URI是 hdfs://namenode:port/lib.so.1#lib.so, 则在task当前工作目录会有名为lib.so的链接, 它会链接分布式缓存中的lib.so.1。

DistributedCache可在map/reduce任务中作为 一种基础软件分发机制使用。它可以被用于分发jar包和本地库(native libraries)。 DistributedCache.addArchiveToClassPath(Path, Configuration)和 DistributedCache.addFileToClassPath(Path, Configuration) API能够被用于 缓存文件和jar包,并把它们加入子jvm的classpath。也可以通过设置配置文档里的属性 mapred.job.classpath.{files|archives}达到相同的效果。缓存文件可用于分发和装载本地库。

Tool

Tool 接口支持处理常用的Hadoop命令行选项。

Tool 是Map/Reduce工具或应用的标准。应用程序应只处理其定制参数, 要把标准命令行选项通过 ToolRunner.run(Tool, String[]) 委托给 GenericOptionsParser处理。

Hadoop命令行的常用选项有:

-conf

-D

-fs

-jt

IsolationRunner

IsolationRunner 是帮助调试Map/Reduce程序的工具。

使用IsolationRunner的方法是,首先设置 keep.failed.tasks.files属性为true (同时参考keep.tasks.files.pattern)。

然后,登录到任务运行失败的节点上,进入 TaskTracker的本地路径运行 IsolationRunner:

$ cd /taskTracker/${taskid}/work

$ bin/hadoop org.apache.hadoop.mapred.IsolationRunner ../job.xml

IsolationRunner会把失败的任务放在单独的一个能够调试的jvm上运行,并且采用和之前完全一样的输入数据。

Profiling

Profiling是一个工具,它使用内置的java profiler工具进行分析获得(2-3个)map或reduce样例运行分析报告。

用户可以通过设置属性mapred.task.profile指定系统是否采集profiler信息。 利用api JobConf.setProfileEnabled(boolean)可以修改属性值。如果设为true, 则开启profiling功能。profiler信息保存在用户日志目录下。缺省情况,profiling功能是关闭的。

如果用户设定使用profiling功能,可以使用配置文档里的属性 mapred.task.profile.{maps|reduces} 设置要profile map/reduce task的范围。设置该属性值的api是 JobConf.setProfileTaskRange(boolean,String)。 范围的缺省值是0-2。

用户可以通过设定配置文档里的属性mapred.task.profile.params 来指定profiler配置参数。修改属性要使用api JobConf.setProfileParams(String)。当运行task时,如果字符串包含%s。 它会被替换成profileing的输出文件名。这些参数会在命令行里传递到子JVM中。缺省的profiling 参数是 -agentlib:hprof=cpu=samples,heap=sites,force=n,thread=y,verbose=n,file=%s。

调试

Map/Reduce框架能够运行用户提供的用于调试的脚本程序。 当map/reduce任务失败时,用户可以通过运行脚本在任务日志(例如任务的标准输出、标准错误、系统日志以及作业配置文件)上做后续处理工作。用户提供的调试脚本程序的标准输出和标准错误会输出为诊断文件。如果需要的话这些输出结果也可以打印在用户界面上。

在接下来的章节,我们讨论如何与作业一起提交调试脚本。为了提交调试脚本, 首先要把这个脚本分发出去,而且还要在配置文件里设置。

如何分发脚本文件:

用户要用 DistributedCache 机制来分发和链接脚本文件

如何提交脚本:

一个快速提交调试脚本的方法是分别为需要调试的map任务和reduce任务设置 "mapred.map.task.debug.script" 和 "mapred.reduce.task.debug.script" 属性的值。这些属性也可以通过 JobConf.setMapDebugScript(String) 和 JobConf.setReduceDebugScript(String) API来设置。对于streaming, 可以分别为需要调试的map任务和reduce任务使用命令行选项-mapdebug 和 -reducedegug来提交调试脚本。

脚本的参数是任务的标准输出、标准错误、系统日志以及作业配置文件。在运行map/reduce失败的节点上运行调试命令是:

$script $stdout $stderr $syslog $jobconf

Pipes 程序根据第五个参数获得c++程序名。 因此调试pipes程序的命令是

$script $stdout $stderr $syslog $jobconf $program

默认行为

对于pipes,默认的脚本会用gdb处理core dump, 打印 stack trace并且给出正在运行线程的信息。

JobControl

JobControl是一个工具,它封装了一组Map/Reduce作业以及他们之间的依赖关系。

数据压缩

Hadoop Map/Reduce框架为应用程序的写入文件操作提供压缩工具,这些工具可以为map输出的中间数据和作业最终输出数据(例如reduce的输出)提供支持。它还附带了一些 CompressionCodec的实现,比如实现了 zlib和lzo压缩算法。 Hadoop同样支持gzip文件格式。

考虑到性能问题(zlib)以及Java类库的缺失(lzo)等因素,Hadoop也为上述压缩解压算法提供本地库的实现。更多的细节请参考 这里。

中间输出

应用程序可以通过 JobConf.setCompressMapOutput(boolean)api控制map输出的中间结果,并且可以通过 JobConf.setMapOutputCompressorClass(Class)api指定 CompressionCodec。

作业输出

应用程序可以通过 FileOutputFormat.setCompressOutput(JobConf, boolean) api控制输出是否需要压缩并且可以使用 FileOutputFormat.setOutputCompressorClass(JobConf, Class)api指定CompressionCodec。

如果作业输出要保存成 SequenceFileOutputFormat格式,需要使用 SequenceFileOutputFormat.setOutputCompressionType(JobConf, SequenceFile.CompressionType)api,来设定 SequenceFile.CompressionType(i.e. RECORD / BLOCK - 默认是RECORD)。

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样修改老旧commit的message信息?

找到操作提交记录的父提交id&#xff0c;也可以理解为上一次提交记录 git rebase -i <父commitid> 只修该提交信息用把pick更新为r&#xff0c;然后在git弹出的命令窗口中&#xff0c; 修改提交记录信息&#xff0c;最后保存退出即可

腾讯Techo开发者大会揭晓云存储发展趋向:高性能、高可用、高性价比

产业数字化转型过程中产生着比过去任何一个时代都多的数据。在这样的背景下&#xff0c;数据存储技术应该怎么发展&#xff1f;11月7日&#xff0c;在腾讯Techo开发者大会上&#xff0c;来自科研领域的专家和腾讯云存储业务的工程师们共同揭开了云存储的发展趋势。 据IDC预测&…

python中imread导入失败_ImportError:无法导入加载图像文件所需的Python Imaging Library(PIL)...

我正在尝试在facemorpher 1.0.1 python包中运行average.py程序.我创建了一个虚拟环境,该环境中安装了带有自制软件的openCV,安装在自制软件中的python 2.7和可执行框架python,它们在虚拟环境cv中构建了python的框架.运行平均程序当前给我这个输出.(cv) Francess-MacBook-Pro-2:…

java 计算机开始时间,关于计算Java程序运行时间

第一种是以毫秒为单位计算的。Java代码//伪代码long startTimeSystem.currentTimeMillis(); //获取开始时间doSomeThing(); //测试的代码段long endTimeSystem.currentTimeMillis(); //获取结束时间System.out.println("程序运行时间&#xff1a; "(end-start)&qu…

2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量

双11快乐&#xff0c;该买的应该都已经买到了吧&#xff1f; 跟大家说个暖心事儿&#xff1a;今天&#xff0c;阿里云以天猫双11之子派大星星星l的名义&#xff0c;在公安部打拐办团圆项目、缘梦基金、宝贝回家等公益组织的鼎力支持下&#xff0c;将失踪儿童的信息放在这个网页…

怎样把连续的多个commit整理成1个?

怎样把连续的多个commit整理成1个&#xff1f;前提是&#xff1a;此分支尚未推送至远程&#xff0c;只修该提交记录&#xff0c;对提交文件内容不做修改 找到操作提交记录的父提交id&#xff0c;也可以理解为上一次提交记录 git rebase -i ac5e973 1.找到像合并的那几个提交信息…

重磅!云+X 案例征集正式启动啦!

云计算的概念已经悄然走过十余年&#xff0c;尽管我们对于它的关注&#xff0c;没有像人工智能、物联网、区块链那么密切&#xff0c;但是云服务在我们的生活与工作中早已无处不在。越来越多的新兴技术高调出现在大众的面前&#xff0c;唯有云计算仍以最低调的态度做着最实用的…

Nacos 发布0.3.0版本,迄今为止最好看的版本

近日&#xff0c;Nacos 0.3.0 正式发布&#xff0c;该版本旨在增强对服务列表&#xff0c;健康状态管理&#xff0c;服务治理&#xff0c;分布式配置管理等方面的管控能力&#xff0c;以便进一步帮助用户降低管理微服务应用架构的成本&#xff0c;在第一版的 UI 功能规划中&…

定义快捷代码_nodepad++代码编辑器替代工具整理

概述代码编辑工具选择Visual Studio CodeVS vode特点&#xff1a;开源&#xff0c;免费&#xff1b;自定义配置集成git智能提示强大支持各种文件格式(html/jade/css/less/sass/xml)调试功能强大各种方便的快捷键强大的插件扩展EditPlus默认支持HTML、CSS、PHP、ASP、Perl、C/C、…

王者荣耀转移完成会显示我的服务器吗,王者荣耀账号多久能转移完

4月29日&#xff0c;王者荣耀已经发布跨系统角色转移测试名额&#xff0c;每日限量&#xff0c;各位召唤师也都蠢蠢欲动&#xff0c;期待已久的功能终于上线啦&#xff0c;感兴趣的小伙伴快跟着超分手游网的小编一起去了解一下吧&#xff01;王者荣耀账号多久能转移完申请提交后…

怎样把间隔的几个commit整理成1个呢?

怎样把间隔的几个commit整理成1个呢&#xff1f; 前提是&#xff1a;此分支尚未推送至远程&#xff0c;只修该提交记录&#xff0c;对提交文件内容不做修改 找到操作提交记录的父提交id&#xff0c;也可以理解为上一次提交记录 git rebase -i ac5e973 1.找到像合并的那几个提交…

华为双11发 20 亿奖金!?

戳蓝字“CSDN云计算”关注我们哦&#xff01;11 月 11 日当天&#xff0c;有华为员工在社交网络上爆料称&#xff0c;华为双 11 发放两份特别奖金&#xff0c;一份是阳关普照奖&#xff0c;另外一份是 20 亿奖金。该爆料称&#xff1a;“双 11&#xff0c;华为发放两份特别奖金…

python语言是编译性语音_最强编程语言 Java 和最受欢迎之 Python 的巅峰对决

作为程序员们的看家利器之编程语言&#xff0c;倘若技术开发者对其掌握得越深则对自身职业生涯越有益处&#xff0c;然随着技术的更新变革&#xff0c;我们在日常使用不单单只会用到一门编程语言&#xff0c;那么究竟该如何选择一门新的语言来上手&#xff1f;本文中&#xff0…

ajax结合java,ajax技术应用详细分析(后端java与客户端请求的结合)

Ajax 技术应用先回看 模态框的使用js比较薄弱如上 比如这部分加粗样式如下 是BOM窗口对象**js最薄弱 建议在浏览器练习** confirm方法跳转练习新疑问:怎么分辨js,jQuery和jsp代码 与其实现应用插入小点**延申说法 client客户端发送请求 (客户端层面)是client前端页面层****重要…

MySQL的未来在哪?

阿里云 MySQL&MariaDB 数据库产品结合开源社区&#xff0c;提供了稳定、可靠、便捷、弹性的在线数据库服务&#xff0c;帮助全球企业客户进行数字化转型。MySQL发展经历了一系列变化&#xff0c;从Sun到Oracle&#xff0c;发展也经过了几个阶段。MySQL从5.7版本开始走上了代…

Git 汇总

怎样比较暂存区和HEAD所含文件的变化&#xff1f;适用于&#xff0c;工作区的文件已经添加至暂存区&#xff0c;尚未进行提交&#xff0c;比较暂存区和当前分支的文件的不同&#xff0c;如果添加至暂存区的文件正确的&#xff0c;可以进行提交&#xff0c;推送远程&#xff1b;…

代码写成这样,老板把我开除了| IT 巨能唠

今天聊一聊遇到过的一些神逻辑代码&#xff0c;不一定很全&#xff0c;但真心让小编我自叹不如啊&#xff01;1、耍猴的最佳手段还记得 XX 手机的抢购活动么&#xff0c;抢购按钮的代码类似是这样的&#xff1a;<a href"javasript:alert(抢购结束!)">立即抢购&…

springboot+vue项目如何在linux上部署

在linux上部署项目&#xff0c;是我们实训项目作业的最后一步&#xff0c;此时我们的项目编码测试已经完成&#xff0c;接下来就需要在服务器上部署上线&#xff0c;那么如何部署上线&#xff0c;接下来我会在虚拟机上的CentOS7系统上实现部署&#xff0c; 一.下载JDK 因为我…

如何把暂存区恢复成和HEAD的一样?

使用场景&#xff1a; 本来打算&#xff0c;将暂存区的文件&#xff0c;进行提交本地仓分支当做一个新的版本&#xff0c; 但是发现&#xff0c;现在工作区的对文件的修改更适合作为一个新的版本&#xff0c;提交 至本地仓库的分支上&#xff0c;暂存区的文件需要全部删除&…

ajax respon有数据,Ajax怎么通过response在后台传递数据?(附代码)

这次给大家带来Ajax怎么通过response在后台传递数据&#xff1f;(附代码)&#xff0c;Ajax通过response在后台传递数据的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。这是js代码&#xff1a;var System {getHttpRequest: function(url, callback, o…