<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Cxf2018的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Cxf2018</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Cxf2018]]></copyright><item><title><![CDATA[Hive3.1.2源码阅读--图总结]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/123758673</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/123758673</guid><author>Cxf2018</author><pubDate>Sat, 26 Mar 2022 16:48:08 +0800</pubDate><description><![CDATA[关于hive源码解读整个流程是参考了寒暄的博客了的，可以过去看一下他的博客
以下图片是整个代码执行的流程图，可以在阅读完源码以后作为一个回顾



]]></description><category></category></item><item><title><![CDATA[Hive3.1.2源码阅读--SQL的解析、编译、优化（二）]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/123756014</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/123756014</guid><author>Cxf2018</author><pubDate>Sat, 26 Mar 2022 16:14:36 +0800</pubDate><description><![CDATA[从前文中可以看到runInternal调用了compile方法，在compile方法我们可以看到执行了以下步骤：
1.1 首先通过ParseUtils.parse将sql解析为抽象的语法树ASTNode
1.2 然后通过sem.analyze(tree, ctx);对解析出来的抽象语法树进行编译和优化
我们先进入ParseUtils.parse中进行查看

 /** Parses the Hive query. */
  public static ASTNode parse(String command.]]></description><category></category></item><item><title><![CDATA[Hive3.1.2源码阅读--SQL的解析、编译、优化（一）]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/123755207</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/123755207</guid><author>Cxf2018</author><pubDate>Sat, 26 Mar 2022 14:51:45 +0800</pubDate><description><![CDATA[由前文可知，真正执行sql的位置是ret = qp.run(cmd).getResponseCode();
ctrl+鼠标左键进入run方法中，发现其中是一个抽象方法

按ctrl+H查看层级，进入Driver中，Driver中对run进行了实现；即真正的处理均在Driver中实现的，而run方法则是这个类的入口

可以发现run方法调用同名的方法，但输入参数多了一个alreadyComplied，该参数表示是否已经编译完成

  @Override

  public CommandProcessorR.]]></description><category></category></item><item><title><![CDATA[Hive3.1.2源码阅读--处理sql语句 processLine--＞processCmd--＞processLocalCmd]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/123626380</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/123626380</guid><author>Cxf2018</author><pubDate>Mon, 21 Mar 2022 08:29:58 +0800</pubDate><description><![CDATA[由上文进入processLine方法中
1.1 该方法用于在特殊情况下可以中止作业的执行
1.2 定义了两种作业中止的方式
① ctrl+c 当连续两次触发 Ctrl+c 作业中断
② kill -2
1.3 HadoopJobExecHelper 这个类中保存了正在运行的hadoop job；通过其方法killRunningJobs杀死所有正在运行的任务

//processLine可以理解为作业上了一道保险，确保如果因为特殊情况需要中止作业的话有结束的方法。
  public int processL.]]></description><category></category></item><item><title><![CDATA[Hive3.1.2源码阅读--提交任务executeDriver]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/123517062</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/123517062</guid><author>Cxf2018</author><pubDate>Wed, 16 Mar 2022 08:05:04 +0800</pubDate><description><![CDATA[由上文可知，客户端的驱动工作是在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.]]></description><category></category></item><item><title><![CDATA[Hive3.1.2源码阅读--程序入口CliDriver]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/123321680</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/123321680</guid><author>Cxf2018</author><pubDate>Wed, 16 Mar 2022 07:40:23 +0800</pubDate><description><![CDATA[根据前言可以看出，第一步是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);
  }


我们先.]]></description><category></category></item><item><title><![CDATA[Hive--前言]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/123317492</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/123317492</guid><author>Cxf2018</author><pubDate>Sun, 06 Mar 2022 21:43:37 +0800</pubDate><description><![CDATA[1.Hive的基本概念
1.1前言
在学习Hive原理之前，你必须对Hadoop有一定的了解并且使用过HQL，否则建议先学习Hadoop。
1.2什么是Hive

Hive是由Facebook开源的用于解决海量结构化日志的数据统计工具。
Hive是一个基于Hadoop的数据仓库工具，可以将结构化数据映射为一张表，并提供类似于Mysql中SQL的功能。
其本质是将HQL转化为一个MapReduce任务，然后在Hadoop集群上执行。


Hive处理的数据存储在HDFS上
Hive分析数据底层是通过MR程序实]]></description><category></category></item><item><title><![CDATA[MapReduce实现sql的原理]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/116228707</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/116228707</guid><author>Cxf2018</author><pubDate>Wed, 28 Apr 2021 10:48:02 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[Hive中SQL语句到MapReduce过程的映射]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/116228685</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/116228685</guid><author>Cxf2018</author><pubDate>Wed, 28 Apr 2021 10:44:24 +0800</pubDate><description><![CDATA[Hive是基于Hadoop的一个数据仓库工具，可以将结构化的数据文件映射为一张表。通过给用户提供的一系列交互接口，接收到用户的指令(SQL)，使用自己的Driver，结合元数据(MetaStore)，将这些指令翻译成MapReduce


HiveSQL被解析器解析为抽象语法树AST
AST经过语义分析转化为Query Block（查询块）
遍历Query Block（查询块）生成Operator Tree（操作树）
优化器优化Operator Tree，合并不必要的操作，减少shuffle数据量
遍历优化]]></description><category></category></item><item><title><![CDATA[Hive调优]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/116228662</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/116228662</guid><author>Cxf2018</author><pubDate>Wed, 28 Apr 2021 10:43:46 +0800</pubDate><description><![CDATA[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);
.]]></description><category></category></item><item><title><![CDATA[Hive存储格式]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/116228612</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/116228612</guid><author>Cxf2018</author><pubDate>Wed, 28 Apr 2021 10:42:55 +0800</pubDate><description><![CDATA[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVrTPBh2-1619577726246)(C:\Users\chenyw\AppData\Roaming\Typora\typora-user-images\image-20210326163202005.png)]


TextFile：（能直接加载数据）

行存储、Gzip压缩，压缩后的文件不支持split 在反序列化过程中，必须逐个字符判断是不是分隔符和行结束符，反序列化开销大；
默认格式，建表时不指定默认为这个格式.]]></description><category></category></item><item><title><![CDATA[Hive窗口函数]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/116228555</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/116228555</guid><author>Cxf2018</author><pubDate>Wed, 28 Apr 2021 10:41:43 +0800</pubDate><description><![CDATA[一、窗口函数
OVER()指定分析函数工作的数据窗口大小，这个数据窗口大小可能会随着行的变而变化


CURRENT ROW：当前行


n PRECEDING：往前n行数据


n FOLLOWING：往后n行数据


UNBOUNDED：起点，UNBOUNDED PRECEDING 表示从前面的起点， UNBOUNDED FOLLOWING表示到后面的终点


LAG(col,n)：往前第n行数据


LEAD(col,n)：往后第n行数据


NTILE(n)：把有序分区中的行分发到指定数据的组中，各]]></description><category></category></item><item><title><![CDATA[HiveSQL转换为MapReduce的过程]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/116228494</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/116228494</guid><author>Cxf2018</author><pubDate>Wed, 28 Apr 2021 10:39:15 +0800</pubDate><description><![CDATA[Hive是基于Hadoop的一个数据仓库工具，可以将结构化的数据文件映射为一张表，并提供类SQL查询功能。



元数据包括：表名、表所属的数据库（默认是default）、表的拥有者、列/分区字段、表的类型（是否是外部表）、表的数据所在目录等；


Hive要访问数据中满足条件的特定值时，需要暴力扫描整个数据





用户接口：Client
CLI(hiveshell)、JDBC（java访问hive）、WEBUI（浏览器访问hive）


元数据：Metastore
元数据包括：表名、表所属的数据库..]]></description><category></category></item><item><title><![CDATA[六、常用的sql语句]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/114293619</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/114293619</guid><author>Cxf2018</author><pubDate>Tue, 02 Mar 2021 20:23:00 +0800</pubDate><description><![CDATA[1.sql语句的分类

DDL：表的创建，删除，修改
DML：数据的插入，删除，修改
DQL：数据的查询
DCL：数据控制语言，grant，revoke

2.主键、外键、候选键、超键

主键：作表的行的惟一标识的候bai选关键字。一个表只有一个主关键字； 主键可以由一个字段，也可以由多个字段组成，分别成为单字段主键或多字段主键
外键：用于关联其他数据表的关系键
候选键：不含有多余属性的超键称为候选键
超键：在数据表中能唯一标识数据行属性的集合超键

3.sql约束

主键约束
非空约束
唯一约束
外键约束]]></description><category></category></item><item><title><![CDATA[五、视图、存储过程与函数、触发器]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/114293607</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/114293607</guid><author>Cxf2018</author><pubDate>Tue, 02 Mar 2021 20:22:13 +0800</pubDate><description><![CDATA[1.视图
1.视图简介
​	基于 SQL 语句的结果集的可视化的虚拟表，视图中的字段就是来自一个或多个数据库中的真实的表中的字段；
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

2.视图的特点
1、简单：因为视图是查询语句执行后返回的已经过滤好的复合条件的结果集，所以使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件。
2、安全：使用视图的用户只能访问他们被允许查询的结果集，对于]]></description><category></category></item><item><title><![CDATA[四、锁]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/114293574</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/114293574</guid><author>Cxf2018</author><pubDate>Tue, 02 Mar 2021 20:20:52 +0800</pubDate><description><![CDATA[1.什么是锁
锁用于控制并发机构，防止其他事务访问指定的资源控制。事务对某个数据库中的资源存取前，先向系统提出，封锁该资源以后获取对该资源的控制权，释放锁之前，其他事务不可以对该资源做出更改。
2.隔离级别和锁的关系
3.锁的类别

按数据操作的类型分类：读锁（共享锁）和写锁（排他锁）
按数据操作的粒度来分：

表锁：开销小，加锁快，并发性差，读锁会阻碍写操作，写锁会阻碍读写操作；
页锁：开销、加锁时间和锁粒度介于表锁和行锁之间，会出现死锁，并发处理能力一般；
行锁：粒度小，冲突概率低，加锁慢，开销大；

]]></description><category></category></item><item><title><![CDATA[三、索引]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/114293561</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/114293561</guid><author>Cxf2018</author><pubDate>Tue, 02 Mar 2021 20:20:10 +0800</pubDate><description><![CDATA[1.什么是索引
索引(Index)是帮助MySQL高效获取数据的数据结构
2.索引的底层数据结构
MySQL中索引是B+树实现的,每个索引都对应一棵B+树。一个深度为3的B+Tree索引可以维护10^3 * 10^3 * 10^3 = 10亿 条记录

非叶子节点不存储data，只存储key（索引值），可增大度
叶子节点不存储指针
顺序访问指针，每个叶子节点都指向下一个叶子节点，提高区间访问的性能

3.索引的优缺点

优点：

创建唯一性索引可以保证每一行数据的唯一性
可以加快检索效率
加速表与表之间的连]]></description><category></category></item><item><title><![CDATA[二、引擎和事务]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/114293537</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/114293537</guid><author>Cxf2018</author><pubDate>Tue, 02 Mar 2021 20:19:39 +0800</pubDate><description><![CDATA[1.引擎
1.InnoDB和MyISAM的区别





** MyISAM**
InnoDB




构成上区别
每个MyISAM在磁盘上存储成三个文件。文件名为表名，扩展名为文件类型。.frm 文件存储表定义； .MYD(MYData) 数据文件的扩展名； .MYI(MYIndex) 索引文件的扩展名。
基于磁盘的资源是InnoDB表空间数据文件和它的日志文件，InnoDB 表的大小只受限于操作系统文件的大小，一般为 2GB


事务处理方面
MyISAM类型的表强调的是性能，其执行速度比InnoDB类]]></description><category></category></item><item><title><![CDATA[一、数据库的范式、约束、格式、类型]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/114293524</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/114293524</guid><author>Cxf2018</author><pubDate>Tue, 02 Mar 2021 20:18:44 +0800</pubDate><description><![CDATA[1.数据库的三大范式
范式：关系型数据库设计时的一些规范原则


第一范式：


数据表中每一列必须使不可拆分的最小单元，保证每一列的原子性；例如地址直接填写湖北省武汉市。。。事不满足第一范式的，因为地址可以才分成省，市，县等单元；


两列的属性相近或者相似或者一样，要合并属性一样的列，减少数据冗余；


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6LkgTZEd-1614687506645)(C:\Users\chenyw\AppData\Roaming\Typora]]></description><category></category></item><item><title><![CDATA[Linux系统的目录结构]]></title><link>https://blog.youkuaiyun.com/Cxf2018/article/details/113339339</link><guid>https://blog.youkuaiyun.com/Cxf2018/article/details/113339339</guid><author>Cxf2018</author><pubDate>Thu, 28 Jan 2021 14:56:59 +0800</pubDate><description><![CDATA[/boot 系统启动区，通常需要100MB
/bin	存放必要的命令
/dev	识别设备目录
/etc	存放系统配置文件
/home 普通用户的宿主目录
/lib	存放必要的运行库
/mnt	存放临时的映射文件系统
/proc	存放存储进程和系统信息
/root		超级用户目录
/sbin	存放系统管理程序
/tmp	存放临时文件
/usr	存放应用程序、命令程序文件、程序库
/var	存放变动数据，如缓存等


...]]></description><category></category></item></channel></rss>