首页 文章 精选 留言 我的

精选列表

搜索[AI安全分析],共10000篇文章
优秀的个人博客,低调大师

深入理解Spark:核心思想与源码分析. 2.2 Spark基础知识

2.2 Spark基础知识 1.版本变迁 经过4年多的发展,Spark目前的版本是1.4.1。我们简单看看它的版本发展过程。 1)Spark诞生于UCBerkeley的AMP实验室(2009)。 2)Spark正式对外开源(2010年)。 3)Spark 0.6.0版本发布(2012-10-15),进行了大范围的性能改进,增加了一些新特性,并对Standalone部署模式进行了简化。 4)Spark 0.6.2版本发布(2013-02-07),解决了一些bug,并增强了系统的可用性。 5)Spark 0.7.0版本发布(2013-02-27),增加了更多关键特性,例如,Python API、Spark Streaming的alpha版本等。 6)Spark 0.7.2版本发布(2013-06-02),性能改进并解决了一些bug,新增API使用的例

优秀的个人博客,低调大师

深入理解Spark:核心思想与源码分析. 3.2 创建执行环境SparkEnv

3.2 创建执行环境SparkEnv SparkEnv是Spark的执行环境对象,其中包括众多与Executor执行相关的对象。由于在local模式下Driver会创建Executor,local-cluster部署模式或者Standalone部署模式下Worker另起的CoarseGrainedExecutorBackend进程中也会创建Executor,所以SparkEnv存在于Driver或者CoarseGrainedExecutorBackend进程中。创建SparkEnv 主要使用SparkEnv的createDriverEnv,SparkEnv.createDriverEnv方法有三个参数:conf、isLocal和 listenerBus。 val isLocal = (master == "local" || mast

优秀的个人博客,低调大师

深入理解Spark:核心思想与源码分析. 3.7 创建和启动DAGScheduler

3.7 创建和启动DAGScheduler DAGScheduler主要用于在任务正式交给TaskSchedulerImpl提交之前做一些准备工作,包括:创建Job,将DAG中的RDD划分到不同的Stage,提交Stage,等等。创建DAG-Scheduler的代码如下。 @volatile private[spark] var dagScheduler: DAGScheduler = _ dagScheduler = new DAGScheduler(this) DAGScheduler的数据结构主要维护jobId和stageId的关系、Stage、ActiveJob,以及缓存的RDD的partitions的位置信息,见代码清单3-32。 代码清单3-32 DAGScheduler维护的数据结构 private[scheduler]

优秀的个人博客,低调大师

深入理解Spark:核心思想与源码分析. 3.9 启动测量系统MetricsSystem

3.9 启动测量系统MetricsSystem MetricsSystem使用codahale提供的第三方测量仓库Metrics,有关Metrics的具体信息可以参考附录D。MetricsSystem中有三个概念: Instance:指定了谁在使用测量系统; Source:指定了从哪里收集测量数据; Sink:指定了往哪里输出测量数据。 Spark按照Instance的不同,区分为Master、Worker、Application、Driver和Executor。 Spark目前提供的Sink有ConsoleSink、CsvSink、JmxSink、MetricsServlet、GraphiteSink等。 Spark中使用MetricsServlet作为默认的Sink。 MetricsSystem的启动代码如下。 val metricsSyste

优秀的个人博客,低调大师

深入理解Spark:核心思想与源码分析. 3.10 创建和启动ExecutorAllocationManager

3.10 创建和启动ExecutorAllocationManager ExecutorAllocationManager用于对已分配的Executor进行管理,创建和启动Executor-AllocationManager的代码如下。 private[spark] val executorAllocationManager: Option[ExecutorAllocationManager] = if (conf.getBoolean("spark.dynamicAllocation.enabled", false)) { Some(new ExecutorAllocationManager(this, listenerBus, conf)) } else { None } executo

优秀的个人博客,低调大师

深入理解Spark:核心思想与源码分析. 3.13 创建DAGSchedulerSource和BlockManagerSource

3.13 创建DAGSchedulerSource和BlockManagerSource 在创建DAGSchedulerSource、BlockManagerSource之前首先调用taskScheduler的post-StartHook方法,其目的是为了等待backend就绪,见代码清单3-53。postStartHook的实现见代码清单3-54。 创建DAGSchedulerSource和BlockManagerSource的过程类似于ExecutorSource,只不过DAGSchedulerSource测量的信息是stage. failedStages、stage. runningStages、stage. waiting-Stages、stage. allJobs、stage. activeJobs,BlockManager

优秀的个人博客,低调大师

深入理解Spark:核心思想与源码分析. 2.4 Spark基本架构

2.4 Spark基本架构 从集群部署的角度来看,Spark集群由以下部分组成: Cluster Manager:Spark的集群管理器,主要负责资源的分配与管理。集群管理器分配的资源属于一级分配,它将各个Worker上的内存、CPU等资源分配给应用程序,但是并不负责对Executor的资源分配。目前,Standalone、YARN、Mesos、EC2等都可以作为Spark的集群管理器。 Worker:Spark的工作节点。对Spark应用程序来说,由集群管理器分配得到资源的Worker节点主要负责以下工作:创建Executor,将资源和任务进一步分配给Executor,同步资源信息给Cluster Manager。 Executor:执行计算任务的一线进程。主要负责任务的执行以及与Worker、Driver App的信息同步。 Drive

优秀的个人博客,低调大师

深入理解Spark:核心思想与源码分析. 2.3 Spark基本设计思想

2.3 Spark基本设计思想 2.3.1 Spark模块设计 整个Spark主要由以下模块组成: Spark Core:Spark的核心功能实现,包括:SparkContext的初始化(Driver Application通过SparkContext提交)、部署模式、存储体系、任务提交与执行、计算引擎等。 Spark SQL:提供SQL处理能力,便于熟悉关系型数据库操作的工程师进行交互查询。此外,还为熟悉Hadoop的用户提供Hive SQL处理能力。 Spark Streaming:提供流式计算处理能力,目前支持Kafka、Flume、Twitter、MQTT、ZeroMQ、Kinesis和简单的TCP套接字等数据源。此外,还提供窗口操作。 GraphX:提供图计算处理能力,支持分布式,Pregel提供的API可以解决图计算中的常见问题。

优秀的个人博客,低调大师

《深入分析GCC 》——第1章 GCC概述1.1 GCC的产生与发展

第1章 GCC概述本章主要对GCC的发展过程及GCC的特点进行简介,并给出了本书的主要内容简介。 1.1 GCC的产生与发展 GCC(GNU Compiler Collection)是GNU工程(GNU Project)中的核心工具软件,其官方网址为https://gcc.gnu.org/。GCC支持多种前端的编程语言,包括C、C++、Java、Ada和Fortran等,其编译生成的目标代码可以在几乎所有的处理器平台上运行,是目前使用最广泛的编译系统之一。GCC遵循GNU GPL(GNU Public License)协议,由FSF(Free Software Foundation)发布。GNU和GCC的图标如图1-1所示。 初期的GCC仅仅作为C语言的编译器,即GNU C Compiler。1987年GCC 1.0发布,同年12月,GC

优秀的个人博客,低调大师

storm1.0节点间消息传递过久分析及调优

序:最近对storm平台系统进行性能检测发现偶尔会出现oncebolt向另一个twobolt发送数据后,twobolt要500毫秒后才接收到进行处理。这里简单说增大twobolt的并行度即可解决,但是究其内部原因是因为storm的通信机制所导致的问题。 先介绍背景:一个拓扑的结构,spout(并行度:1)[处理性能:capacity 0.04],oncebolt(并行度:20)[处理性能:capacity 0.2],twobolt(并行度:100)[处理性能:capacity 0.6];整个拓扑就我预估最大的处理量就是一秒一千条。 原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6544017.htmll 微信:intsmaze 避免微信回复重复咨询问题,技术咨询请博客留言。 最近对系统进行性能检测,统计整个storm系统中一条消息处理中各个IO耗时的时间,找出性能瓶颈。发现除了活动匹配中会有分布式锁以及大量的redis的IO操作,导致最多会耗时30ms,以及从Hbase中查询数据时由于hbase集群当时正在跑任务导致耗时1~2s。唯一出现的问题就是onebolt向twobolt发送数据后,某些数据耗时几百毫秒才会被twobolt接收到。这就引起了我的注意。先上一下伪代码: public class OnceBolt extends BaseRichBolt{ private static final long serialVersionUID = -5283595260540124273L; private OutputCollector collector; public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { this.collector = collector; } public void execute(Tuple input) {long intsmazeTime=System.currentTimeMillis(); collector.emit(input,new Values(intsmazeTime)); } public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declare(new Fields("intsmaze")); } } public class TwoBolt extends BaseRichBolt{ private static final long serialVersionUID = -5283595260540124273L; private OutputCollector collector; public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { this.collector = collector; } public void execute(Tuple input) {long intsmazeTime=input.getLong(0); System.out.println("耗时:"+(System.currentTimeMillis()-intsmazeTime)); } public void declareOutputFields(OutputFieldsDeclarer declarer) { } } 这个问题从storm内部通信来说: 每个executor有自己的接收队列和输出队列。 每个worker进程有一个独立的接收线程将外部发送过来的消息移动到对应的executor线程的接收队列中。 每个worker存在一个独立的发送线程负责从worker的传输队列中读取消息,并通过网络发送给其他worker。 每个executor有单独的线程分别来处理spout/bolt的业务逻辑,业务逻辑输出的中间数据会存放在输出队列中,当executor的输出队列中的tuple达到一定的阀值,executor的发送线程将批量获取输出队列中的tuple,并发送到work中的传输队列中。 因为oncebolt任务向自己的发送队列生产过快,且向twobolt任务的接收队列发送数据过多,导致twobolt的接收队列满了,twobolt处理不过来了。[简单说就是oncebolt生产数据的速度快于twobolt的消费速率]。这个时候就会出现twobolt处理一个oncebolt的消息要几百毫秒。这个情况是因为twobolt的处理一条消息平均要50毫秒,twobolt接收队列长度是10,刚好twobolt在从队列拉取一条消息处理时,twobolt的接收队列满了,这个时候队列中第10条消息等被处理就会阻塞10*50毫秒的。 同时因为接收队列满了,oncebolt就会阻塞到,等twobolt接收队列有空了再去发送(很多文章说会导致消息丢失,但是我测试发现没有这种情况,只会阻塞到,这种就是流量洪峰下,storm会出现的一种情况)。这种情况是某几秒消息量过大导致产生,所以这种情况只是偶尔发送,过一会就会正常了,但是如果交易量一直很大,这个时候我们就要进行调优了,最简单的就是增大twobolt的并行度以及work数量。 个人认为的最优并行度设置:我们可以参照每一个节点的capacity的性能指标,比如我们这里spout的指标是0.04所以就不需要再增加它的并行度和kafka的分区保持一致。oncebolt的指标是0.2,而twobolt的指标是0.6。很明显是oncebolt资源被浪费了或者twobolt的速率跟不上oncebolt,我们给oncebolt的并行度可以减少一半,比如10个。这种方式是减少资源的浪费。或者就目前的问题,增大twobolt的并行度来提示消费的速度。 还有一个问题我说一下:storm的性能提升我们是增加work数量还是增加节点的并行度。 这个是一个调优的过程,如果我们只启动一个work,一昧的在这个work中增加并行度,这样会导致频繁的full GC,因为一个work的2G资源供所有的任务一起用;或者我们启动10个work,每个work只启动一个任务,先不说浪费资源,首先在任务间传递消息时就一定会走网络通信这也是速率的消耗。所以是一句话,一个work中的任务数量要合理,不要太多,也不要太少,这是一个调优的过程。 作者: intsmaze(刘洋) 出处: http://www.cnblogs.com/intsmaze/ 老铁,你的--->推荐,--->关注,--->评论--->是我继续写作的动力。 微信公众号号:Apache技术研究院 由于博主能力有限,文中可能存在描述不正确,欢迎指正、补充! 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册