Spark Streaming yarn动态资源分配

spark | 2020-03-06 16:25:47

对于需要实时展示的时候,我们采用的还是提前把报表刷新,然后就可以随时查看,我依然觉得spark Streaming不可能对于超过十亿的数据而且具有复杂算法程序能达到秒级返回,所以我还是对数据抽样了几十万,再用Spark Streaming做实时计算,这也很有用,至少能实现秒级看到你的报表将是什么样子,就是提供一个预览。

那么问题来了,我依然要提供较多的资源给这个能进行抽样秒级运算的Streaming,就是为了数据量小而固定的情况下无论什么运算都尽量的快,然而我其他的运算,大数据量的计算就无法使用所有的集群资源了,造成资源浪费,所以我就要研究下,Spark Streaming 动态资源分配,其实我之前研究过spark on yarn资源分配性能调优(静态和动态)

另外经过测试对于几十万数据,用十核,30核,60核区别还是有的,但不是很大,稍稍复杂一点的运算都有几秒的区别了


下面回归正题,进行Spark Streaming 动态资源分配

其实和上面那帖子提到的spark 动态资源分配是一样的 只不过你要注意配置,executor 删除添加的时间跨度,也就是频率,来匹配你的场景。


1.spark应用程序端配置


spark.dynamicAllocation.enabled               true    #启用资源动态分配
spark.shuffle.service.enabled                 true    #激活保护shuffle写文件使得executor可以被安全的移除

spark.executor.cores              10    #每个executor的核数
spark.dynamicAllocation.minExecutors        1    #最少要保持启动的executor数量
spark.dynamicAllocation.maxExecutors        8    #最大要启动的executor数量
spark.dynamicAllocation.initialExecutors    5    #初始化启动的executor数量

spark.dynamicAllocation.executorIdleTimeout  100s    #executor空闲后移除的时间间隔
spark.dynamicAllocation.cachedExecutorIdleTimeout 200s    #持有rdd数据的空闲exexutor移除时间间隔

当然你可以配置在命令行,也可以配置在程序中。

注意:一定不要配置这个spark.executor.instances,要不然不起作用


2.yarn 集群服务端配置

2.1所有节点yarn-site.xml都要配置auxService

 <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle,spark_shuffle</value>
  </property>
  <property>
     <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
     <value>org.apache.spark.network.yarn.YarnShuffleService</value>
  </property>
  <property>
     <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
     <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>


2.2然后所有节点都要把spark-2.3.0-yarn-shuffle.jar从spark复制到hadoop

cp /opt/hadoop/spark-2.3.0-bin-hadoop2.7/yarn/spark-2.3.0-yarn-shuffle.jar /opt/hadoop/hadoop-2.7.7/share/hadoop/yarn


所有节点都要配置



参考:

https://blog.csdn.net/kimsungho/article/details/52593946

https://www.jianshu.com/p/826991ba9375

登录后即可回复 登录 | 注册
    
关注编程学问公众号