我有一个Apache Spark独立安装程序。 我希望启动3个工人并行运行: 我使用下面的命令。
./start-master.sh
SPARK_WORKER_INSTANCES=3 SPARK_WORKER_CORES=2 ./start-slaves.sh
我尝试运行一些作业,以下是apache UI结果:
忽略最后三个失败的应用程序:以下是我的问题:
我想对输入的RDD进行分区,以获得更好的性能。因此,对于前两份无保留的工作,我的时间为2.7分钟。在这里,我的Scala源代码具有以下内容。
val tweets = sc.textFile("/Users/soft/Downloads/tweets").map(parseTweet).persist()
在第三份工作(4.3分钟)中,我经历了以下事情:
val tweets = sc.textFile("/Users/soft/Downloads/tweets",8).map(parseTweet).persist()
我希望使用更多的分区可以缩短时间(8)。为什么这与预期相反?
答案 0 :(得分:0)
显然,您只有一个活跃的工作人员,您需要通过检查火花记录来调查为什么未报告其他工作人员的原因。
更多分区并不总是意味着应用程序运行速度更快,您需要检查如何从源数据创建分区,已分区的数据量以及正在重新整理多少数据,等等。< / p>
答案 1 :(得分:0)
如果您在本地计算机上运行,则仅输出一个具有多个CPU的单一工作程序是很正常的。它仍然会为您分配计算机中可用CPU的任务。
根据可用资源的数量,将自动对文件进行分区,在大多数情况下,分区文件运行良好。 Spark(以及对文件进行分区)经常会带来一些开销,尤其是在一台机器上,Spark会增加很多开销,这会降低您的处理速度。附加值附带了计算机集群上的大量数据。
假设您正在启动独立集群,我建议使用配置文件来设置集群并使用start-all.sh
来启动集群。
spark/conf/slaves
(从spark/conf/slaves.template
复制)中添加您的工作程序节点的IP(或服务器名称)。spark/conf/spark-defaults.conf
(从spark/conf/spark-defaults.conf.template
复制),至少将主节点设置为运行主节点的服务器。spark-env.sh
(从spark-env.sh.template
复制)来配置每个工作线程的核心数,内存等:export SPARK_WORKER_CORES="2"
export SPARK_WORKER_MEMORY="6g"
export SPARK_DRIVER_MEMORY="4g"
export SPARK_REPL_MEM="4g"
如@skjagini所建议,请检出spark/logs/
中的各种日志文件以查看发生了什么。每个节点将写入自己的日志文件。
有关所有选项,请参见https://spark.apache.org/docs/latest/spark-standalone.html。
(我们有这样的设置运行了几年,效果很好!)