多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在分布式集群环境下,因为程序Bug(包括hadoop本身的bug),负载不均衡或者资源分布不均等原因,会造成同一个作业的多个任务之间运行速度不一致,有些任务的运行速度可能明显慢于其他任务(比如一个作业的某个任务进度只有50%,而其他所有任务已经运行完毕),则这些任务会拖慢作业的整体执行进度. 为了避免这种情况发生,hadoop采用了推测执行机制,他根据一定的法则推测出"拖后腿"的任务,并为这样的任务启动一个备份任务,让该任务与原始任务同时处理同一份数据,并最终选用最先成功运行完成任务的计算结果作为最终结果 设置开启推测执行参数:hadoop的mapred-site.xml文件中设置 ~~~ <property> <name>mapreduce.map.speculative</name> <value>true</value> <description>if true then multiple instances of some man tasks may be executed in parallel</description> </property> ~~~ 不过hive本身也提供了配置项来控制reduce-side的推测执行 如果想开的话,hive下面这个配置也要开 ~~~ <property> <name>hive.mapred.reduce.tasks.speculative.execution</name> <value>true</value> <description>whether speculative execution for reducers should be turned on</descriptiom> </property> ~~~ 关于调优这些推测执行变量,还很难给一个具体的建议.如果用户对于运行时的偏差非常敏感的话,那么可以将这些功能关闭掉. 如果用户因为输入数据量很大而需要执行长时间的map或者reduce task的话,那么启动推测执行造成的浪费是非常大的