标签:-- driver --- 全在 集群 executer 提交 spark 运行
最近开发了一个超级简单的spark程序,也就rdd运行map再运行foreach,并提交到集群(standalone模式)运行。
不知道是不是我是刚入门的小白资历尚浅的问题,
但是。。但是。。。但是。。。。
它为什么只运行在driver上?
提交参数:
spark-submit --master spark://hadoop1:7077 --num-executors 4 --driver-memory 3G --executor-memory 3G --executocores 4 --deploy-mode cluster /usr/local/software/spark-2.4.2/task/testWorker.jar test
没有任何问题,但是为什么没有它没有executer呢?
经过艰难(并没有多艰难)的调试发现,问题就是出现在这段代码上:
val conf = new SparkConf().setAppName("testWorker").setMaster("local[*]")
conf.set..........//此处省略一大段配置
val builder: SparkSession.Builder = SparkSession.builder().config(conf).enableHiveSupport()
val session: SparkSession = builder.getOrCreate()
众所周知,.setMaster(“local[*]”)是用于设置本地模式运行时所需的cpu核数,在on yarn模式下,会被–master spark://hadoop1:7077参数代替(百度说的,不确定),请看链接:https://www.it1352.com/1935856.html
所以我也天真地以为在spark-submit 只要添加参数–master spark://hadoop1:7077,它就会覆盖setMaster的东西,并以集群模式运行了;
但是事实是,在standalone模式下,如果把这个代码提交到集群上运行时,它就变成了在driver端的本地运行,所以提交到集群后永远是只有一个diriver端在运行,也就是单线程运行,白白浪费集群的资源了;
有日志为证:
成功启动了worker:
成功地在driver端启动了本地模式:
当然,解决方法就是在打包提交到集群上运行的时候,把.setMaster(“local[*]”)删掉即可;
再看一下提交集群运行情况
它有了他的Executors了,而且还是4个!!!!
关于executer数量的设置,在standalone模式下,是不支持通过–num-executors设置executer数量,on yarn模式就可以,然后standalone模式的executer数量是spark.cores.max/spark.executor.cores,所以只要在代码设置spark.cores.max的数量
conf.set("spark.cores.max","8")
和在提交参数设置:
--executor-cores 2
就可以设定executer数量;
详情请参考:
https://blog.csdn.net/CPP_MAYIBO/article/details/89162372
标签:--,driver,---,全在,集群,executer,提交,spark,运行 来源: https://blog.csdn.net/suly_liping/article/details/113766120
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。