apache-spark - Spark:整个数据集中在一个执行器中

标签 apache-spark hadoop

enter image description here

我正在运行一个Spark作业,每个文件有3个100MB大小的文件,由于某种原因,我的Spark UI会将所有数据集集中到2个执行器中,这使该作业运行了19个小时并且仍在运行。
下面是我的 Spark 配置。 spark 2.3是使用的版本。

spark2-submit --class org.mySparkDriver \
    --master yarn-cluster \
    --deploy-mode cluster \
    --driver-memory 8g \
    --num-executors 100 \
    --conf spark.default.parallelism=40 \
    --conf spark.yarn.executor.memoryOverhead=6000mb \
    --conf spark.dynamicAllocation.executorIdleTimeout=6000s \
    --conf spark.executor.cores=3 \
    --conf spark.executor.memory=8G \

我尝试在有效的代码内重新分区,因为这使文件进入20个分区(我使用rdd.repartition(20))。但是我为什么要重新分区,我相信在脚本中指定spark.default.parallelism = 40应该可以让spark将输入文件划分为40个执行器,并在40个执行器中处理该文件。

谁能帮忙。

谢谢,
内图

最佳答案

如果是的话,我假设您正在YARN中运行作业,则可以检查以下属性。

yarn.scheduler.maximum-allocation-mb
yarn.nodemanager.resource.memory-mb
yarn.scheduler.maximum-allocation-vcores
yarn.nodemanager.resource.cpu-vcores


在YARN中,这些属性会影响可基于spark.executor.cores, spark.executor.memory属性值在NodeManager中实例化的容器数(以及执行程序的内存开销)。

例如,如果一个群集具有10个节点(RAM:16 GB,核心:6),并设置了以下 yarn 属性
yarn.scheduler.maximum-allocation-mb=10GB 
yarn.nodemanager.resource.memory-mb=10GB
yarn.scheduler.maximum-allocation-vcores=4
yarn.nodemanager.resource.cpu-vcores=4

然后使用spark属性spark.executor.cores=2, spark.executor.memory=4GB,您可以期望得到2 Executors / Node,因此总计您将获得19个执行程序+ 1个驱动程序容器

如果spark属性为spark.executor.cores=3, spark.executor.memory=8GB,则您将获得9个执行程序(仅1个执行程序/节点)+1个驱动程序容器

您可以引用link了解更多详细信息

希望这可以帮助

关于apache-spark - Spark:整个数据集中在一个执行器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58512262/

相关文章:

apache-spark - 通过保留顺序,根据 id 列将 Spark DataFrame 拆分为两个 DataFrame(70% 和 30%)

apache-spark - Spark 中的 DataFrame orderBy 后跟 limit

hadoop - 将所有映射器中遇到的最大键作为参数传递给下一个作业

mysql - 为什么在从 hive 导出到 mysql 期间,sqoop 在数字列的 NumberFormatException 上失败

regex - 使用 REGEX 在 Hive Create 和 Load Query 中获取空值

apache-spark - 由于 DeadlineExceededException,Spark 作业无法写入 Alluxio

apache-spark - Spark SQL - 处理列名中的双引号

java - Spark jdbc 重用连接

ssh - 如何通过 java 的 hdfs 协议(protocol)访问 hadoop?

hadoop - 如何收集 mapreduce 作业的输出?