0

我有一个EC2设置r3.8xlarge (32 cores, 244G RAM)

在我的Spark应用程序中,我从 DataBrick 读取两个 csv 文件S3Spark-CSV每个 csv 有大约 500 万行。我是unionAll两个 DataFrame 并dropDuplicates在组合的 DataFrame 上运行一个。

但是当我有的时候,

 val conf = new SparkConf()
            .setMaster("local[32]")
            .setAppName("Raw Ingestion On Apache Spark")
            .set("spark.sql.shuffle.partitions", "32")

火花比慢.setMaster("local")

32核不是更快吗?

4

1 回答 1

0

好吧,spark 不是 Windows 操作系统,它从一开始就会以最大可能的容量运行,您需要根据您的使用情况对其进行调整。

现在你只是直言不讳地说要在一个 32 核的节点上启动和处理我的东西。这不是 Spark 的优点。它是一个分布式系统,假设运行在多节点集群上,这是它工作得最好的地方。

原因很简单,即使你用的是 32 核,那 IO 问题呢?因为现在你正在使用 let's 如果它已经运行了 30 个执行器,而不是从同一个磁盘读取 32 个进程。

你指定了 32 核,那么执行器内存呢?两台机器是否有相同的内存,你正在测试。

您现在已明确指定需要 32 个分区,如果数据非常小,则开销很大。理想情况下,您不应该指定分区,直到您明确知道自己在做什么,或者您正在执行重复性任务,并且您知道数据将始终完全相同。

如果您正确调整它,使用 32 个核心的 spark 确实会比基本上在一个核心上运行的“本地”运行得更快。

于 2016-11-09T04:51:26.257 回答