当reduce()上有2x4CPU时,Spark仅使用1CPU

时间:2016-06-03 08:50:22

标签: apache-spark pyspark apache-spark-1.6

我有3台机器:1x Master,4x CPU,8G RAM; 2x执行器,带4x CPU和16G RAM。

主人是独立模式(没有YARN),我正在使用pyspark。

即使它不是一个庞大的基础设施,我仍然期待它的一些表现。 运行reduce操作时:

tfsent = tfsent.reduce(lambda x,y: Row(tf=spvecadd(x.tf, y.tf), sentiment=spvecadd(x.sentiment, y.sentiment)))

其中tfsent的{​​{1}}和tfsentiment,而SparseVector是自制函数,可添加spvecadd

这样做,在3x 4CPU上,执行程序中只有一个运行100%。其他是0%,内存大约是5G / 16G。 我没有得到: *为什么这么久 *为什么只有1x CPU工作。

我应该自己分区数据吗? (我的意思是明确地将数据分发给两个执行者?即使我认为这是Spark的工作)。

感谢您提供任何帮助,想法或提示 pltrdy

其他信息

  • 两个执行程序都连接到主服务器并“分配”到任务(可以使用spark web UI进行检查)

  • 我有大约380k线。 Vector维度均小于100。 (这不是很多)。

  • 复杂性可能更多地取决于维度而不是行数。

更新

事实证明,我必须使用SparseVector来分发RDD。这解决了我的问题,但不完全是我的问题:为什么我必须这样做?

我想这是因为我获取数据的方式。我正在读数据库,即

repartition(8)

其中,我猜不会分发它。

0 个答案:

没有答案