分享

spark集群Java生成libsvm模型的效率问题

lihy114 发表于 2016-6-8 09:00:52 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 8570
本帖最后由 lihy114 于 2016-6-8 10:16 编辑

我的集群环境是3个节点的集群,跑过了Java代码的libsvm模型的生成,对12万条文本数据分词,建立svm模型
在效率上还存在问题,相同的数据和非spark环境的单机运行效率时间差不多,想问下大家一般是从哪些方面进行spark优化的,新手,感觉无从下手,多谢

继续测试
在程序运行的时候,我查看了三个节点的内存运行情况
master节点在内存变化比较明显,程序运行刚结束,内存就释放了700m;但是另外两个从节点,内存没有变化,我怀疑集群在进行数据计算时,只使用了一个节点。

已有(1)人评论

跳转到指定楼层
qcbb001 发表于 2016-6-8 11:20:56
楼主可以提高spark并行度,这样内存可以最大限度的利用
~~~~~~~~~~~~~~~~~~~~~~~~~
详细:

在Spark集群环境下,只有足够高的并行度才能使系统资源得到充分的利用,可以通过修改spark-env.sh来调整Executor的数量和使用资源,Standalone和YARN方式资源的调度管理是不同的。

在Standalone模式下:

1. 每个节点使用的最大内存数:SPARK_WORKER_INSTANCES*SPARK_WORKER_MEMORY;

2. 每个节点的最大并发task数:SPARK_WORKER_INSTANCES*SPARK_WORKER_CORES。

在YARN模式下:

1. 集群task并行度:SPARK_ EXECUTOR_INSTANCES* SPARK_EXECUTOR_CORES;

2. 集群内存总量:(executor个数) * (SPARK_EXECUTOR_MEMORY+ spark.yarn.executor.memoryOverhead)+(SPARK_DRIVER_MEMORY+spark.yarn.driver.memoryOverhead)。

重点强调:Spark对Executor和Driver额外添加堆内存大小,Executor端:由spark.yarn.executor.memoryOverhead设置,默认值executorMemory * 0.07与384的最大值。Driver端:由spark.yarn.driver.memoryOverhead设置,默认值driverMemory * 0.07与384的最大值。

通过调整上述参数,可以提高集群并行度,让系统同时执行的任务更多,那么对于相同的任务,并行度高了,可以减少轮询次数。举例说明:如果一个stage有100task,并行度为50,那么执行完这次任务,需要轮询两次才能完成,如果并行度为100,那么一次就可以了。

但是在资源相同的情况,并行度高了,相应的Executor内存就会减少,所以需要根据实际实况协调内存和core。此外,Spark能够非常有效的支持短时间任务(例如:200ms),因为会对所有的任务复用JVM,这样能减小任务启动的消耗,Standalone模式下,core可以允许1-2倍于物理core的数量进行超配。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条