87-Spark推测执行spark.speculation

204 篇文章 480 订阅 ¥49.90 ¥99.00
本文介绍了Spark的推测执行机制,旨在优化慢速任务,提高作业计算速度。当某个Task运行显著慢于其他Task时,Spark会在其他Executor上启动相同Task的推测实例。若推测任务成功,则采用其结果并终止其他实例。然而,推测执行需谨慎使用,可能造成资源过度占用。源代码分析揭示了推测执行的检测和调度逻辑。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1. 背景

hadoop的推测执行
  推测执行(Speculative Execution)是指在分布式集群环境下,因为程序BUG,负载不均衡或者资源分布不均等原因,造成同一个job的多个task运行速度不一致,有的task运行速度明显慢于其他task(比如:一个job的某个task进度只有10%,而其他所有task已经运行完毕),则这些task拖慢了作业的整体执行进度,为了避免这种情况发生,Hadoop会为该task启动备份任务让该speculative task与原始task同时处理一份数据,哪个先运行完,则将谁的结果作为最终结果
  推测执行优化机制采用了典型的以空间换时间的优化策略,它同时启动多个相同task(备份任务)处理相同的数据块哪个完成的早,则采用哪个task的结果,这样可防止拖后腿Task任务出现,进而提高作业计算速度&#x

如何将数据从限制 Spark 向 HDFS 写出并生成 success 文件? 可以使用以下命令: ``` spark-submit your_script.py \ --master yarn \ --deploy-mode client \ --conf spark.yarn.submit.waitAppCompletion=false \ --conf spark.hadoop.fs.defaultFS=hdfs://your-hdfs-name-node:8020 \ --conf spark.hadoop.fs.permissions.umask-mode=022 \ --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 \ --conf spark.speculation=false \ --name your-app-name \ --num-executors num_of_executors \ --executor-memory executor_memory \ --executor-cores num_of_cores_per_executor \ --conf spark.executor.heartbeatInterval=300s \ --conf spark.network.timeout=600s \ --conf spark.yarn.maxAppAttempts=1 \ --conf spark.dynamicAllocation.enabled=false \ --conf spark.shuffle.service.enabled=false \ --conf spark.sql.shuffle.partitions=1000 \ --py-files python_packages.zip \ --archives python_venv.zip \ --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./python_venv.zip/python_venv/bin/python \ --conf spark.executorEnv.PYTHON_EGG_CACHE=./ \ --conf spark.pyspark.driver.python=./python_venv.zip/python_venv/bin/python \ --conf spark.pyspark.python=./python_venv.zip/python_venv/bin/python \ --conf spark.driver.maxResultSize=4g \ --conf spark.driver.memory=4g \ --conf spark.executor.memoryOverhead=4g \ --conf spark.driver.cores=2 \ --conf spark.default.parallelism=1000 \ --conf spark.sql.files.maxPartitionBytes=134217728 \ --conf spark.hadoop.validateOutputSpecs=false \ --conf spark.hadoop.mapreduce.output.fileoutputformat.suppressoutput=true \ --conf spark.hadoop.mapreduce.output.fileoutputformat.outputdir=hdfs://your-hdfs-name-node:8020/your-output-path \ --conf spark.hadoop.mapreduce.job.outputformat.class=org.apache.hadoop.mapreduce.lib.output.TextOutputFormat \ --conf spark.hadoop.mapreduce.outputcommitter.factory.scheme=hdfs \ --conf spark.hadoop.mapreduce.lazyOutput.format=true \ && hdfs dfs -touchz hdfs://your-hdfs-name-node:8020/your-output-path/success.txt ``` 说明: - `your_script.py`: 你想要提交的 Python 脚本。 - `your-app-name`: Spark 应用程序的名称。 - `num_of_executors`: Spark 应用程序使用的执行者数。 - `executor_memory`: 每个执行者可用的内存量。 - `python_packages.zip`: 如果程序依赖其他 Python 包,该文件应该包含这些包。更多信息,请参阅 PySpark 文档。 - `python_venv.zip`: 如果程序使用虚拟环境,该文件应该包含虚拟环境。更多信息,请参阅 PySpark 文档。 - `your-hdfs-name-node`: 你的 HDFS 名称节点。 - `your-output-path`: 写出文件的路径。 以上命令将指定的脚本使用 Spark 在 YARN 上运行,并将输出写入 HDFS 指定的路径。成功运行后,命令会在指定路径生成 success.txt 文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值