SPARK:一台功能强大的机器。几台较小的机器

时间:2016-05-03 19:30:50

标签: apache-spark amazon-ec2 spark-dataframe

我正在使用一台具有60GB内存和32个内核的单机,在AWS EC2上使用Spark 1.6.1。

我的数据包含大量记录,我想处理一个具有以下简单模式的DataFrame,它有1,000,000,000(十亿)条记录:

userID: Long
phrase: String
timestamp: Timestamp

我正在做一些昂贵的操作链,比如groupBy,sort,filter等等。

这些操作导致大量的shuffle写入和读取,缓存DataFrames或重新分区它没有多大帮助。

我发现很难理解为什么会这样,知道机器能够将完整的数据加载到内存中。

当我点击Spark UI上的执行器选项卡时,我看到以下内容:

enter image description here

这是一个普通的视图,看我何时使用一台功能强大的机器,或者我错过了配置我的Spark群集?

有关于EC2上Spark最佳配置的建议吗?

由于

1 个答案:

答案 0 :(得分:3)

我很抱歉,如果它听起来居高临下,但适合内存的数据加载几乎不是一个庞大的数据集。我之所以这么说,原因是Spark并不是为小型数据加载而构建的,而是您需要支付内置于spark中的开销,以使其能够处理大型数据集和分布式环境。例如一组通常意味着数据需要运送到远程机器,因此随机播放阶段组织数据以便装运,然后由在洗牌后处理分区的远程机器读取。在您的情况下,您可以在一台机器上看到所有这些。

由于一切都适合一台机器,您可能需要检查替代解决方案 - 例如阅读this

也就是说,您似乎没有充分利用机器上的所有内存(内存存储量为20G而机器上为60G)。由于您似乎在本地模式下运行Spark,因此将驱动程序内存设置为更高(--driver-memory 56G或类似的东西)也确保使用local[32],这样您就可以运行所有内核