executor

Java并发——线程池Executor框架

怎甘沉沦 提交于 2019-11-30 20:40:47
Java并发——线程池Executor框架 线程池 无限制的创建线程 若采用"为每个任务分配一个线程"的方式会存在一些缺陷,尤其是当需要创建大量线程时: 线程生命周期的开销非常高 资源消耗 稳定性 引入线程池 任务是一组逻辑工作单元,线程则是使任务异步执行的机制。当存在大量并发任务时,创建、销毁线程需要很大的开销,运用线程池可以大大减小开销。 Executor框架 说明: Executor 执行器接口,该接口定义执行Runnable任务的方式。 ExecutorService 该接口定义提供对Executor的服务。 ScheduledExecutorService 定时调度接口。 AbstractExecutorService 执行框架抽象类。 ThreadPoolExecutor JDK中线程池的具体实现。 Executors 线程池工厂类。 ThreadPoolExecutor 线程池类 线程池是一个复杂的任务调度工具,它涉及到任务、线程池等的生命周期问题。要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的。 JDK中的线程池均由ThreadPoolExecutor类实现。其构造方法如下: 参数说明: corePoolSize:核心线程数。 maximumPoolSize:最大线程数。 keepAliveTime

Java并发——线程池Executor框架

巧了我就是萌 提交于 2019-11-30 19:19:31
线程池 无限制的创建线程 若采用"为每个任务分配一个线程"的方式会存在一些缺陷,尤其是当需要创建大量线程时: 线程生命周期的开销非常高 资源消耗 稳定性 引入线程池 任务是一组逻辑工作单元,线程则是使任务异步执行的机制。当存在大量并发任务时,创建、销毁线程需要很大的开销,运用线程池可以大大减小开销。 Executor框架 说明: Executor 执行器接口,该接口定义执行Runnable任务的方式。 ExecutorService 该接口定义提供对Executor的服务。 ScheduledExecutorService 定时调度接口。 AbstractExecutorService 执行框架抽象类。 ThreadPoolExecutor JDK中线程池的具体实现。 Executors 线程池工厂类。 ThreadPoolExecutor 线程池类 线程池是一个复杂的任务调度工具,它涉及到任务、线程池等的生命周期问题。要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的。 JDK中的线程池均由ThreadPoolExecutor类实现。其构造方法如下: 参数说明: corePoolSize:核心线程数。 maximumPoolSize:最大线程数。 keepAliveTime:线程存活时间。当线程数大于core数

解决AsyncTask引发的RejectedExecutionException

别来无恙 提交于 2019-11-30 18:11:34
AsyncTask 是google为易用和有效的异步操作UI线程的所开发的一个封装类。使用者可以很轻易的使用其进行后台操作,然后将结果传给UI线程,而不需要使用Thread和Handler。 这样好用的一个类,显然可以在ListView异步加载图片时大显身手,本着这样的想法,笔者瞬间就完成了一段这样的模拟代码: Adapter的getView方法: 1 @Override 2 public View getView(int pos, View view, ViewGroup viewGroup) { 3 if (view == null) { 4 view = getLayoutInflater().inflate(R.layout.test2_list_item, 5 null); 6 } 7 ImageView imageView = (ImageView) view.findViewById(R.id.imageView); 8 //这里每次都new出一个新的AsyncTask,进行执行。 9 new TestAsyncTask(imageView, pos).execute(new Object()); 10 TextView itemView = (TextView) view.findViewById(R.id.itemView); 11 itemView

解决AsyncTask引发的RejectedExecutionException

↘锁芯ラ 提交于 2019-11-30 18:11:21
AsyncTask 是google为易用和有效的异步操作UI线程的所开发的一个封装类。使用者可以很轻易的使用其进行后台操作,然后将结果传给UI线程,而不需要使用Thread和Handler。 这样好用的一个类,显然可以在ListView异步加载图片时大显身手,本着这样的想法,笔者瞬间就完成了一段这样的模拟代码: Adapter的getView方法: 1 @Override 2 public View getView(int pos, View view, ViewGroup viewGroup) { 3 if (view == null) { 4 view = getLayoutInflater().inflate(R.layout.test2_list_item, 5 null); 6 } 7 ImageView imageView = (ImageView) view.findViewById(R.id.imageView); 8 //这里每次都new出一个新的AsyncTask,进行执行。 9 new TestAsyncTask(imageView, pos).execute(new Object());10 TextView itemView = (TextView) view.findViewById(R.id.itemView);11 itemView.setText(

Spark开发常用参数

爱⌒轻易说出口 提交于 2019-11-30 14:29:38
Driver spark.driver.cores driver端分配的核数,默认为1,thriftserver是启动thriftserver服务的机器,资源充足的话可以尽量给多。 spark.driver.memory driver端分配的内存数,默认为1g,同上。 spark.driver.maxResultSize driver端接收的最大结果大小,默认1GB,最小1MB,设置0为无限。 这个参数不建议设置的太大,如果要做数据可视化,更应该控制在20-30MB以内。过大会导致OOM。 spark.extraListeners 默认none,随着SparkContext被创建而创建,用于监听单参数、无参数构造函数的创建,并抛出异常。 Executor spark.executor.memory 每个executor分配的内存数,默认1g,会受到yarn CDH的限制,和memoryOverhead相加 不能超过总内存限制。 spark.executor.cores 每个executor的核数,默认yarn下1核,standalone下为所有可用的核。 spark.default.parallelism 默认RDD的分区数、并行数。 像reduceByKey和join等这种需要分布式shuffle的操作中,最大父RDD的分区数;像parallelize之类没有父RDD的操作

Azkaban-3.x 配置信息说明

霸气de小男生 提交于 2019-11-30 14:22:49
1. Azkaban Web Server 的配置 (1) 基本配置 配置 说明 默认值 azkaban.name 网页上显示的Azkaban实例的名称 Local azkaban.label Azkaban实例的描述信息 My Local Azkaban azkaban.color 网页的主题颜色 #FF3601 azkaban.default.servlet.path 访问WEB页面默认的根路径 /index web.resource.dir CSS和JS文件所在的位置 web/ default.timezone 时区,应该设置为Asia/Shanghai America/Los_Angeles viewer.plugin.dir 监控插件安装的路径 plugins/viewer cache.directory 缓存目录 cache job.max.Xms 每个Job初始化时分配的内存 1GB job.max.Xmx 每个Job可以请求到的最大内存 2GB (2) Jetty 相关的配置 配置 说明 默认值 jetty.port jetty端口 8081 jetty.use.ssl 是否使用SSL false jetty.maxThreads 用于发送请求的最大线程数 25 jetty.ssl.port SSL port 8443 jetty.keystore

CompletableFuture 组合式异步编程

半城伤御伤魂 提交于 2019-11-30 12:07:56
CompletableFuture 是jdk1.8引入的一个新特性。 它主要是为了解决多个 Future 结果之间的依赖关系。比如: 将两个异步计算合并为一个——这两个异步计算之间相互独立,同时第二个又依赖于第 一个的结果。 等待 Future 集合中的所有任务都完成。 仅等待 Future 集合中最快结束的任务完成(有可能因为它们试图通过不同的方式计算同 一个值),并返回它的结果。 通过编程方式完成一个 Future 任务的执行(即以手工设定异步操作结果的方式)。 应对Future的完成事件(即当 Future 的完成事件发生时会收到通知,并能使用 Future 计算的结果进行下一步的操作,不只是简单地阻塞等待操作的结果)。 runAsync 和 supplyAsync方法 CompletableFuture 提供了四个静态方法来创建一个异步操作。 public static CompletableFuture<Void> runAsync(Runnable runnable) public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor) public static <U> CompletableFuture<U> supplyAsync(Supplier<U>

Spark on YARN resource manager: Relation between YARN Containers and Spark Executors

别来无恙 提交于 2019-11-30 08:35:52
I'm new to Spark on YARN and don't understand the relation between the YARN Containers and the Spark Executors . I tried out the following configuration, based on the results of the yarn-utils.py script, that can be used to find optimal cluster configuration. The Hadoop cluster (HDP 2.4) I'm working on: 1 Master Node: CPU: 2 CPUs with 6 cores each = 12 cores RAM: 64 GB SSD: 2 x 512 GB 5 Slave Nodes: CPU: 2 CPUs with 6 cores each = 12 cores RAM: 64 GB HDD: 4 x 3 TB = 12 TB HBase is installed (this is one of the parameters for the script below) So I ran python yarn-utils.py -c 12 -m 64 -d 4 -k

Spark工作原理

岁酱吖の 提交于 2019-11-30 07:03:16
Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势: 1.运行速度快,Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。 2.适用场景广泛,大数据分析统计,实时数据处理,图计算及机器学习 3.易用性,编写简单,支持80种以上的高级算子,支持多种语言,数据源丰富,可部署在多种集群中 4.容错性高。Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即充许基于数据衍生过程)对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式:CheckPoint Data,和Logging The Updates,用户可以控制采用哪种方式来实现容错。 Spark的适用场景 目前大数据处理场景有以下几个类型: 1.复杂的批量处理

Spark内核架构--清晰图解

橙三吉。 提交于 2019-11-30 06:59:45
详细步骤: 1.提交的jar包 2.spark-submit提交到集群上运行 3.在提交的机器上,运行sparkSubmit的main方法(通过反射的方式创建我们编写主类的实例对象,调用main方法,执行代码) 4.当代码到SparkContext,开始初始化SparkContxt 5.初始化SparkContext,创建DAGscheduler,TaskScheduler 6、当TaskSchedule启动后,会将用户提交的任务和相关的参数,提交给master进行任务的注册 7、当master接受到任务请求时,会将请求参数进行解析,并封装成Application,然后将其持久化,然后将其加入到任务队列waitingApps中 8、当轮到我们提交的任务运行时,就开始调用schedule(),进行任务资源的调度 9、master将调度好的资源封装到launchExecutor中发送给指定的worker 10、worker接受到Maseter发送来的launchExecutor时,会将其解压并封装到ExecutorRunner中,然后调用这个对象的start(), 启动Executor 11、Executor启动后会向DriverActor进行反向注册 12、TaskScheduler发送注册成功的消息给Executor 13、Executor接受到注册成功的消息后会创建一个线程池