HIVE源码学习-hivehook尝试表血缘与字段血缘的解析

前言 hive在中间执行过程中留下不少钩子可以供开发者开发拓展功能,大致有如下几个 driver run的时候 执行计划semanticAnalyze前后 查询放入job之前 exec前后 执行失败时 下面引用一份完整的hive中hook的流程,包括相应的配置项。 Dri......

基于antlr4实现hiveSQL的解析[表血缘和字段血缘]

前言 关于 HiveSQL 血缘,一般表示的就是 hive 数据仓库中所有表和字段的来源流向关系。它的解析是十分必要的,一方面数仓建表的时候有时只会定义 SQL 任务不会特别关注到任务之间的关系,对于查看的数据也不容易追溯两层以上或以下的数据来源和去向。 有了血缘就可以对离线任务执行的先后关系作出一定规范,可以做数据来源链路的分析,数据的上卷下钻,数仓直接的数据建模等。 实现思路 一般来说比......

HIVE源码学习-执行计划Operators和优化Optimizers

逻辑执行 首先看下之前的总体处理流程 Hive SQL - (Parser) -> AST - (Semantic Analyze) -> QB - (Logical Plan) -> Operator Tree - (Physical Plan) -> Task Tree - (Physical Optim) -> Task Tree主要有三大块,......

HIVE源码学习--实现一个自定义的HIVE序列化与反序列化器

前言 hive本身并不存储数据,它用的是hdfs上存储的文件,在与hdfs的文件交互读取和写入的时候需要用到序列化, hive有一个serde模块,其中就有很多的序列化器和反序列化器, 序列化(serialize)是将导入的数据转成hadoop的Writable格式 反序列化(deserialize)是select时将hadoop上的数据导入到内存object 当然也有一部分不放在ser......

基于antlr4实现HQL的解析[格式化]

前言 对于一般的网页上sql查询工具都会有一个功能【格式化】,对于hql的格式化市面上没有很好的直接使用的工具。 这边基于antlr4对hql的解析手动实现一个格式化的功能。 设计思路 对于一般比较固定的语句如create,show,drop,alter等采用直接对拿到节点并带格式用字符串拼接。 对于最复杂的select,因为其中包含很多嵌套,因此这边基本的想法有两种: 因为visit树节......

博客新增两个功能模块

入口 在主页侧边栏的FRIENDS模块中, 新增了我的钢琴屋 和 我的阅读室 下面分别来阐述 我的钢琴屋 这个是挂在github上的一个静态页面,github地址为 https://github.com/webgjc/tan8【如侵权可下线】 主要功能为练习和收听钢琴曲 实现 其中包括一个flash播放器和一个数据列表 flash播放器主要参考某琴吧的实现,并引用了他们的文件存储直接获取......

HIVE源码学习--从CliDriver跟踪整个执行流程

前言 对接和使用hive的上层组件也很多了,hiveserver2,beeline,metastore,hivehook等,但没好好调试过hive,计划进行一次比较狠的补课,让自己对hive内部的很多实现有一个基础的认识,同时自定义实现一些模块。 本次是hive源码层的调试与实验的开坑,初步想象的过程有:hive执行大致全流程调试,序列化反序列化,执行计划,metastore,hivehoo......

本地hadoop与hive的单节点部署和开发调试[mac]

预备 这边部署的 hadoop版本为 2.7.3 hive版本为 1.2.1 注:src为源码包 Hadoop搭建 解压,进入配置目录 tar zxvf hadoop-2.7.3.tar.gz cd hadoop-2.7.3/etc/hadoop 修改配置 core-site.xml,hdfs-site.xml, mapred-site.xml ......

hiveSQL执行日志的收集

前言 一般的hive客户端都没有详细的执行日志,要了解执行情况得去yarn看,就比较麻烦,本次考虑的是在hive客户端获取到全部的执行日志,来源主要参考hadoop-yarn-client的内部实现。 使用引擎为tez,在异步执行hql时,获取到的日志中包括applicationId,考虑通过这个去获取到全部的执行日志,包括进度和map/reduce信息。 实现 jdbc部分日志 获取jdb......

hiveserver2与hiveSQL的执行

前言 对于hql的执行,可以在集群中启动hive的命令行,也可以使用beeline或其他客户端用jdbc连接Hiveserver2发送sql,中间传输用的是thrift协议。 这边演示python的实现和java的实现 实现 python python使用pyhive或者impyla库都可以。使用方式也都类似,这边以pyhive举例。 from pyhive......