(1)如何获取当前split的文件名:
答案:
InputSplit split=context.getInputSplit();
String filename=((FileSplit)split).getPath().toString();
(2)Task attempt failed to report status for xxx seconds Killing问题(常见是601)。
答案:task处理一行记录的时间限制默认是600s。控制超时的属性是:mapred.task.timeout,默认600000ms,即600s。可以设置成更大的值。解决方法:conf.set("mapred.task.timeout","秒数"),如果是0则为无穷大;或者在mapred.xml中增加
<property><name>mapred.task.timeout</name><value>秒数</value></property>
(3)如何控制reduce任务的启动时间?
答案:在mapred-site.xml中配置参数mapred.reduce.slowstart.complete.maps,若设置为1则reduce任务会等待所有map完成后再启动,默认值是0.05。
(4)如何控制TaskTracker上执行的map和reduce作业数量?
答案:在mapred-site.xml中配置参数mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum,默认值为2。
(5)为何重复执行相同的map任务?
答案:在分布式集群环境下,因为程序Bug、负载不平衡或资源分配不均匀等原因,会造成同一个作业的多个任务之间运行速度不一致,有些任务明显慢于其它任务从而拖慢作业的整体进度,为了避免这种情况,Hadoop采用了推测执行机制(Speculative execution),根据一定的法则推测出“拖后腿”的任务,并为这个任务启动一个备份任务,让该任务与原始任务同时处理同一份数据,并最终选择最先完成任务的计算结果未最终结果。可通过设置参数mapred.map.tasks.speculative.exection和mapred.reduce.tasks.speculative.execution来控制释放启动推测执行功能,默认为true。
(6)多用户共同使用hadoop?
答案:测试环境:在hdfs-site.xml把dfs.permissionss属性设置为false,默认为true。