运行时选项
编辑运行时选项
编辑使用 elasticsearch-hadoop 时,务必注意以下 Hadoop 配置,这些配置会影响 Map/Reduce 任务的执行方式,进而影响 elasticsearch-hadoop。
不幸的是,这些设置需要在作业/脚本配置之前手动设置。由于 elasticsearch-hadoop 的调用时机太晚,在任务已分派之后,因此无法再影响执行。
推测性执行
编辑
当作业中的大多数任务即将完成时,推测性执行 会跨多个没有其他工作的节点调度剩余任务的冗余副本。因此,可以并行多次处理相同的输入,以利用机器性能的差异。 |
||
-- 雅虎!开发者网络 |
换句话说,推测性执行是一种优化,默认情况下启用,它允许 Hadoop 创建那些它认为挂起或速度变慢的任务的重复任务。在进行数据处理或读取资源时,拥有重复的任务无害,最多意味着浪费计算资源;但是,当向外部存储写入数据时,这可能会导致由于重复或不必要的更新而导致数据损坏。由于推测性执行行为可能由外部因素(例如网络或 CPU 负载,进而导致误报)触发,即使在稳定的环境中(虚拟化集群尤其容易出现这种情况),并且对数据有直接影响,因此 elasticsearch-hadoop 禁用了此优化以确保数据安全。
请检查您的库设置并禁用此功能。如果您遇到比预期更多的数据,请仔细检查此设置。
禁用 Map/Reduce 推测性执行
编辑可以为 map 和 reduce 阶段禁用推测性执行——我们建议在这两种情况下都禁用——通过将以下两个属性设置为false
mapred.map.tasks.speculative.execution
mapred.reduce.tasks.speculative.execution
可以在Configuration
/JobConf
客户端上手动按名称设置属性
jobConf.setSpeculativeExecution(false); // or configuration.setBoolean("mapred.map.tasks.speculative.execution", false); configuration.setBoolean("mapred.reduce.tasks.speculative.execution", false);
或者将其作为参数传递给命令行
$ bin/hadoop jar -Dmapred.map.tasks.speculative.execution=false \ -Dmapred.reduce.tasks.speculative.execution=false <jar>
Hive 推测性执行
编辑Apache Hive 通过hive.mapred.reduce.tasks.speculative.execution
设置拥有自己的推测性执行设置。它默认启用,因此请在您的脚本中将其更改为false
set hive.mapred.reduce.tasks.speculative.execution=false;
请注意,虽然此设置已在 Hive 0.10 中弃用,并且您可能会收到警告,但请仔细检查推测性执行是否确实已禁用。
Spark 推测性执行
编辑Spark 默认情况下禁用了推测性执行。通过spark.speculation
设置(false
表示禁用,true
表示启用)仔细检查是否如此。