跑spark程序的时候,公司服务器需要排队等资源,参考一些设置,之前不知道,跑的很慢,懂得设置之后简直直接起飞。

简单粗暴上设置代码:

 def conf(self):
conf = super(TbtestStatisBase, self).conf
conf.update({
'spark.shuffle.service.enabled': 'true',
'spark.dynamicAllocation.enabled': 'false',
'spark.dynamicAllocation.initialExecutors': ,
'spark.dynamicAllocation.minExecutors': ,
'spark.dynamicAllocation.maxExecutors': ,
'spark.sql.parquet.compression.codec': 'snappy',
'spark.yarn.executor.memoryOverhead': ,
"spark.speculation": 'true',
'spark.kryoserializer.buffer.max': '512m',
})

一小部分设置。简单解析一下:

1、spark.shuffle.service.enabled。用来设置是否开启动态分配。开启了动态分配的Application在申请资源的时候默认会拥有更高的优先级

2、spark.dynamicAllocation.initialExecutors (默认下是3)

   spark.dynamicAllocation.minExecutors (默认下是0)

spark.dynamicAllocation.maxExecutors (默认下是30)

Executor应该是所谓资源单位,自己理解为越多执行越快嘛,如果是Yarn的话,就是Containers,一个道理  

3、spark.yarn.executor.memoryOverhead 是设置堆外内存大小,和 executor_memory 做个对比:

  ExecutorMemory为JVM进程的JAVA堆区域

  MemoryOverhead是JVM进程中除Java堆以外占用的空间大小,包括方法区(永久代)、Java虚拟机栈、本地方法栈、JVM进程本身所用的内存、直接内存(Direct Memory)等。

  两者关系:如果用于存储RDD的空间不足,先存储的RDD的分区会被后存储的覆盖。当需要使用丢失分区的数据时,丢失的数据会被重新计算。ExecutorMemory + MemoryOverhead之和(JVM进程总内存)                

我只是简单理解堆外内存为一个备用区域吧,还不知道具体什么作用。有遇到内存不够报错的情况,然后调大了MemoryOverhead。

4、理论上:非动态分配情况下,我们必须要等到有100个Executor才能运行Application,并且这100个会一直被占用到程序结束,即便只有一个任务运行了很长时间。动态分配情况下,当有10个Executor的时候,我们的Application就开始运行了,并且我们后续可以继续申请资源,最多申请到100个Executor,当我们有空闲资源的时候,我们可以被释放资源到最少只保留10个Executor,当需要的时候我们有更高的优先级从YARN那儿拿到资源。

但是!

5、用了之后简直起飞。。公司服务器好像根本不存在动态这回事,总是只给几个executor,虽然开始是很快,但执行过程很慢,所以我放弃了,不动态调整了,直接设置死 num_executors = 90。。。然后:

发现一般资源还是挺富裕的嘛,写了90个 也不用等很久。为什么动态一直不肯分给我。。。好多资源,瞬间2个小时缩短为20分钟。

Spark的动态资源分配的更多相关文章

  1. 记一次有关spark动态资源分配和消息总线的爬坑经历

    问题: 线上的spark thriftserver运行一段时间以后,ui的executor页面上显示大量的active task,但是从job页面看,并没有任务在跑.此外,由于在yarn mode下, ...

  2. 利用动态资源分配优化Spark应用资源利用率

    背景 在某地市开展项目的时候,发现数据采集,数据探索,预处理,数据统计,训练预测都需要很多资源,现场资源不够用. 目前该项目的资源3台旧的服务器,每台的资源 内存为128G,cores 为24 (co ...

  3. spark提交至yarn的的动态资源分配

    1.为什么开启动态资源分配 ⽤户提交Spark应⽤到Yarn上时,可以通过spark-submit的num-executors参数显示地指定executor 个数,随后,ApplicationMast ...

  4. Spark动态资源分配-Dynamic Resource Allocation

    微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理.OLAP分析与可视化平台 | 赞助作者:赞助作者 Spark动态资源分配-Dynamic Resource Allocation S ...

  5. spark on yarn 动态资源分配报错的解决:org.apache.hadoop.yarn.exceptions.InvalidAuxServiceException: The auxService:spark_shuffle does not exist

    组件:cdh5.14.0 spark是自己编译的spark2.1.0-cdh5.14.0 第一步:确认spark-defaults.conf中添加了如下配置: spark.shuffle.servic ...

  6. Spark如何进行动态资源分配

    一.操作场景 对于Spark应用来说,资源是影响Spark应用执行效率的一个重要因素.当一个长期运行的服务,若分配给它多个Executor,可是却没有任何任务分配给它,而此时有其他的应用却资源紧张,这 ...

  7. 「Spark从精通到重新入门(二)」Spark中不可不知的动态资源分配

    前言 资源是影响 Spark 应用执行效率的一个重要因素.Spark 应用中真正执行 task 的组件是 Executor,可以通过spark.executor.instances 指定 Spark ...

  8. 【Spark】Spark Streaming 动态更新filter关注的内容

    Spark Streaming 动态更新filter关注的内容 spark streaming new thread on driver_百度搜索 (1 封私信)Spark Streaming 动态更 ...

  9. spark任务调度模式,动态资源分配

    官网链接: http://spark.apache.org/docs/latest/job-scheduling.html 主要介绍: 1 application级调度方式 2 单个applicati ...

随机推荐

  1. C++中如何访问全局变量和全局函数

    全局变量和全局函数是相对局部变量和局部函数而言的,不在{}或者for, if 等范围内的都是全局变量或者全局函数,最简单的是在同一个文件中去声明. 例如在mian.cpp中 #include < ...

  2. Beyond Compare 4提示已经过了30天试用期,破解方式,亲测可用

    修改注册表 1)在搜索栏中输入 regedit ,打开注册表 2) 删除项目:计算机\HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compar ...

  3. xcode 拷贝新的ios image 进去以后 出现 the divices is locked

    苹果公司时不时的给你更新下ios系统.对于开发者来说.更新xcode是灾难性的. 一直在用xcode7.3.1,可是最新不小心把手机升级到 ios 10.1.1,这下好了,真机调试不行了.提示没有镜像 ...

  4. Cocos2d-x 3.0游戏开发之虚拟机IOS环境:匹配才是好,莫要随便升级软件

    尊重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/34110449 做为一个买不起MAC的Coder,仅 ...

  5. Android Socket通信详解

    一.Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客 ...

  6. 将Excel中的数据批量导入数据库表

    private boolean import_to_database(String excel_path) throws BiffException, IOException, HsException ...

  7. 访问修饰符(C# 编程指南)

    所有类型和类型成员都具有可访问性级别,该级别可以控制是否可以从你的程序集或其他程序集中的其他代码中使用它们. 可以使用以下访问修饰符在进行声明时指定类型或成员的可访问性: public同一程序集中的任 ...

  8. 总是容易忘记:enum、int、string之间的快速转换

    public enum Color { Red=, Green= } (1)Enum转换为String Color.Read.ToString() Convert.ToString(Color.Gre ...

  9. godep使用

    安装: 1.mac:brew Install godep,全局可用 2.go get -u -v github.com/tools/godep  参数-u表示更新,-v可以看到进度信息.成功安装后,在 ...

  10. Iocomp控件教程之Analog Display—模拟显示控件(优于EDIT控件)

    Analog Display是简洁的显示控件.用于显示指定准确度和单位的模拟值(实数),能够将准确度设置为0.使显示结果为整数. 第一步:建立MFC对话框 第二步:插入AnalogDisplay控件 ...