presto
文章平均质量分 70
bigdatar
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
presto源码分析(PartitionedOutputOperator)
addInput方法1 addInput方法 requireNonNull(page, "page is null"); checkState(isBlocked().isDone(), "output is already blocked"); if (page.getPositionCount() == 0) { return;原创 2016-12-27 19:07:05 · 1194 阅读 · 1 评论 -
Presto启动源码分析
启动主流程加载module加载插件启动主流程加载module ImmutableList.Builder<Module> modules = ImmutableList.builder();//不是很明白加载这些module的作用 modules.add( new NodeModule(), new原创 2016-09-10 17:08:39 · 2126 阅读 · 0 评论 -
ide单步调戏presto
1-下载2- windows下编译2-1 pom文件修改2-2 编译2-3 导入到idealij3- 单步调试配置4- 执行调试4-1 文件修改4-2 启动调试4-3 客户端连接4-4 设置断点5 mac或者linux下1-下载git上搜索presto,找到prestodb下的presto,使用git clone到本地2- window...原创 2017-06-03 15:38:57 · 4998 阅读 · 1 评论 -
presto对orc文件的读取
orc文件格式概述读取流程presto对orc文件和parquet文件的读取都进行了优化,那么本篇文章来分析一下都做了哪些优化1 orc文件格式概述每个orc文件都有一个文件footer,文件footer里存储了每个条带(script)的最大值最小值,可以用来过滤script。每个条带又有条带footer,具体作用未知。每个条带内部存储了行组的列存形式。2 读取流程读取流程涉及以下几个读取器的构造原创 2017-08-19 16:03:47 · 3451 阅读 · 1 评论 -
sparksql中的broadcast join和prestodb中的dynamic filter比较
今天在prestodb的qq群里看到有人提到说一个子查询在presto中非常慢:select * from his_data_opt where act_no in (select act_no from id_act_map where id_number ='726067685144725');可以看出,这是一个普通的非相关子查询,如果内部子查询经过过滤条件只剩几条,那么整个查询应该非常完美的在原创 2017-09-12 23:09:10 · 1435 阅读 · 0 评论 -
presto读取kafka数据
1-1-1 配置方法1-1-1 catalog配置1-1-2 schema配置1-2 启动和使用1-3 源码分析1-3-1 metadata1-3-2 任务切分1-3-3 数据读取1-今天分析一下presto的kafka connector的主要原理和源码1-1 配置方法1-1-1 catalog配置connector.name=kafkakafka.nodes=localhost原创 2017-10-22 10:35:00 · 7108 阅读 · 0 评论 -
presto查询处理流程(queryexecution提交)
Query创建Query创建和QueryExecution提交通过调用SqlQueryManager的createQuery方法创建提交查询任务SqlQueueManager的submit方法分析1 队列选择2 判断是否有队列许可3 创建QuenedExecution4 开始执行查询总流程图: 1. Query创建statementResource在接收到查询请求后,会通过调用cr原创 2017-12-02 17:05:49 · 1840 阅读 · 0 评论 -
presto的QueryExecution的start方法
presto的QueryExecution的start方法标签(空格分隔): prestopresto的QueryExecution的start方法在queryExecution中start方法代码如下analyzeQuery方法分析planDistributionplan方法分析Task创建和提交1 在queryExecution中,start方法代码如下: public void原创 2017-12-02 17:10:00 · 1251 阅读 · 0 评论 -
presto源码分析(结果获取)
结果获取入口1.结果获取入口结果获取的入口是在StatementResource中,客户端发送http请求,由getQueryResult方法响应,代码如下: @GET @Path("{queryId}/{token}") @Produces(MediaType.APPLICATION_JSON) public Response getQueryResults(原创 2016-09-11 23:02:13 · 1519 阅读 · 0 评论 -
Presto源码分析(ScanFilterAndProjectOperator)
构造函数createSourceIfNecessary方法getOutput方法RecordPageSource的处理过滤和投影其他pagesource的处理具体参见orc和parquet的分析1.构造函数protected ScanFilterAndProjectOperator( OperatorContext operatorContext,原创 2016-09-17 21:08:24 · 2041 阅读 · 0 评论 -
presto源码分析(hive的分区处理)
hive处理分区时的调用栈1 代码分析hive分区加载修改源码时遇到一个问题,就是对分区的处理,当遇到join查询时,如上篇文章presto join连接时的谓词处理所述,对于某些情况下,如果谓词带or,会吧分区字段当做普通字段处理,不会下推到表扫描处。但是hive是如何处理这种情况的呢?1 hive处理分区时的调用栈1.1 代码分析 HiveTableHandle hiveTableHandl原创 2016-12-04 11:22:23 · 4009 阅读 · 4 评论 -
presto源码分析(join中的谓词下推)
presto中的join1 PredicatePushDown举例分析1 tpch connector2 hive connector1 presto中的joinpreto在进行两表连接查询时,有时会下发谓词,有时不下发,所以对代码进行了跟踪1.1 PredicatePushDown在这个类中,visitJoin方法对join语句的谓词进行了分析,判断是否下推,代码如下:原创 2016-12-04 10:32:20 · 4015 阅读 · 0 评论 -
presto源码分析(hive orc读取)
[TOC]原创 2016-11-28 11:14:23 · 1771 阅读 · 0 评论 -
presot中的code generation
简介源码解析1 主流程代码2 cursor processer编译3 动态加载类名的构造4 在类ClassDefinition中使用各种visit方法构造类的成员变量和方法1 简介presto中使用了ASM进行代码生成,一个主要的用途是对从数据源捞上来的数据进行表达式过滤,这是代码生成的主要应用场景,主要是为了降低进行表达式评估中 JVM 的各种开销,如虚函数调用,分支预测,原始类型的对象原创 2016-11-20 21:23:56 · 1106 阅读 · 0 评论 -
Presto源码分析(和hive执行计划的比较)
聚合操作比较1 presto groupby2 hive groupby1 聚合操作比较1.1 presto groupbyexplain select sum(totalprice),orderpriority from orders group by orderpriority; - Output[_col0, orderpriority] => [sum:double, orderprio原创 2016-10-23 10:12:31 · 3915 阅读 · 0 评论 -
Presto源码分析(hive-rcfile)
hive数据源构造数据迭代读取project操作1 hive数据源构造先来看hive record cursor的构造栈 从图中可以看到,读取hive的数据时,会构造一个ColumnBinaryHiveRecordCursor,这个应该是rcfile这类列式存储专有的读取格式,如果是sequencefile或者textfile,不是这个。具体是哪个呢,可以看看这个cursor的基类是Hiv原创 2016-10-21 22:52:07 · 1181 阅读 · 0 评论 -
presto源码解析(function)
function构造求平均2-1 求平均的调用栈2-2求平均的过程2-2-1 partial阶段1 function构造然后使用这些function构造一个AggregationNode 但是这些函数的具体实现在什么地方,需要进一步确认2 求平均2-1 求平均的调用栈在当前操作符获取到一个page之后,会调用next操作符的addinput方法,该方法会最终调用AverageAggrega原创 2016-10-06 15:53:24 · 2025 阅读 · 0 评论 -
Presto源码解析(HashAggregationOperator)
GroupByHashAggregationBuilder重要成员重要方法1.GroupByHashAggregationBuilder1.重要成员 private final GroupByHash groupByHash;//包括找出group组id,添加新的gooup等 private final List<Aggregator> aggregators;//原创 2016-09-17 20:32:54 · 1175 阅读 · 0 评论 -
Presto源码解析(LocalExecutationPlanner类)
在visitScanFilterAndProject方法中,会使用代码生成产生cursorProcessor和pageProcessor,无法跟踪代码,所以把代码生成相关的代码注释掉,即可使用解释型产生hash的产生方法原创 2016-09-17 19:12:09 · 876 阅读 · 0 评论 -
presto代码解析一
1. TaskExecutor 一个TaskExecutor负责执行多个split的实际操作,首先会构造一个线程池,在线程池中预制多个线程。 public synchronized void start() { checkState(!closed, "TaskExecutor is closed"); for (int i = 0;原创 2016-09-06 15:49:54 · 6300 阅读 · 0 评论 -
presto查询处理流程(queryexecution提交)
Query创建Query创建和QueryExecution提交通过调用SqlQueryManager的createQuery方法创建提交查询任务SqlQueueManager的submit方法分析1 队列选择2 判断是否有队列许可3 创建QuenedExecution4 开始执行查询总流程图: 1. Query创建statementResource在接收到查询请求后,会通过调用cr原创 2017-12-02 17:16:59 · 2392 阅读 · 0 评论
分享