自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 Hive3.1.2源码阅读--图总结

关于hive源码解读整个流程是参考了寒暄的博客了的,可以过去看一下他的博客以下图片是整个代码执行的流程图,可以在阅读完源码以后作为一个回顾

2022-03-26 16:48:08 1948

原创 Hive3.1.2源码阅读--SQL的解析、编译、优化(二)

从前文中可以看到runInternal调用了compile方法,在compile方法我们可以看到执行了以下步骤:1.1 首先通过ParseUtils.parse将sql解析为抽象的语法树ASTNode1.2 然后通过sem.analyze(tree, ctx);对解析出来的抽象语法树进行编译和优化我们先进入ParseUtils.parse中进行查看 /** Parses the Hive query. */ public static ASTNode parse(String command.

2022-03-26 16:14:36 2458

原创 Hive3.1.2源码阅读--SQL的解析、编译、优化(一)

由前文可知,真正执行sql的位置是ret = qp.run(cmd).getResponseCode();ctrl+鼠标左键进入run方法中,发现其中是一个抽象方法按ctrl+H查看层级,进入Driver中,Driver中对run进行了实现;即真正的处理均在Driver中实现的,而run方法则是这个类的入口可以发现run方法调用同名的方法,但输入参数多了一个alreadyComplied,该参数表示是否已经编译完成 @Override public CommandProcessorR.

2022-03-26 14:51:45 3064

原创 Hive3.1.2源码阅读--处理sql语句 processLine-->processCmd-->processLocalCmd

由上文进入processLine方法中1.1 该方法用于在特殊情况下可以中止作业的执行1.2 定义了两种作业中止的方式① ctrl+c 当连续两次触发 Ctrl+c 作业中断② kill -21.3 HadoopJobExecHelper 这个类中保存了正在运行的hadoop job;通过其方法killRunningJobs杀死所有正在运行的任务//processLine可以理解为作业上了一道保险,确保如果因为特殊情况需要中止作业的话有结束的方法。 public int processL.

2022-03-21 08:29:58 1318

原创 Hive3.1.2源码阅读--提交任务executeDriver

由上文可知,客户端的驱动工作是在executeDriver中进行的调用该方法时传入了三个参数:1.1 ss hiveconf用户配置1.2 conf hiveconf默认配置1.3 oproc 用户环境配置ctrl+左键进入该方法中2.1 首先根据前面解析出来的参数,将对应的参数值封装到CliDriver对象中2.2 如果是-e的执行方式,则直接执行后面的sql语句;如果是-h的执行方式,则执行对应的sql脚本文件2.3 如果执行引擎是mapreduce的话,则输出一些告警信息(hive.

2022-03-16 08:05:04 1566

原创 Hive3.1.2源码阅读--程序入口CliDriver

根据前言可以看出,第一步是cli向Driver提交作业,因此我们需要找到代码中的CliDriver类,并搜索出里面的main方法,一切从main开始,如图所示可以看到main方法中创建了一个CliDriver对象,然后调用了他的run方法 public static void main(String[] args) throws Exception { int ret = new CliDriver().run(args); System.exit(ret); }我们先.

2022-03-16 07:40:23 1905

原创 Hive--前言

1.Hive的基本概念1.1前言在学习Hive原理之前,你必须对Hadoop有一定的了解并且使用过HQL,否则建议先学习Hadoop。1.2什么是HiveHive是由Facebook开源的用于解决海量结构化日志的数据统计工具。Hive是一个基于Hadoop的数据仓库工具,可以将结构化数据映射为一张表,并提供类似于Mysql中SQL的功能。其本质是将HQL转化为一个MapReduce任务,然后在Hadoop集群上执行。Hive处理的数据存储在HDFS上Hive分析数据底层是通过MR程序实

2022-03-06 21:43:37 1726

原创 MapReduce实现sql的原理

1.join的实现原理select u.name, o.orderid from order o join user u on o.uid = u.uid;在map阶段的输出中给每个value一个tag,用于区分数据来源,在shuffle过程将具有相同key的数据合并在一起,在reduce阶段对key相同的不同来源的数据进行join。2.group by的实现原理select rank, isonline, count(*) from city group by rank, isonline

2021-04-28 10:48:02 430

原创 Hive中SQL语句到MapReduce过程的映射

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表。通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduceHiveSQL被解析器解析为抽象语法树ASTAST经过语义分析转化为Query Block(查询块)遍历Query Block(查询块)生成Operator Tree(操作树)优化器优化Operator Tree,合并不必要的操作,减少shuffle数据量遍历优化

2021-04-28 10:44:24 235

原创 Hive调优

where条件优化优化前(关系数据库不用考虑会自动优化):select m.cid,u.id from order m join customer u on( m.cid =u.id )where m.dt='20180808';优化后(where条件在map端执行而不是在reduce端执行):select m.cid,u.id from (select * from order where dt='20180818') m join customer u on( m.cid =u.id);.

2021-04-28 10:43:46 72

原创 Hive存储格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVrTPBh2-1619577726246)(C:\Users\chenyw\AppData\Roaming\Typora\typora-user-images\image-20210326163202005.png)]TextFile:(能直接加载数据)行存储、Gzip压缩,压缩后的文件不支持split 在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,反序列化开销大;默认格式,建表时不指定默认为这个格式.

2021-04-28 10:42:55 450 1

原创 Hive窗口函数

一、窗口函数OVER()指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化CURRENT ROW:当前行n PRECEDING:往前n行数据n FOLLOWING:往后n行数据UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING表示到后面的终点LAG(col,n):往前第n行数据LEAD(col,n):往后第n行数据NTILE(n):把有序分区中的行分发到指定数据的组中,各

2021-04-28 10:41:43 215

原创 HiveSQL转换为MapReduce的过程

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据用户接口:ClientCLI(hiveshell)、JDBC(java访问hive)、WEBUI(浏览器访问hive)元数据:Metastore元数据包括:表名、表所属的数据库..

2021-04-28 10:39:15 893

原创 六、常用的sql语句

1.sql语句的分类DDL:表的创建,删除,修改DML:数据的插入,删除,修改DQL:数据的查询DCL:数据控制语言,grant,revoke2.主键、外键、候选键、超键主键:作表的行的惟一标识的候bai选关键字。一个表只有一个主关键字; 主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键外键:用于关联其他数据表的关系键候选键:不含有多余属性的超键称为候选键超键:在数据表中能唯一标识数据行属性的集合超键3.sql约束主键约束非空约束唯一约束外键约束

2021-03-02 20:23:00 144

原创 五、视图、存储过程与函数、触发器

1.视图1.视图简介​ 基于 SQL 语句的结果集的可视化的虚拟表,视图中的字段就是来自一个或多个数据库中的真实的表中的字段;CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition2.视图的特点1、简单:因为视图是查询语句执行后返回的已经过滤好的复合条件的结果集,所以使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件。2、安全:使用视图的用户只能访问他们被允许查询的结果集,对于

2021-03-02 20:22:13 158

原创 四、锁

1.什么是锁锁用于控制并发机构,防止其他事务访问指定的资源控制。事务对某个数据库中的资源存取前,先向系统提出,封锁该资源以后获取对该资源的控制权,释放锁之前,其他事务不可以对该资源做出更改。2.隔离级别和锁的关系3.锁的类别按数据操作的类型分类:读锁(共享锁)和写锁(排他锁)按数据操作的粒度来分:表锁:开销小,加锁快,并发性差,读锁会阻碍写操作,写锁会阻碍读写操作;页锁:开销、加锁时间和锁粒度介于表锁和行锁之间,会出现死锁,并发处理能力一般;行锁:粒度小,冲突概率低,加锁慢,开销大;

2021-03-02 20:20:52 81

原创 三、索引

1.什么是索引索引(Index)是帮助MySQL高效获取数据的数据结构2.索引的底层数据结构MySQL中索引是B+树实现的,每个索引都对应一棵B+树。一个深度为3的B+Tree索引可以维护10^3 * 10^3 * 10^3 = 10亿 条记录非叶子节点不存储data,只存储key(索引值),可增大度叶子节点不存储指针顺序访问指针,每个叶子节点都指向下一个叶子节点,提高区间访问的性能3.索引的优缺点优点:创建唯一性索引可以保证每一行数据的唯一性可以加快检索效率加速表与表之间的连

2021-03-02 20:20:10 99

原创 二、引擎和事务

1.引擎1.InnoDB和MyISAM的区别** MyISAM**InnoDB构成上区别每个MyISAM在磁盘上存储成三个文件。文件名为表名,扩展名为文件类型。.frm 文件存储表定义; .MYD(MYData) 数据文件的扩展名; .MYI(MYIndex) 索引文件的扩展名。基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB事务处理方面MyISAM类型的表强调的是性能,其执行速度比InnoDB类

2021-03-02 20:19:39 82

原创 一、数据库的范式、约束、格式、类型

1.数据库的三大范式范式:关系型数据库设计时的一些规范原则第一范式:数据表中每一列必须使不可拆分的最小单元,保证每一列的原子性;例如地址直接填写湖北省武汉市。。。事不满足第一范式的,因为地址可以才分成省,市,县等单元;两列的属性相近或者相似或者一样,要合并属性一样的列,减少数据冗余;[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6LkgTZEd-1614687506645)(C:\Users\chenyw\AppData\Roaming\Typora

2021-03-02 20:18:44 284

原创 Linux系统的目录结构

/boot 系统启动区,通常需要100MB/bin 存放必要的命令/dev 识别设备目录/etc 存放系统配置文件/home 普通用户的宿主目录/lib 存放必要的运行库/mnt 存放临时的映射文件系统/proc 存放存储进程和系统信息/root 超级用户目录/sbin 存放系统管理程序/tmp 存放临时文件/usr 存放应用程序、命令程序文件、程序库/var 存放变动数据,如缓存等...

2021-01-28 14:56:59 69

原创 shell脚本批量删除多张Hive表的历史分区

#!/bin/bashtoday_date=`date -d "-3 day" +%Y%m%d`#变量中存储的是3天前的日期tables=(cat $1)for table in ${tables[@]}doecho $tablehive -e "alter table 数据库名.$table drop if exists partition(d<'$today_date')"done

2021-01-26 15:26:24 920

原创 数仓分层架构

详解地址

2021-01-25 09:04:49 82

原创 Class<T>和 Class<?>类型 有什么区别

Class和 Class<?>类型 有什么区别

2020-11-21 11:45:27 179

原创 Hadoop系列——Yarn上作业的提交流程

提交流程作业提交Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。Client向ResourceManager申请一个作业id。RM给Client返回资源提交的路径和作业id。Client将jar包,切片信息,xml配置文件提交到指定路径。Client提交完成后向MR申请运行mrApplicationMaster。作业初始化RM收到Client的请求以后,将job转换成一个Task,提交到任务队列中。某一个空闲的NodeM.

2020-11-20 10:31:12 405

原创 泛型中占位符T和?

转载

2020-11-17 10:06:23 302

原创 Mysql 中 MyISAM 和 InnoDB 的区别

一、区别InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;InnoDB 最小的锁粒度是行锁,MyISA

2020-11-16 21:22:35 182

原创 MySQL的索引

1.为什么需要索引结构索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。2.MySQL索引的优缺点优点:所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引,大大提高了数据的查询速度。缺点:创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增

2020-11-12 09:48:55 55

原创 剑指 Offer 13. 机器人的运动范围——广度优先搜索、递推

一、题目地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?二、题解1——递归实现向四个方向搜索class Solution { publ

2020-11-09 21:48:50 86

原创 Java中Native关键字的作用

懒得写了,看原作者文章吧Java中Native关键字的作用

2020-11-09 19:57:25 333

原创 图——Bellman-Ford算法的队列优化

对于其原理还不是太懂。package graph.OptimumBellmanFord;import java.util.Scanner;public class OptimumBellmanFord { public static int Max_Value = 100000; public static void main(String[] args) { Scanner scanner = new Scanner(System.in);

2020-11-06 19:06:18 78

原创 图——Bellman-Ford算法——求解单源最短路径

本算法的主要实现了给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其显著特点是可以求取含负权图的单源最短路径。Bellman-Ford算法的主要思想是:初始化最短路径的结果表shortest[]循环n-1次,遍历所有边进行松弛计算(判断shortest[v]>shortest[u]+w(u,v)判断是否有负权值回路(以求得结果后,上述判断条件依然成立,则说明有负权值回路)package graph.Bellman_FordAlgorithm;i.

2020-11-06 14:21:26 256

原创 图——Folyd算法——多源最短路径,可以解决负权值问题

该算法的主要思想是:利用动态绘规划的思想寻找给定的加权图中多源点之间的最短路径。每一次找到更小的路径都会更新在方阵中。package graph.FloydAlgorithm;public class Floyd { public static void main(String[] args) { int[][] matrix = { {0,-1,3,-1}, {2,0,-1,-1},

2020-11-06 10:48:42 1784

原创 图——Dijstra算法——求解最短路径

本算法的主要思想是:每一次找出源节点到各节点的路径长,取出其中最短的一个,此时到达该节点没有其他最短路径了,然后做上标记,防止下一次访问。找到该路径以后,再更新通过当前节点跳往其他节点的路径,但不标记。直到找到所有最短路径长。package graph.DijstraAlgorithm;import java.util.Scanner;public class DijstraAlgorithm { public static int Max_Value = 100000;//不能设

2020-11-06 09:50:29 122

原创 Scala——六、对象

本章要点:用对象作为单例或存放工具方法类可以拥有一个同名的伴生对象对象可以扩展类和特质对象的apply方法通常用来构造伴生类的新实例如果不想显式定义main方法,可以扩展App特质的对象可以通过扩展Enumeration对象来实现枚举1.单例对象Scala没有静态方法或静态字段,用object语法结果来达到同样的目的。object Accounts{ private var lastNumber = 0 def newUniqueNumber() = {lastNumber +=

2020-11-05 13:37:33 68

原创 Spark系列——缓存(cache/persist)与检查点(checkpoint)以及二者的对比

一、缓存cache和persist是RDD的两个API,cache底层调用的就是persist,区别在于cache不能指定缓存方式,只能缓存在内存中,但是persist可以指定缓存方式,比如:缓存在内存中、内存和磁盘并序列化等。通过RDD的缓存,后续可以对此RDD或者基于此RDD衍生出的其他RDD处理重用这些缓存的数据集。二、checkpoint本质上是将RDD写入磁盘做检查点(通常是checkpint到HDFS上)。在生产环境中,往往在RDD上会执行各种操作,使得DAG图会拉的非常长,为防止中间某个

2020-11-03 21:05:59 655

原创 Scala——五、类

1.简单类和无参方法2.带getter和setter的属性3.只带getter的属性4.对象私有字段5.Bean属性6.辅助构造器7.主构造器8.嵌套类

2020-11-03 19:25:47 115

原创 Hadoop系列——MapRdecude工作流程;MapTask,Shuffle,ReduceTask过程详解

一、MapTask过程MapTask阶段主要是分为read-Map-Collect-Spill四个过程Read阶段:MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个Key/Value对。Map阶段:将解析出来的Key-value交给map()方法进行处理,产生新的Key-Value对。Collect阶段:map()处理完数据以后会调用OutputCollector.collect()输出结果。该函数,将这些键值对进行分区,然后写入环形缓冲区。Spi

2020-11-03 09:57:07 324

原创 Spark系列——RDD的宽依赖和窄依赖,以及Spark的运行架构,运行流程,框架的特点

一、窄依赖(narrow dependency)窄依赖是指:每一个父RDD的一个partition最多被子RDD的一个partition所使用,例如:map,filter,union等操作会产生窄依赖,相当于父母和独生子女的关系二、宽依赖(shuffle denpendency)宽依赖是指:每一个父RDD的一个partition多个子RDD的一个partition所使用,每一个父RDD的一个partition有可能传输部份数据到子RDD的每一个partition中,子RDD的多个partition依赖

2020-11-01 21:08:15 1021

原创 Hadoop系列——HDFS相关架构,面试题,读数据/写数据/SecondaryNameNode的工作机制

一、HDFS文件块的大小HDFS中的文件在物理上是分块存储(Block),块的大小可以通过参数配置,默认是128M。HDFS文件块设置的太小会增加寻址时间;设置的太大会导致磁盘传输数据的时间远远大于定位块开始位置的时间;HDFS块大小的设置主要取决于磁盘的传输速率。二、HDFS写数据流程客户端通过DFS向NamNode请求上传文件,NameNode检查文件是否存在,文件的父目录是否存在。NameNode返回Cli可以上传。Cli请求上传第一个数据块。NameNode返回3个DataNode节

2020-11-01 15:58:47 143

原创 Hadoop系列——Hadoop简介

一、什么是HadoopHadoop是一个对大量数据进行分布式处理的软件框架。以一种高效、可靠、可伸缩的方式进行数据处理。主要包括三个部份:Hdfs,MapReduce,Yarn。广义上,Hadoop是指一个生态圈,包含如HBase,Hive,Zookeeper,Spark,Kafka,Flume等软件二、什么是HdfsHDFS全称:Hadop Distribute FileSystem以流式数据访问模式来存储超大文件,运行在硬件集群上的文件系统。HDFS的三种节点:NameNode,Seconda

2020-11-01 14:59:24 643

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除