dubbo服务端启动源码分析(基于Dubbo 3)

本文基于Dubbo 3.0.2来进行源码研究。在基于springboot的开发中,dubbot的spring-boot-starter中,DubboAutoConfiguration自动配置是一个关键类,这个类向spring容器注入了如下关键类:ServiceAnnotationPostProcessorDubboBootstrapApplicationListener其中ServiceAnnotationPostProcessor主要是用来加载被DubbotService注解修饰的类,而Dub
分类: 其他 发布时间: 11-18 09:07 阅读次数: 0

解决go get proxy代理慢的问题

使用go get的时会发现特别慢,有时候甚至无法访问,这时候按照如下配置即可:系统环境变量中使用阿里云的go get代理:GOPROXY=https://mirrors.aliyun.com/goproxy/即可
分类: 其他 发布时间: 11-18 09:07 阅读次数: 0

Yarn整体架构,客户端编程

YARN(Yet Another Resource Negotiator)是hadoop生态中重要的组成部分,一种资源管理调度系统,官方给出的整体架构和交互如下:Container首先说明一下Container这个概念,方便后续的展开说明。YARN是一个资源管理框架,在YARN中将资源抽象成Container这个概念,YARN将CPU和内存资源抽象封装在Container中,在具体代码实现上org.apache.hadoop.yarn.server.nodemanager.containermana
分类: 其他 发布时间: 11-18 09:07 阅读次数: 0

1. spark源码分析(基于yarn cluster模式)-任务提交

首先声明,这个系列研究的源码基于spark-2.4.6我们在使用spark-shell提交任务的时候,一般采用如下模式提交任务:park-submit --class xxxxx --name 'test_xxxx' --master yarn-cluster --queue yarn-test --principal ad-bigdata-test --keytab 'xxxx.keytab' --num-executors 30 --drive
分类: 其他 发布时间: 11-18 09:07 阅读次数: 0

2. spark源码分析(基于yarn cluster模式)-YARN client启动,提交ApplicationMaster

通过上一节的研究,我们发现,spark提交任务后,启动了org.apache.spark.deploy.yarn.Client.run()方法,这里实际上就是spark利用yanr的客户端API在向YARN提交任务了,接下来我们一起来分析这个过程:def run(): Unit = { this.appId = submitApplication() if (!launcherBackend.isConnected() && fireAndForget) { v
分类: 其他 发布时间: 11-18 09:06 阅读次数: 0

3. spark源码分析(基于yarn cluster模式)-YARN ApplicationMaster启动

经过上一节我们分析到,Spark通过yarn client项RM提交了一个ApplicationMaster并启动,我们接下来看看其细节。 def main(args: Array[String]): Unit = { SignalUtils.registerLogger(log) val amArgs = new ApplicationMasterArguments(args) master = new ApplicationMaster(amArgs) System.
分类: 其他 发布时间: 11-18 09:06 阅读次数: 0

4. spark源码分析(基于yarn cluster模式)-YARN contaienr启动-CoarseGrainedExecutorBackend

通过上一节的分析,我们确定,container中启动的为org.apache.spark.executor.CoarseGrainedExecutorBackend,接下来,我们看下其实现。def main(args: Array[String]) { var driverUrl: String = null var executorId: String = null var hostname: String = null var cores: Int = 0 va
分类: 其他 发布时间: 11-18 09:06 阅读次数: 0

5. spark源码分析(基于yarn cluster模式)- SparkContext启动

当我们在程序中new SparkCotext的时候,首先根据传入的SparkConf创建一个新的SparkConf: private[spark] def createSparkEnv( conf: SparkConf, isLocal: Boolean, listenerBus: LiveListenerBus): SparkEnv = { SparkEnv.createDriverEnv(conf, isLocal, listenerBus, SparkC
分类: 其他 发布时间: 11-18 09:06 阅读次数: 0

6. spark源码分析(基于yarn cluster模式)- job任务提交、Stage划分、Stage提交

我们知道,Spark中必须Action算子才会真正执行,这里我们以saveAsTextFile为例来说明整个过程。def saveAsTextFile(path: String): Unit = withScope { val nullWritableClassTag = implicitly[ClassTag[NullWritable]] val textClassTag = implicitly[ClassTag[Text]] val r = this.mapPartition
分类: 其他 发布时间: 11-18 09:05 阅读次数: 0

7. spark源码分析(基于yarn cluster模式)- Task划分、资源分配、提交

通过上一节的分析,我们最后发现spark通过submitMissingTasks来提交Stage。这个章节我们来分析一下其实现以及Task的划分和提交。private def submitMissingTasks(stage: Stage, jobId: Int) { val partitionsToCompute: Seq[Int] = stage.findMissingPartitions() val properties = jobIdToActiveJob(jobId).prope
分类: 其他 发布时间: 11-18 09:05 阅读次数: 0

8. spark源码分析(基于yarn cluster模式)- Task执行,Map端写入实现,ShuffleMapTask,SortShuffleWriter,ResultStage,ResultT

通过上一节分析,我们知道,task提交之后通过launchTasks来具体执行任务,这一章节我们看下其具体实现.private def launchTasks(tasks: Seq[Seq[TaskDescription]]) { for (task <- tasks.flatten) { val serializedTask = TaskDescription.encode(task) if (serializedTask.limit() >= m
分类: 其他 发布时间: 11-18 09:05 阅读次数: 0

9. spark源代码分析(基于yarn cluster模式)- Task执行,Reduce端读取shuffle数据文件

本系列基于spark-2.4.6通过上一节的分析,我们了解了Spark中ShuflleMapTask中Map端数据的写入流程,这个章节我们分析下Reduce端是如何读取数据的。在ShulleMapTask.runTask中,有这么一个步骤:writer.write(rdd.iterator(partition, context).asInstanceOf[Iterator[_ <: Product2[Any, Any]]])其中rdd.iterator: final def iterat
分类: 其他 发布时间: 11-18 09:05 阅读次数: 0

10. spark源代码分析(基于yarn cluster模式)- 聊聊RDD和Depedency

我们知道在Spark中RDD是一个特别重要的概念,可以说spark所有的逻辑都需要依赖RDD,这篇我们简单聊聊Spark中的RDD,spark中RDD的定义如下:abstract class RDD[T: ClassTag]( @transient private var _sc: SparkContext, @transient private var deps: Seq[Dependency[_]] ) extends Serializable with Logging {
分类: 其他 发布时间: 11-18 09:04 阅读次数: 0

11. spark源代码分析(基于yarn cluster模式)- 聊聊Stage和Task

通过前面的分析,我们了解到,在Spark中只存在两种Stage:ResultStageShuffleMapStageStage之前划分的条件是遍历当前RDD和父RDD的依赖列表,如果遇到了ShuffleDependency则进行Stage的划分,Spark中最后一个Stage永远都是ResultStage,其他的都是ShuffleMapStage。每个ShuffleMapStage都对应一个ShuffleMapTask而每个ResultStage都对应一个ResultTask我们经常说一个S
分类: 其他 发布时间: 11-18 09:04 阅读次数: 0

7. Netty中编码器、解码器

通过上一节的分析,我们已经了解到,当Netty读取到客户端发送的数据之后是读取到了ByteBuf中,实际上就是字节,但是在java中一般传递过来的都是对象信息,发送端将待发送的数据序列化成字节然后通过网络发送出去,接收端将接收到的字节数据然后反序列化。...
分类: 其他 发布时间: 11-18 09:04 阅读次数: 0

8. Netty中线程处理 - NioEventLoopGroup,NioEventLoop

通过之前关于Netty的分析,我们已经了解到,一般我们在Netty服务端启动的时候会传入boss线程组和worker线程组,这节结合之前我们的分析,来聊聊Netty中的线程处理。我们知道,Netty是一个高性能的网络框架,针对网络中,我们一般常见处理是网络的连接的建立、消息读写等。这些在Netty中线程模型是怎样的。首先说一下一个结论,在Netty中每个Channel都会在全局运行的时候绑定到一个线程中去,不管是ServerChannel还是ClientChannel。首先一般的Netty服务端启动程
分类: 其他 发布时间: 11-18 09:04 阅读次数: 0

MySQL中B+树索引,聚簇索引,二级索引,辅助索引,回表,索引生效条件

对于MySQL,我们经常说调优有一个手段就是加索引,那么为什么加索引能够优化查询,是不是加了索引查询就快了 ?在MySQL中,存储的单元并不是按照我们理解的一条一条记录,而是按照页来进行存储的,MySQL中默认一个页page的大小是16KB,这个页中会记录多条数据。如果我们在写入的时候,不对这些数据进行一些处理,那么我们要查询表中的一条数据的时候,肯定是需要进行全表扫描的。...
分类: 其他 发布时间: 11-18 09:03 阅读次数: 0

Dubbo3中服务端线程模型,线程处理(基于Dubbo3)

通过之前我们对Dubbo服务端启动流程的源码分析dubbo服务端启动源码分析(基于Dubbo 3),我们知道默认的Dubbo协议底层是基于Netty的,之前我们分析Netty相关线程模型的时候 Netty中线程处理 - NioEventLoopGroup,NioEventLoop也了解到Netty是有自己的线程处理的,那么Dubbo中是怎么来处理业务上的需要和Netty线程模型的?首先我们再次回顾下之前的分析,在生成NettyServer的时候: public NettyServer(URL url,
分类: 其他 发布时间: 11-18 09:03 阅读次数: 0

Dubbo消费端启动流程、处理逻辑,方法调用实现(基于Dubbo3)

之前我们已经分析Dubbo服务端相关启动流程和处理逻辑,接下来我们分析下客户端的处理流程,本文主要分析的是基于Spring框架下启动流程分析。首先当我们使用DubboComponentScan这个注解的时候,会注入DubboComponentScanRegistrar:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(DubboComponentScanRegistrar.class)pu
分类: 其他 发布时间: 11-18 09:03 阅读次数: 0

Dubbo消费端同步调用、异步调用(基于Dubbo3)

上一节,我们大概浏览了一下Dubbo消费端的启动流程Dubbo消费端启动流程、处理逻辑,方法调用实现(基于Dubbo3)我们知道Dubbo底层的网络通信是基于Netty的,而Netty一般是基于异步IO,那我们如果需要同步调用、异步调用,Dubbo中是怎么实现的呢?我们回到DubboInvoker.doInvoke中,这里是关键:protected Result doInvoke(final Invocation invocation) throws Throwable { RpcIn
分类: 其他 发布时间: 11-18 09:03 阅读次数: 0