executor

How to create a service with multiple threads which all use the same Hibernate session?

我只是一个虾纸丫 提交于 2019-12-06 06:11:51
My goal is to parse a large XML file and persist objects to DB based on the XML data, and to do it quickly. The operation needs to be transactional so I can rollback in case there is a problem parsing the XML or an object that gets created cannot be validated. I am using the Grails Executor plugin to thread the operation. The problem is that each thread I create within the service has its own transaction and session. If I create 4 threads and 1 fails the session for the 3 that didn't fail may have already flushed, or they may flush in the future. I was thinking if I could tell each thread to

【搞定面试官】谈谈你对JDK中Executor的理解?

核能气质少年 提交于 2019-12-06 05:45:24
前言 随着当今处理器计算能力愈发强大,可用的核心数量越来越多,各个应用对其实现更高吞吐量的需求的不断增长,多线程 API 变得非常流行。在此背景下,Java自JDK1.5 提供了自己的多线程框架,称为 Executor 框架 . 1. Executor 框架是什么? 1.1 简介 Java Doc中是这么描述的 An object that executes submitted Runnable tasks. This interface provides a way of decoupling task submission from the mechanics of how each task will be run, including details of thread use, scheduling, etc. An Executor is normally used instead of explicitly creating threads. 执行提交的Runnable任务的对象。这个接口提供了一种将任务提交与如何运行每个任务的机制,包括线程的详细信息使用、调度等。通常使用Executor而不是显式地创建线程。 我们可以这么理解:Executor就是一个线程池框架, 在开发中如果需要创建线程可优先考虑使用Executor,无论你需要多线程还是单线程

Spark性能优化

[亡魂溺海] 提交于 2019-12-06 03:09:44
Spark性能优化 1)避免创建重复RDD 2)尽可能复用同一个RDD 3)对多次使用的RDD进行持久化 4)尽量避免使用shuffle类算子 5)使用map-side预聚合的shuffle操作 6)使用高性能的算子 7)广播大变量 8)使用Kryo优化序列化性能 9)优化数据结构 10)资源参数调优 1)避免创建重复RDD ​ 对于同一份数据,只应该创建一个RDD,不能创建多个RDD来代表同一份数据。 2)尽可能复用同一个RDD ​ 除了要避免在开发过程中对一份完全相同的数据创建多个RDD之外,在对不同的数据执行算子 操作时还要尽可能地复用一个RDD。比如说,有一个RDD的数据格式是key-value类型的,另 一个是单value类型的,这两个RDD的value数据是完全一样的。那么此时我们可以只使用key-value类型的那个RDD,因为其中已经包含了另一个的数据。对于类似这种多个RDD的数据有重叠或者包含的情况,我们应该尽量复用一个RDD,这样可以尽可能地减少RDD的数量,从而尽可能减少算子执行的次数。 3)对多次使用的RDD进行持久化 Spark中对于一个RDD执行多次算子的默认原理是这样的:每次你对一个RDD执行一个算子操作时,都会重新从源头处计算一遍,计算出那个RDD来,然后再对这个RDD执行你的算子操作。因此对于这种情况,建议是:对多次使用的RDD进行持久化

spark调优——JVM调优

时光毁灭记忆、已成空白 提交于 2019-12-06 03:04:25
对于JVM调优,首先应该明确,(major)full gc/minor gc,都会导致JVM的工作线程停止工作,即stop the world。 JVM调优一:降低cache操作的内存占比 1. 静态内存管理机制 根据Spark静态内存管理机制,堆内存被划分为了两块,Storage和Execution。Storage主要用于缓存RDD数据和broadcast数据,Execution主要用于缓存在shuffle过程中产生的中间数据,Storage占系统内存的60%,Execution占系统内存的20%,并且两者完全独立。 在一般情况下,Storage的内存都提供给了cache操作,但是如果在某些情况下cache操作内存不是很紧张,而task的算子中创建的对象很多,Execution内存又相对较小,这回导致频繁的minor gc,甚至于频繁的full gc,进而导致Spark频繁的停止工作,性能影响会很大。 在Spark UI中可以查看每个stage的运行情况,包括每个task的运行时间、gc时间等等,如果发现gc太频繁,时间太长,就可以考虑调节Storage的内存占比,让task执行算子函数式,有更多的内存可以使用。 Storage内存区域可以通过spark.storage.memoryFraction参数进行指定,默认为0.6,即60%,可以逐级向下递减,如代码清单2-6所示:

Spark常规性能调优

妖精的绣舞 提交于 2019-12-06 03:00:56
1.1.1 常规性能调优一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性能调优策略。 资源的分配在使用脚本提交Spark任务时进行指定,标准的Spark任务提交脚本如代码清单2-1所示:、 /usr/opt/modules/spark/bin/spark-submit \ --class com.atguigu.spark.Analysis \ --num-executors 80 \ --driver-memory 6g \ --executor-memory 6g \ --executor-cores 3 \ /usr/opt/modules/spark/jar/spark.jar \ 可以进行分配的资源如表2-1所示: 表2-1 可分配资源表 名称 说明 --num-executors 配置Executor的数量 --driver-memory 配置Driver内存(影响不大) --executor-memory 配置每个Executor的内存大小 --executor-cores 配置每个Executor的CPU core数量 调节原则:尽量将任务分配的资源调节到可以使用的资源的最大限度。 对于具体资源的分配

SparkStreaming 性能、稳定、容错与语义

你。 提交于 2019-12-06 02:58:22
怎样提高Spark Streaming的性能 1、创建多个接收器         待定:: 2、调节每一个batch interval的数据块的数量,其实就是调整上面第二个问题中提到的配置spark.streaming.blockInterva         待定:: 3、调整Recevier每秒接收数据的速率         待定:: 4、通过repartition这个API来增加并行度         待定:: 5、使用Kryo序列化机制         待定:: 6、使用CMS垃圾收集器         待定:: Spark Streaming的稳定性: BackPressure         待定:: Elastic Scaling         待定:: Spark Streaming是怎样容错的 1、Executor失败容错:Executor的失败会重新启动一个新的Executor,这个是Spark自身的特性。如果Receiver所在的Executor失败了,那么Spark Streaming会在另外一个Executor上启动这个Receiver(这个Executor上可能存在已经接收到的数据的备份) 2、Driver失败的容错:如果Driver失败的话,那么整个Spark Streaming应用将会全部挂掉。所以Driver端的容错是非常重要的

spark延迟调度与动态资源管理

a 夏天 提交于 2019-12-06 02:50:24
Spark中的延迟调度 Spark的Task的调度过程有五个本地性级别:PROCESS_NODE、NODE_LOCAL、NO_PREF、RACK_LOCAL、ANY。在理想的状态下,我们肯定是想所有的Task的调度都是PROCESS_NODE级别的,这样的话所有的Task都是在数据所在的机器上进行计算,这样的计算效率是最好的。但是实际的情况并不是这样的,因为Spark在Task的调度过程会发生如下两种情况: 1、数据所在的机器上的Executor没有空闲的cpu资源 2、含有空闲cpu资源的Executor所在的机器上并没有数据 出现以上两种情况的时候,我们可能就需要舍弃掉最好的数据本地性了,这就是延迟调度需要做的事情,对于第一种情况,延迟调度让Task等一定的时间(默认是配置spark.locality.wait=3s),以期望数据所在机器上的Executor上的cpu释放,然后再调度到这个Executor上,那如果这个Executor的cpu一直没有释放(即Task等的时间超过一定的时间了)呢,这个时候Spark就直接将这个Task调度到含有空闲cpu资源但是没有数据的Executor,这个时候虽然Task的本地性级别不高,但是可能比你等待含有数据的Executor释放空闲cpu来的更高效 Spark中的动态资源管理 根据集群计算需要的资源动态的决定Executor的个数

05 - Tomcat 线程池的配置与优化

隐身守侯 提交于 2019-12-06 01:59:03
添加 Executor 在server.xml中的Service节点里面,增加executor节点,然后配置connector的executor属性,如下: <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="3000" minSpareThreads="5" maxSpareThreads="20" acceptCount="20" /> 参数说明: namePrefix:线程池中线程的命名前缀。 maxThreads:Tomcat 可用于处理请求的最大线程数,默认是200。 minSpareThreads:Tomcat线程池的最小空闲线程数,等于初始的线程数。 maxSpareThreads:Tomcat最大空闲线程数,超过的会被关闭。 maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭。 acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认100。 配置 Executor 在Connector中指定上面的 Executor <Connector executor="tomcatThreadPool" protocol="org.apache.coyote.http11

MyBatis拦截器原理探究

大城市里の小女人 提交于 2019-12-05 22:32:00
MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。那么拦截器拦截MyBatis中的哪些内容呢? 我们进入 官网 看一看: MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括: Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) ParameterHandler (getParameterObject, setParameters) ResultSetHandler (handleResultSets, handleOutputParameters) StatementHandler (prepare, parameterize, batch, update, query) 我们看到了可以拦截Executor接口的部分方法,比如update,query,commit,rollback等方法,还有其他接口的一些方法等。 总体概括为: 拦截执行器的方法 拦截参数的处理 拦截结果集的处理 拦截Sql语法构建的处理 拦截器的使用 拦截器介绍及配置 首先我们看下MyBatis拦截器的接口定义: public

Spark常见问题汇总

﹥>﹥吖頭↗ 提交于 2019-12-05 21:13:44
注意:如果Driver写好了代码,eclipse或者程序上传后,没有开始处理数据,或者快速结束任务,也没有在控制台中打印错误,那么请进入spark的web页面,查看一下你的任务,找到每个分区日志的stderr,查看是否有错误,一般情况下一旦驱动提交了,报错的情况只能在任务日志里面查看是否有错误情况了 1 、 Operation category READ is not supported in state standby org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category READ is not supported in state standby 此时请登录Hadoop的管理界面查看运行节点是否处于standby 如登录地址是: http://192.168.50.221:50070/dfshealth.html#tab-overview 如果是,则不可在处于StandBy机器运行spark计算,因为该台机器为备分机器 2 、配置 spark.deploy.recoveryMode 选项为 ZOOKEEPER 如果不设置spark.deploy.recoveryMode的话,那么集群的所有运行数据在Master重启是都会丢失