`
文章列表
Netty框架的 主要线程是IO线程,线程模型的好坏直接决定了系统的吞吐量、并发性和安全性。 Netty的线程模型遵循了Reactor的基础线程模型。下面我们先一起看下该模型 Reactor线程模型 Reactor 单线程模型
一、什么是列式存储 讲列存储之前必须得先讲下行存储,因为行存储是大数据技术流行之前最为常见的一种数据存储方式,传统的关系数据库如Oracle、DB2、Mysql等都是将数据以行记录为单位进行组织,所以数据读写操作需要遍历行记录中所有的列,在存储机制上,行存储将行记录中各列的数据值串在一起进行存储,并且先存完第一行再存第二行,例如:1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;而列存储是一种区别于传统行存储的新型读写模式,列存储以列数据集合为单位进行存储,是把一列中的数据值串在一起进行存储,先存完第一列,再存第二列,例如 ...
前言:    在数据部门工作已经是第三个年头,做过很多的数据产品,也接触了很多的业务数据和业务数据的生产。我的工作经历也大致分为这样几个阶段:第一阶段就是做数据产品,主要的工作就是把生产好的数据根据具 ...
什么是MPP架构?       众所周知,基于Map-Reduce模式的Hadoop擅长数据批处理,不是特别符合即时查询的场景。而业界当前做大数据实时查询一般都采用MPP架构,MPP全称Massively Parallel Processing,即大规模并行处理系统。大家都知道在数据库架构设计中,目前主要有Shared Everthing、和Shared Storage、Shared Nothing这三种主流架构,概要架构如下图所示: Shared Everthting:完全透明共享CPU/MEMORY/IO,并行处理能力是最差的,性能的提升严重依赖单机硬件的升级并总有天花板。Sha ...
一、基本概念       索引相信大家多多少少都接触过,索引的目的说白了就是加快数据的检索、排序和计算等,尤其是对于海量数据的快速检索,索引起到了至关重要的作用。大家都知道,我们基于传统数据库开发经常会遇到 ...
16、接着上篇文章LocalizationEventType.INIT_CONTAINER_RESOURCES事件被触发,对应ResourceLocalizationService.handle()被执行,分别会创建public、private、application三种资源对应的LocalResourcesTrackerImpl服务,接着LocalResourcesTrackerImpl.handle()被执行17、然 ...
11、接着上篇文章ApplicationMasterLaunch.handle(AMLaunchEventType.LAUNCH)被触发,接着开始调用RPC服务向NodeManager请求启动container,并触发RMAppAttemptEventType.LAUNCHED事件;   12、调用ContainerManagementProtocolPBClientImpl.startContainers(allRequests)请Containers启动;   13、接着NodeManager响应startContainer请求,从而会去调用ContainerManagerImp ...
6、接着上篇文章中的最后一步:ResourceManager服务端执行ClientRMService.submitApplication(),接着开始调用RMAppManager.submitApplication()进而来触发RMAppEvent事件,成为job调度运行事件触发的源头; (本系列文章主要分析job调度运行流程的主要事件流程,像其它的日志读写事件流程、container监控流程等并没有包括在内)   7、接着触发了RMAppImpl.handle(),这其中注册了多种状态转换机制,负责RMAppState的各种状态转换;   8、ResourceManager服务启 ...
1、通过hadoop -jar命令提交一个job,并且解析提交的各个参数,保存对应的属性或内容到configuration;   优化点:这里可以通过修改GenerticOptionPaser类,来解析自定义的属性,比如public jar包更新等。2、调用waitForCompletion提交job并轮询job运行状态; 优化点:这里的job状态轮询在ResourceManager返回app finish后回去查询historyserver,查询historyserver失败的话会默认重试三次,由于historyserver是单点并且无状态的,可以启用备用节点,当主节点挂掉或阻塞超时 ...
1、NodeManager初始化时会先初始化ContainerManagerImpl服务,从而触发LogAggregationService也被初始化,而该服务是用于处理applog的读写流程的。   2、LogAggregationService会根据各种事件触发,从而读取本地的container log,然后写到hdfs上的app-log-dir,并删除本地的container log。   3、其中每个nodemanager的本地的container-log,是在ContainerLaunch.call中运行container时,调用LogDirsHandlerService来 ...
1、job提交后,调用JobSubmitter的submitJobInternal方法提交job相关文件到hdfs   2、nodemanager启动时会初始化本地目录,并清除本地yarn.nodemanager.local-dirs下的filecache/usercache/nmprivate目录下的资源文件   3、nodemanager的container资源初始化:ResourceLocalizationService服务中LocalizerRunner分别会去下载job相关文件   4、container运行完成时会触发JobHistoryEvent事件,JobHist ...
今天来聊聊数据库里的索引,你知道的,网上这样的文章一抓一大把的, 基本都是从索引的原理说起,讲到索引的分类, 物理组织和存储形式,如何找到对应的记录,如何构建复杂的索引等等 ,如果我再写一篇这样的就没意思了,而且这些未必真的是大家(尤其是开发同学)关心的。所以我今天打算以一个不同的角度来讲下索引,而且针对B+tree索引,希望大家看了会有所帮助。 对于一个SQL,开发同学最关心的啥? 我觉得并不是这个SQL在数据库里面是如何执行的,而是这条SQL是否能尽快的返回结果,前面我们在讲连接池的时候提到过,在SQL的生命周期里,每一个环节都有足够的优化空间,但是我们有没有想过,SQL优化的本质是啥 ...
这篇博客文章接下来的部分,将跳出任何一种数据库,从原理的角度上来分析下面的几个问题: 问题一:数据一致性。在不使用共享存储的情况下,传统RDBMS(例如:Oracle/MySQL/PostgreSQL等),能否做到在主库出问题时的数据零 ...
运行中的Topology主要由以下三个组件组成的: Worker processes(进程) Executors (threads)(线程) Tasks 其中进程数除以机器数可以得到每台机器的进程数,我们以一台机器为例: Spout或者Bolt的Task个数一旦指定之后就不能改变了,而Executor的数量可以根据情况来进行动态的调整。默认情况下# executor

storm的ack机制

我们知道,Storm保证发出的每条消息都能够得到完全处理,也就是说,对于从Spout发出的每个tuple,该tuple和其产生的所有tuple(整棵tuple树)都被成功处理。如果在应用设定的超时时间之内,这个tuple没有处理成功,则认为这个tuple处理失败了。tuple处理成功还是失败,Storm又是怎么知道的呢?   原来Storm中有一类叫Acker的task,它会对tuple树进行跟踪,并检测相应的spout tuple是否处理完成了。当一个tuple被创建时,不管是在Spout还是Bolt中创建,它都会被赋予一个tuple-id(随机生成的64位数字),这些tuple-id ...
Global site tag (gtag.js) - Google Analytics