- 博客(28)
- 收藏
- 关注
原创 Spark执行计划解析后是如何触发执行的?
从这一部分的源码分析,我们可以清楚的了解到Spark的物理计划是被火山模型如何串联起来的,以及底层的RDD是如何把一一对应的,这对于理解每一个物理执行计划的Node至关重要。首先Spark执行模型是火山模型(又叫迭代器模型),通过迭代器模型,Spark会先调用execute方法,execute方法会调用每个Node的doExecute,而从上面的分析我们可以得知每一个doExecute方法的返回类型都是RDD,因为就把每个单独的Node给串联起来了,具体的代码在SparkPlan.execute。
2024-12-15 00:10:50
1222
原创 Spark SQL 执行计划解析源码分析
至此,Spark SQL的执行计划(逻辑计划,物理计划)解析就告一段落,剩下的就是拿到executedPlan开始切分stage,task,申请资源进行调度,执行具体物理计划的逻辑了。本文用于记录Spark SQL执行计划解析的源码分析。文中仅对关键要点进行提及,无法面面具到,仅描述大体的框架。
2024-12-09 20:44:09
554
原创 openLooKeng datacenter connector跨域查询实现原理浅析
前言当公司发展到了一定的规模之后,一般都会有多个数据中心,或者多个机房,在大数据场景下就会涉及到数据会存放在不同的数据中心HDFS上,有时又需要使用多个数据中心的数据一起计算某些业务逻辑,我们可以称之为东数西算,说简单点就是跨机房读取数据。但是跨机房读取数据就会涉及到需要消耗大量昂贵的带宽资源,同时容易影响查询的性能,为此openlookeng 基于移动数据不如移动计算的理念,可以把计算逻辑发送到远端机房集群,让计算更靠近数据,预先在远端机房计算一部分逻辑,再传输少量的数据到本地机房集群进行后续计算,通过
2021-12-08 00:45:10
2080
1
原创 Presto源码解析—从SQL到AST抽象语法树
前面一篇Presto源码解析之提交查询讲了从客户端以Cli方式和JDBC方式提交SQL到Coordinator的原理,这一篇我们来看一下SQL提交到Coordinator是如何进行预处理,是如何从SQL变成AST抽象语法树的。源码时序图如下:接下来我们来详细看一下整个流程中比较重要的类和方法(部分细节会暂时忽略):QueuedStatementResource:负责处理客户端的Restful请求,包括接收查询,查询执行状态等,关键接口有:URL请求方式作用/v1/statem
2021-09-23 02:35:41
2479
2
原创 Presto源码解析之提交查询
SQL on Hadoop的计算引擎的第一步总是从提交查询开始,只有提交了查询,才有后面一系列的sql解析,优化,调度之类的工作,因此,今天我们来分析一下presto的提交查询是如何进行的(基于prestosql 330版本进行分析)。presto的连接方式可以有两种,分别是CLI形式的和JDBC形式的,分别对应源码中的presto-cli模块和presto-jdbc模块。CLI方式CLI方式的提交也就是命令行的方式,我们可以直接通过这种方式和presto集群进行交互,大多时候是已这种方式来进行测试,
2020-12-20 16:13:22
1077
1
原创 容器网络相关知识
容器化是目前的趋势,而容器网络是一块很重要的知识点,也是比较难的内容,涉及到底层的计算机网络等知识,之前实习的时候学过一点,现在整理一下。a、docker的原生网络docker提供三种原生网络,在安装的时候就会自动在host创建三个网络,用 docker network ls 命令查看,分别是:bridge、host、none。在创建容器的时候可以通过–network=none/host/bridge 来指定使用哪一种网络。none网络:什么都没有的网络,这个网络的容器只有一个lo网卡,是一个网络封闭
2020-05-09 19:46:18
658
原创 借助ApplicationListener进行Quartz和SpringBoot整合
前言网上搜索各种博客案例我们可以发现大多数Quartz和Spring的整合都是借助spring的xml配置文件来定义各种bean(Trigger、Scheduler、JobDetail等)来实现Quartz进行作业调度,其实现原理是通过配置文件或者注解来定义各种bean之间的引用关系,从而编码实现Quartz的整合。但是这种方式需要书写的配置文件太多,并且需要添加新的作业进行调度时的可扩展性太差...
2020-05-08 20:33:05
340
原创 作业调度Quartz简介与案例
最近在做一个值班机器人,每个工作日早上10点在群里提醒对应的人当天是他On Call,类似这样的定时任务可以有很多实现方式,本人选择最经典的Quartz进行实现,由此向大家介绍一下Quartz是什么东西。Quartz简介简介: 根据Quartz官网介绍,Quartz是一个开源免费的Apache项目,是一个功能丰富的开源作业调度,可以集成到任何Java应用程序中,从最小的独立应用程序到最大的电子...
2020-05-01 01:18:55
406
原创 Spark 合并小文件失败 出现IOException :No space left on device 定位
记录一下导师周末给菜鸟实习生安排的任务背景Flume在采集数据的时候向HDFS中写入会生成很多小文件,现在的话是通过spark 写的一个程序去合并这些小文件,但是会出现合并小文件失败的情况,按理来说这是很简单的一个Job,不应该有失败的理由,于是就开始了下面的旅程:定位问题:首先找到错误日志,发现是启动merge脚本的时候出现异常从上面的异常定位到下面的异常,发现是spark出现的IO...
2019-12-15 15:17:52
2132
原创 分布式消息系统之kafka
kafka简介kafka是一个高吞吐量、分布式的发布—订阅消息系统。据kafka官网介绍,当前的kafka已经定位为一个分布式流式处理平台,它最初由LinkedIn公司开发,后来成为Apache项目的一部分。kafka核心模块使用Scala语言开发,支持多语言(java、c/c++、python、Go等)的客户端,它可以进行水平扩展和具有高吞吐量的特性基本结构kafka基本概念主题一...
2019-08-04 17:52:27
1037
原创 zookeeper是如何保证创建的节点是唯一的?
问题背景zookeeper是一个分布式协调服务,zookeeper可以保证数据的一致性是因为所有的写请求都会被Follower节点转发到Leader节点执行。因此创建节点的请求也是一样的,只会别Leader节点创建新的节点,然后把数据同步到其他的Follower节点,那么它是如何保证创建的节点是唯一的呢?zookeeper源码级保证原子性zookeeper中创建节点是由DataTree的cr...
2019-08-04 16:16:18
2580
1
原创 zookeeper学习笔记
zookeeper简介zookeeper简介ZooKeeper是一个高可用的分布式数据管理与系统协调框架。官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。ZAB协议Zookeeper 使用 Zookeeper ...
2019-07-26 15:20:23
1324
原创 使用左连接一句话实现四张表的关联查询
需求:有如下四张表,通过角色名查找日志记录使用左连接进行查询select logid , log.username from role left join user_role on role.roleid=user_role.roleid left join user on user_role.userid = user.userid left join log on user.usern...
2019-05-10 14:30:57
6363
原创 InnoDB存储引擎学习总结
概述InnoDB存储引擎是MySQL5.5以后的默认的表存储引擎,最早由Innobase Oy公司开发,该公司已于2006年被Oracle收购。该存储引擎是第一个完整支持ACID事务的MySQL存储引擎(BDB是第一个支持事务的MySQL存储引擎,现在已经停止开发)。其特点是支持行锁设计、支持MVVC(多并发版本控制)、支持外键、提供一致的非锁定读,同时被设计用来最有效地利用以及使用内存和CU...
2019-03-21 16:05:53
1214
原创 单例模式实现方式
单例模式定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点范围:一个虚拟机范围本质:控制实例数目主要实现: 懒汉式(延迟加载)、饿汉式具体实现步骤:构造方法私有化提供获取实例的方法把获取实例的方法变成静态的定义存储实例的属性把这个属性也定义成静态的实现控制实例的创建getInstance()完整的实现二者不同在于如何实现getInstance方法优缺点:时...
2019-03-13 23:31:16
1210
原创 JVM之垃圾收集算法
在C++中垃圾回收是需要程序员显示地进行收集,在java语言中是由JVM进行负责垃圾收集的,以下介绍几种垃圾收集算法的思想。标记-清除算法标记-清除是最基础的算法,就如其名字一样,分为“标记”、“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。其主要的缺点有两个,一个是效率问题,标记和清除两个过程的效率都不高,另一个是空间问题,在标记清除完成后,会产生大量...
2019-03-04 17:06:58
1790
原创 java类加载过程
根据冯.诺依曼定义的计算机模型,任何程序都需要加载到内存才能被CPU执行,同样的java中的.class文件也需要加载到内存才能实例化类。ClassLoader负责加载.calss文件到内存中,加载类时使用的是双亲委派模型,接下来进行详细的介绍类加载过程类加载是一个将.class字节码文件实例化成Class对象并进行相关初始化的过程。java的类加载是一个运行时核心基础模块,主要是在启动之初...
2019-01-27 11:55:36
1871
1
原创 Hibernate与MyBatis的简介与区别
Hibernate与MyBatis的简介与区别为什么会有持久层框架Hibernate简介MyBatis简介两者的区别为什么会有持久层框架在任何项目中都会涉及到数据的处理与存储,尤其是现在互联网大数据时代,数据的重要性不言而喻。随之而来的就是数据库的应用,目前大多数使用的都是关系型数据库。为什么会有持久层框架,我认为原因有以下几点:频繁的使用数据库使得我们需要些许多重复的代码来进行数据库操作...
2018-12-29 09:54:10
2467
原创 学习c3p0连接池的原理与使用总结
原理:为什么要有c3p0?c3p0的作用是什么?在使用JDBC操作数据库时,我们一般有几个基本的步骤(加载驱动、建立连接、创建语句、执行语句、关闭资源),其中建立连接是一个重要的步骤,每操作一次数据库我们都需要获取一个Connection,当数据库操作不是很频繁时,没多大关系,可是一旦高并发的情况下,几千个线程需要获取连接的时候,那么连接的创建将会是一个非常耗时和耗空间的操作,创建的初始化需...
2018-10-12 16:55:43
4232
原创 finally里面的代码一定会执行吗?
情况一:在try和catch块分别加入System.exit(0);finally是不会执行的。(注意:一定是try块和catch块分别加上System.exit(0);少一个都不行,否则finally仍然会被执行)为什么System.exit()有这么强大的力量呢,让我们看一下API中的说明:exit(int status): Terminates the currently running...
2018-10-09 12:41:14
4830
1
原创 采用贪心算法解决分数背包问题
总体思路:采用贪心算法,先将装货物的数组以平均价值由高到低排序好 ,依次将最优的装入背包以下是分数背包问题的java代码解法:
2018-09-20 15:25:57
4583
原创 创建格式化字符串
输出格式化数字可以使用printf()和format()方法 PrintStream类的format()方法一个printStream对象, String类使用静态方法format()返回一个String对象而不是printStream对象。 String类的静态方法format()能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。 如下所示: 结果如下所示:浮点型...
2018-09-12 10:44:04
2134
原创 23种设计模式笔记
设计模式定义 是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。 设计模式通常由模式名称、环境和问题、解决方案、效果几部分组成。 常见的面向对象设计原则 1. 单一职责原则 指的是一个类应该仅有一个引起它变化的原因 2. 开放-关闭原则 指的是一个类应该对扩展开放,对修改关闭。一般也简称开闭原则。 3. 里氏替换原则 指的是子类型必须能够替...
2018-09-10 16:45:04
1960
原创 String基础错误总结
在写Struts2的demo时遇到的问题,在service中登录时判断用户密码是否正确,采用user1.getPassword()==user.getPassword()比较时始终错误, 就算数据库密码和前台页面的密码一样也无法登录,最后测试为user.setPassword(” “)的字符串是采用的一个字符串对象进行赋值,从而得到的答案一直是false。//判断是否存在该用户 ...
2018-09-09 13:58:16
2019
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人