我要对50万至200万行之间的CSV数据源文件进行大量相当复杂的转换。我通过UI和htop看到spark仅使用1个CPU,并且在构建DAG时以100%运行。一旦击中动作,所有48个内核的使用率就会达到100%(按预期)。
我遇到的问题是DAG创建需要10分钟的时间,而其他47个内核处于空闲状态。这在本地模式(master = local [*])和AWS EMR(master = yarn,客户端模式)中均会发生。这是我的本地命令:
spark-submit --driver-memory=60g --driver-class-path <jar> --class <class name> --conf spark.shuffle.partitions=48 --exclude-packages <exc. packages> --packages <packages>
这是我的spark-defaults.conf
spark.sql.autoBroadcastJoinThreshold -1
spark.driver.extraJavaOptions -XX:+UseG1GC
spark.executor.extraJavaOptions -XX:+UseG1GC
如何使DAG创作利用多个核心?
在一个阶段中,我确实遇到了bug SPARK-13346,该bug导致由于大量血统而导致DAG堆积问题。我正在做大量检查点(并坚持执行)以删除沿袭-而且我的性能仍然很慢。