热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Hadoop教程(三):MR重要运行参数-mysql教程

书接上回,继续为大家讲解MapReduce相关JobConfigurationJobConf是MR任务的配置对象,也是描述MR任务在Mapreduce框架中如何执行的主要途径,框架将如实的以该对象包含的信息来执行MR任务,但要注意以下特殊情况:一些配置参数被管理员在hadoop相关配置

书接上回,继续为大家讲解 MapReduce相关 Job Configuration JobConf是MR任务的配置对象,也是描述MR任务在Mapreduce框架中如何执行的主要途径,框架将如实的以该对象包含的信息来执行MR任务,但要注意以下特殊情况: 一些配置参数被管理员在hadoop相关配置

书接上回,继续为大家讲解 MapReduce相关

Job Configuration

JobConf是MR任务的配置对象,也是描述MR任务在Mapreduce框架中如何执行的主要途径,框架将如实的以该对象包含的信息来执行MR任务,但要注意以下特殊情况:

  • 一些配置参数被管理员在hadoop相关配置文件中(比如core-site.xml,mapred-site.xml)设置为 final,则不能被任务参数值改变。
  • 有一些参数通过方法可以直接设定,如通过 setNumReduceTasks(int)等设定。但是一些其他参数和框架内部、任务配置有更复杂的关系,所以设定更为复杂,比如要通过 setNumMapTasks(int)来进行设定。

最典型的,JobConf一般应用在确定Mapper、Combiner(如果使用的话)、Partitioner、Reducer、InputFormat、OutputFormat以及OutputCommitter的实现类上。JobConf也可以用来通过setInputPaths(JobConf, Path…)/ addInputPath(JobConf, Path),或者setInputPaths(JobConf, String)/ addInputPaths(JobConf, String)指定输入路径集合,通过setOutputPath(Path)设置任务结果输出路径。

JobConf也会用来指定一些可选的配置(一般使用在优化或者特殊分析用途)。比如指定作业使用的Comparator(比较器,用于排序或者分组);使用 DistributedCache缓存一些必须的文件;指定作业过程中数据和/或者作业结果是否被压缩和怎样压缩。也可以通过setMapDebugScript(String)/setReduceDebugScript(String)(还没用过:()对作业进行debug;通过 setMapSpeculativeExecution(boolean)/ setReduceSpeculativeExecution(boolean)指定任务执行中是否开启推测执行;通过setMaxMapAttempts(int)/setMaxReduceAttempts(int)设置每个任务的最大尝试次数;通过 setMaxMapTaskFailuresPercent(int)/ setMaxReduceTaskFailuresPercent(int)设置MR任务(map/reduce)可容忍的失败比率。

而且,用户可以用 set(String, String)/ get(String, String 设置应用需要的参数,但是对于大量数据(只读)请使用 DistributedCache。

MR运行参数

TaskTracer以独立的JVM子进程方式运行Mapper、Reducer。子任务继承TaskTracker的所有环境参数。用户可以通过在JobConf里 mapred.child.java.opts指定子jvm运行参数,例如通过-Djava.library.path=<>指定一些搜索共享库必须的非标准运行时链接库等等,这是可选的。如果 mapred.child.java.opts属性含有$taskid变量,这个变量值会在运行中被框架插入正在运行的任务id。

下面这个配置例子使用多参数和变量插入特性配置了JVM GC日志,可,通过jconsole工具无密码连接的JMX服务,用来观察子进程的内存、线程,也可以获取线程dump信息。另外配置里设置了子JVM的最大堆尺寸为512MB,通过java.library.path设置了共享库路径。

    
      mapred.child.java.opts
         -Xmx512M -Djava.library.path=/home/mycompany/lib -verbose:gc -Xloggc:/tmp/@taskid@.gc
         -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
    

内存管理

可以通过mapred.child.ulimit参数配置子进程可使用的最大虚拟内存。注意:该属性对单个进程设置最大限制,单位为KB,值必须大于等于最大堆内存(通过-Xmx设置)。

注意:mapred.child.java.opts只对从tasktracker分配和管理的子JVM进程有效。其他hadoop守护进程内存参数配置详见 Configuring the Environment of the Hadoop Daemons。

MR框架的其他组件可用内存也是可配置的。map和reduce任务的性能可以通过从影响操作并发和数据磁盘IO次数的角度来调试。监控针对单个任务而设置的文件系统计数器,尤其是具体到map输出到reduce的数据字节量,对调试影响任务运行性能都是非常有用的。

如果内存管理特性启用的话,用户可以选择性的覆盖一些默认配置,比如虚拟内存,RAM。下面是一些对任务有效的参数:

名称 类型 特点
mapred.task.maxvmem int 以字节为单位指定单个map或reduce任务的最大虚拟内存。如果任务超过该值就被kill
mapred.task.maxpmem int 以字节为单位指定单个map或reduce任务的最大RAM。这个值被调度器(Jobtracer)参考作为分配map\reduce任务的依据,避免让一个节点超RAM负载使用。

Map参数

map读出的一条记录将被序列化到一个buffer,元数据存储在元数据buffer中。如上面所说,当序列化buffer或者元数据buffer超出了设置的阙值,buffer中内容将被排序并在后台写入到磁盘,这个过程同时map持续输出记录行。如果buffer被写满就会发生一个spill过程,spill中map线程被阻塞。当map完成后,buffer中剩余记录写入磁盘并和在磁盘的按段存储的记录合并到一个文件中。减少spill次数可以缩短map时间,但是较大的buffer也会降低可用内存。

名称 类型 特点
io.sort.mb int 默认100。以MB为单位设置序列化和元数据buffer的大小。
io.sort.record.percent float 默认0.05。map记录序列化后数据元数据buffer所占总buffer百分比值。为了加速排序,除了序列化后本身尺寸外每条序列化后的记录需要16字节的元数据。io.sort.mb值被占用的百分比值超过设定值机会发生spill。对输出记录较少的map,值越高越可降低spill发生的次数。
io.sort.spill.percent float 默认0.80。元数据和序列化数据buffer空间阀值。当两者任何一个buffer空间达到该阀值,数据将被spill到磁盘。假设io.sort.record.percent=r, io.sort.mb=x,io.sort.spill.percent=q,那么在map线程spill之前最大处理的记录量为r*x*q*2^16。注意:较大的值可能降低spill的次数甚至避免合并,但是也会增加map被阻塞的几率。通过精确估计map的输出尺寸和减少spill次数可有效缩短map处理时间。

其他注意事项:

  • 如果spill阙值达到了,就会发生spill,记录收集将继续直到spill完成。例如io.sort.buffer.spill.percent设置为0.33,buffer剩余的部分被填满,spill发生,下一个spill将会包含所有收集的记录,或者是这个buffer的0.66部分,并且不会产生额外的spill过程。换句话说阙值像是定义的触发器,不会阻塞。
  • 大于序列化数据buffer的一条记录将首先触发一个spill,然后被spill到一个独立的文件中。没有配置参数来定义记录是否首先通过combiner。

Shuffle/Reduce参数

如前面所说,每个reduce通过HTTP获取map输出后读入内存,并周期性合并这些输出到磁盘。如果map输出压缩打开的话,每个输出将会解压后读入内存。下面的配置参数影响reduce处理中的合并和内存分配过程。

名称 类型 特点
io.sort.factor int 默认值10。指定同时可合并的文件片段数目。参数限制了打开文件的数目,压缩解码器。如果文件数超过了该值,合并将分成多次。这个参数一般适用于map任务,大多数作业应该配置该项。
mapred.inmem.merge.threshold int 在内存中合并到磁盘前读取已排序map输出文件的数目。类似前面说的spill阙值,该值不是一个用来分区的单元而是一个触发器。通常该值较高(1000),或者不启用(0),毕竟内存内合并比磁盘上合并成本更低。这个阙值只影响shuffle过程的内存合并。
mapred.job.shuffle.merge.percent float 0.66。内存合并前供map输出享有的内存百分比值,超过该值就会合并数据到磁盘。过大的值会降低获取和合并的并行效率。相反如果输入恰好整个放到内存,则可以设置为1.0。该参数只影响shuffle过程的内存合并频率。
mapred.job.shuffle.input.buffer.percent float 默认值0.7。shuffle过程中缓存map输出数据的内存占整个子jvm进程堆最大尺寸(通过mapred.child.java.opts设置)的百分比。该值可以视情况设置较高的值来存储大的较多的map输出。
mapred.job.reduce.input.buffer.percent float 0.0 内存合并中从内存刷到磁盘,直到剩余的map输出占用的内存少于jvm最大堆的该百分比值。默认情况下,在reduce开始之前需要保证最大的内存可用,所有的内存中map输出都会被合并到磁盘。对内存不敏感的reduce任务,该值可以适当提高,来避免磁盘IO(一般不会有)。

其他注意事项:

  • 如果map输出占用超过25%的内存去拷贝,这会直接被刷到磁盘而不会经过内存合并阶段。
  • 当combiner运行,前面所说的较高的合阙值和大的buffer不适用。因为在所有map输出都被取到之前合并就开始了,当spill发生时combiner处于运行状态。在一些实践中,用户可以通过合并输出使得磁盘spill足够小并可保证并行的spill和数据拉取来缩短reduce处理时间,而不是去不断的提高buffer尺寸。
  • 内存合并map输出并刷到磁盘时reduce过程开始,如果有多个输出片段spill到磁盘,或者至少有io.sort.factor个片段已经在磁盘上,那么中间合并过程是必须的,并且包含内存中处理map输出。

子JVM重用

可以通过指定mapred.job.reuse.jvm.num.tasks作业配置参数来启用jvm重用。默认是1,jvm不会被重用(每个jvm只处理1个任务)。如果设置为-1,那么一个jvm可以运行同一个作业的任意任务数目。用户可以通过JobConf.setNumTasksToExecutePerJvm(int)指定一个大于1的值。

下面是作业执行时的配置参数:

名称 类型 描述
mapred.job.id string 表示jobid
mapred.jar string job.jar在job路径下的位置
job.local.dir string 作业共享路径
mapred.tip.id string taskid
mapred.task.id string task尝试任务id
mapred.task.is.map boolean 是否是map任务
mapred.task.partition int task在job中的id
map.input.file string map输入文件路径
map.input.start long map输入split开始偏移量
map.input.length long map输入分片的字节数
mapred.work.output.dir string 任务临时输出路径

任务的标准输出和错误流日志由TaskTracker读入并写入${HADOOP LOGDIR}/userlogs路径。

DistributedCache可以被用来发布map或者reduce用到的jar包、本地共享库。子JVM进程通常可使用java.library.path和LD LIBRARYPATH指定其自身的工作路径。缓存库可以通过 System.loadLibrary或者 System.load加载。关于使用distributed cache 加载共享库详细信息可以查看 Loading native libraries through DistributedCache。

?

相关文章

  • Hadoop教程(二)
  • Hadoop教程(一)
  • 使用Hadoop和BIRT对海量数据进行可视化处理
  • 专为Mac本跟踪Hadoop任务的应用
  • Log4j 2.x架构
  • 为什么这段代码输出的是”Hello World”
  • 为Hbase建立高可用性多主节点
  • Log4j 2 介绍
  • 经典论文翻译导读之《Dremel: Interactive Analysis of WebScale Datasets》
  • MapReduce启蒙文献

推荐阅读
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
  • 本文介绍了如何在 MapReduce 作业中使用 SequenceFileOutputFormat 生成 SequenceFile 文件,并详细解释了 SequenceFile 的结构和用途。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 本文探讨了Hive作业中Map任务数量的确定方式,主要涉及HiveInputFormat和CombineHiveInputFormat两种InputFormat的分片计算逻辑。通过调整相关参数,可以有效控制Map任务的数量,进而优化Hive作业的性能。 ... [详细]
  • 深入解析Spark核心架构与部署策略
    本文详细探讨了Spark的核心架构,包括其运行机制、任务调度和内存管理等方面,以及四种主要的部署模式:Standalone、Apache Mesos、Hadoop YARN和Kubernetes。通过本文,读者可以深入了解Spark的工作原理及其在不同环境下的部署方式。 ... [详细]
  • 本文介绍了Hive作为基于Hadoop的数据仓库工具的核心概念,包括其基本功能、使用理由、特点以及与Hadoop的关系。同时,文章还探讨了Hive相较于传统关系型数据库的不同之处,并展望了Hive的发展前景。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 初探Hadoop:第一章概览
    本文深入探讨了《Hadoop》第一章的内容,重点介绍了Hadoop的基本概念及其如何解决大数据处理中的关键挑战。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 在前一篇文章《Hadoop》系列之“踽踽独行”(二)中,我们详细探讨了云计算的核心概念。本章将重点转向物联网技术,全面解析其基本原理、应用场景及未来发展前景。通过深入分析物联网的架构和技术栈,我们将揭示其在智能城市、工业自动化和智能家居等领域的广泛应用潜力。此外,还将讨论物联网面临的挑战,如数据安全和隐私保护等问题,并展望其在未来技术融合中的重要角色。 ... [详细]
  • 在Hive中合理配置Map和Reduce任务的数量对于优化不同场景下的性能至关重要。本文探讨了如何控制Hive任务中的Map数量,分析了当输入数据超过128MB时是否会自动拆分,以及Map数量是否越多越好的问题。通过实际案例和实验数据,本文提供了具体的配置建议,帮助用户在不同场景下实现最佳性能。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
author-avatar
qCANL
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有