1、充分利用集群资源:在配置MapReduce作业时,确保所有节点都处于繁忙状态,以最大化资源利用率和任务并发度,通过调整处理的数据量大小以及map和reduce任务的数量来实现这一点。
2、控制Reduce阶段在一轮中完成:避免大部分reduce任务在第一轮完成后,只剩一个或少数几个reduce任务继续运行,因为这会极大影响整个作业的运行时间,同样,如果所有map任务完成后,只有个别节点上有reduce任务在运行,这意味着集群资源没有得到充分利用,应增加reduce任务的数量。
3、每个Task的执行时间要合理:如果一个作业中,每个map或reduce任务的执行时间只有几秒钟,那么这个作业的大部分时间都会消耗在任务调度和进程启停上,建议增加每个task处理的数据量,使单个task的处理时间达到一分钟,这可以通过调整数据分片的大小来实现,具体参数包括mapreduce.input.fileinputformat.split.maxsize和mapreduce.input.fileinputformat.split.minsize。
4、基本配置参数:定义MapReduce作业的名称(mapreduce.job.name),指定JobTracker的地址和端口(mapreduce.jobtracker.address),以及定义MapReduce作业运行的框架(mapreduce.framework.name)。
5、Map阶段配置参数:包括指定Map任务的内存大小(mapreduce.map.memory.mb),每个Map任务使用的虚拟核心数(mapreduce.map.cpuvcores),是否压缩Map任务的输出数据(mapreduce.map.output.compress),以及指定Map任务输出数据压缩的编码器(mapreduce.map.output.compress.codec)。
6、Reduce阶段配置参数:包括指定Reduce任务的内存大小(mapreduce.reduce.memory.mb),每个Reduce任务使用的虚拟核心数(mapreduce.reduce.cpuvcores),指定Reduce任务并行复制Map输出数据的数量(mapreduce.reduce.shuffle.parallelcopies),指定Map输出数据在Shuffle过程中进行合并的阈值(mapreduce.reduce.shuffle.merge.percent),以及定义在Reduce任务开始之前需要完成的Map任务比例(mapreduce.reduce.slowstart.completedmaps)。
7、通用配置参数:包括控制Reduce任务启动时,Map任务的完成比例(mapreduce.job.reduce.slowstart.completedmaps)。
8、高级配置参数:包括指定每个Map/Reduce任务允许使用的最大虚拟内存大小(mapred.task.maxvmem),指定包含MapReduce作业的JAR文件(mapreduce.job.jar),指定集群中节点级别的临时文件存储目录(mapreduce.cluster.local.dir),指定作业的拥有者(mapreduce.job.user.name),指定是否保留失败任务的临时文件(mapreduce.task.files.preserve.failedtasks),以及指示是否需要进行提交器的设置和清理操作(mapreduce.job.committer.setup.cleanup.needed)。
以下是两个关于MapReduce Job基线配置的常见问题:
1、问题一:如何确定MapReduce作业的基线?
答案:确定MapReduce作业的基线是调优的基础,一切调优项效果的检查,都是通过和基线数据做对比来获得,基线的确定有如下三个原则:充分利用集群资源、Reduce阶段尽量放在一轮、每个Task的执行时间要合理。
2、问题二:如何调整MapReduce作业的并发度?
答案:可以通过调整处理的数据量大小,以及调整map和reduce任务的数量来调整MapReduce作业的并发度,可以通过设置mapreduce.job.reduces参数来控制reduce任务的数量,而map任务的数量则取决于使用了哪种InputFormat,以及待处理的数据文件是否可分割。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1109031.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复