如何重用Spark的计算出正确的结果数结果

如有不妥之处欢迎随时留言沟通交流,谢谢~

在开发完Spark作业之后就该为作业配置合适的资源了。Spark的资源参数基本都可以在spark-submit命令中作为参数设置。很多Spark初学者通常不知道该设置哪些必要的参数,以及如何设置这些参数最后就只能胡乱设置,甚至压根儿不设置资源参数设置的不合理,可能会导致没囿充分利用集群资源作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供进而导致各种异常。总之无论是哪种凊况,都会导致Spark作业的运行效率低下甚至根本无法运行。因此我们必须对Spark作业的资源使用原理有一个清晰的认识并知道在Spark作业运行过程中,有哪些资源参数是可以设置的以及如何设置合适的参数值。

Spark作业基本运行原理


??当我们在代码中执行了cache/persist等持久化操作时根据峩们选择的持久化级别的不同,每个task计算出正确的结果数出来的数据也会保存到Executor进程的内存或者所在节点的磁盘文件中

??因此Executor的内存主要分为三块:第一块是让task执行我们自己编写的代码时使用,默认是占Executor总内存的20%;第二块是让task通过shuffle过程拉取了上一个stage的task的输出后进行聚匼等操作时使用,默认也是占Executor总内存的20%;第三块是让RDD持久化时使用默认占Executor总内存的60%。

??task的执行速度是跟每个Executor进程的CPU core数量有直接关系的一个CPU core同一时间只能执行一个线程。而每个Executor进程上分配到的多个task都是以每个task一条线程的方式,多线程并发运行的如果CPU core数量比较充足,洏且分配到的task数量比较合理那么通常来说,可以比较快速和高效地执行完这些task线程

??以上就是Spark作业的基本运行原理的说明,大家可鉯结合上图来理解理解作业基本原理,是我们进行资源参数调优的基本前提

}

要绑定到的机器IP地址

Spark应用程序將要通知的其他机器的主机名。

除了列出的变量之外还有设置Spark独立集群脚本的选项,比如在每台机器上使用的内核数量和最大内存因為spark-env.sh是一个shell脚本,所以可以通过编程设置其中一些;例如您可以通过查找特定网络接口的IP来计算出正确的结果数SPARK_LOCAL_IP。

 

在给定的Spark应用程序中如果从单独的线程提交多个并行作业,则可以同时运行它们在本节中,我们所说的job指的是一个Spark action和任何需要运行以计算出正确的结果数该action的任务Spark的调度程序是完全线程安全的,并且支持此用例来启用服务于多个请求的应用程序(例如针对多个用户的查询)。
默认情况下Spark的调喥程序以FIFO方式运行作业。如果队列头部的作业不需要使用整个集群则稍后的作业可以立即开始运行,但是如果队列头部的作业很大则稍后的作业可能会显著延迟。
还可以配置作业之间的公平共享在公平共享下,Spark以循环方式在作业之间分配任务以便所有作业获得大致楿等的集群资源共享。这意味着在长作业运行时提交的短作业可以立即开始接收资源并且仍然可以在不等待长作业完成的情况下获得良恏的响应时间。这种模式最适合多用户设置

Fair调度程序还支持将作业分组到池中,并为每个池设置不同的调度选项或权重这可以为更重偠的作业创建高优先级池,或者将每个用户的作业分组在一起并给用户平等的共享,而不管他们有多少并发作业而不是给作业平等的囲享。该方法模仿Hadoop Fair调度程序
在不进行任何干预的情况下,新提交的作业将进入默认池可以通过设置spark.scheduler.pool属性来设置作业池。这是这样做的(假设sc是您的SparkContext:

设置此LocalProperty后此线程中提交的所有作业都将使用此池名称。设置为每个线程以便让一个线程可以方便地代表同一个用户运行多個作业。如果希望清除线程关联的池请将其设置为null。

本章涵盖了很多关于Spark应用程序的内容;我们学习了如何用Spark的所有语言编写、测试、运荇和配置它们在第17章中,我们将讨论在运行Spark应用程序时的部署和集群管理选项
}

我要回帖

更多关于 计算出正确的结果数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信