首页
学习
活动
专区
工具
TVP
发布

skyyws的技术专栏

专注大数据领域的技术研究
专栏成员
67
文章
68885
阅读量
13
订阅数
Calcite parser config介绍
Calcite针对SQL parse提供了很多的配置项,可以针对不同的SQL方言进行解析。相关的配置项都存储在SqlParser.Config这个结构中,常见的用法如下所示:
skyyws
2022-11-21
2.2K0
【Presto Profile系列】Timeline使用
我们在Presto页面,可以通过“Splits”标签页查看整个查询的Timeline信息,如下所示:
skyyws
2022-09-01
6960
【Calcite源码学习】SqlNode方言转换
我们知道,Calcite一般会有四个阶段:parse、validate、optimize和execute。其中,在parse和validate阶段,会生成一个parse tree,树中的节点都是SqlNode的类型。在optimize节点,Calcite会将parse tree转换为RelNode,同时进行一些优化,这属于logical plan。最终在execute阶段,将logical plan转换为物理执行计划来执行。Calcite目前提供了一些方言转换的功能,可以将SqlNode和RelNode转成指定计算引擎的SQL方言,例如Mysql、Presto等,相关的方言转换类如下所示:
skyyws
2022-05-20
3.6K1
【Presto源码学习】ResourceGroups调度策略
Presto目前支持对resource group配置不同的调度策略,来实现不同类型的调度,参考官方的文档:Resource Groups,相关内容如下所示:
skyyws
2022-05-20
7260
【Trino源码学习】Trino源码剖析之catalog加载
我们在上篇文章【Trino源码学习】Trino源码剖析之plugin加载中,跟着代码一步步分析,梳理了trino在加载plugin的过程中,主要做了哪些事情。归纳总结起来就是,创建了每个plugin对应的PluginClassLoader以及InternalConnectorFactory,这个InternalConnectorFactory封装了每个plugin的ConnectorFactory。本文我们将继续跟着代码进行分析,看看trino在加载catalog的时候又做了哪些事情。
skyyws
2022-05-20
1.4K0
【Trino源码学习】Trino源码剖析之plugin加载
最近在研究Trino的相关代码,发现用到了大量的函数式编程和lambda表达式等java8的新特性。刚开始接触门槛比较高,代码阅读也比较费劲,因此希望借这个系列,对自己的代码学习做一些记录,能够帮助到一些刚入门的同学。本文将会跟着代码,一步一步分析Trino的plugin加载到底做了哪些事情,当前代码分析都是基于trino的maste分支(最新的commit记录为:6a48c4352dfc6835997c43d7d5f7a599c0a712a5)。
skyyws
2022-05-20
1.3K0
Trino lambda表达式使用学习小结
Trino中使用了很多的lambda表达式的写法,这点与Impala非常不同。这里简单学习了一些场景下的lambda表达式的用法。具体的例子如下:
skyyws
2022-05-20
4130
Trino连接ClickHouse代码浅析
最近在调研Trino和Clickhouse的打通问题,简单研究了下Trino对于CH的适配,这里简单总结下。详细的代码提交参见这个commit:Add ClickHouse Connector。
skyyws
2022-05-20
9900
Impala metrics之statestore-subscriber
本文主要梳理一下Impala的“statestore-subscriber”相关的metrics,这类metrics主要是在catalog和impalad上存在。目前主要分为两种类型,下面来简单看一下。
skyyws
2022-05-20
4430
Impala metrics详解之Jvm篇
Impala的web页面提供了非常丰富的信息,其中就包括各种metrics信息。这些metrics非常多,但是官方也没有专门文档解释,所以有时候也看不明白是什么意思。笔者在早期的文章 Impala metrics参数介绍(一)介绍了一些关于admission controller相关的metrics。时隔两年多,今天将跟大家一起来学习下Jvm相关的metrics信息。
skyyws
2022-05-20
8690
Impala与内嵌Jvm之间的交互
了解过Impala的同学都知道,Impala的节点分为BE和FE两个模块,分别是由C++和Java编写的。对于impalad而言,FE端主要是进行SQL的解析,具体的执行则是在BE端进行的;而对于catalogd而言,主要的元数据操作都是在FE端通过调用hms的API执行的,BE端主要是进行一些RPC通信。关于这两个模块之间是如何交互的,相关的资料比较少。因此,本文笔者就和大家一起学习下,Impala的BE和FE之间是如何通过JNI进行交互的。
skyyws
2022-05-20
7490
LocalCatalog详解之Catalogd处理流程
我们在LocalCatalog详解之Coordinator处理流程这篇文章中介绍了,在LocalCatalog模式下,coordinator(以下简称c节点)的相关流程。在此模式下,catalogd的处理流程也与之前的会有所不同。本文笔者就跟大家一起来学习下。
skyyws
2022-05-20
3610
LocalCatalog详解之Coordinator处理流程
用过Impala的同学都知道,Impala本身引入了一个catalogd服务,来缓存hms和nn中的一些元数据,例如表的信息、文件信息、block信息等。同时,这份元数据会通过statestored广播到所有的coordinator节点(以下简称c节点),executor节点不需要缓存元数据。这种设计可以极大的提升查询性能,每次SQL解析的时候,不需要再跟hms/nn进行交互,所有的元数据操作都通过catalogd来进行,c节点只需要周期性地从statestored获取元数据信息进行同步即可。 但是这种设计也带来了一定的问题,当元数据量非常大的时候,catalogd本身就成为了瓶颈,会出现各种各样的问题。为此,社区从3.x版本就开始开发了一种新的catalog模式,称为LocalCatalog模式,也可以叫“Fetch-on-demand”。关于这个LocalCatalog模式的相关讨论,可以参考社区JIRA:IMPALA-7127,里面也有设计文档,这里就不再展开说明。本文主要会从两个常见的场景出发,结合代码,来跟大家一起学习下LocalCatalog模式下,c节点的一些处理逻辑。由于LocalCatalog模式涉及到的内容非常多,因此本文可以无法一一覆盖,敬请谅解。
skyyws
2022-05-20
2310
一文读懂Impala统计信息相关知识
在Impala 4.0源码解析之BROADCAST/SHUFFLE代价计算这篇文章中我们提到,Impala在对BROADCAST/SHUFFLE进行代价计算的时候,需要用到表的统计信息。关于Impala的统计信息,网上也有一些资料介绍,但是大多不全。本文将结合官方文档,从内容、计算等各方面尽可能详细地介绍下Impala统计信息的相关知识。
skyyws
2022-05-20
1.4K0
Impala 4.0源码解析之BROADCAST/SHUFFLE代价计算
Impala的hash join目前有两种方式:broadcast和shuffle。关于这两种方式的区别,网上也有很多相关的资料介绍。我们这里来简单介绍下,broadcast join适合大表join小表的场景,首先将小表先构建hash table,然后发送到大表所在全部节点上。此时每个节点上都有大表的一部分数据和整个小表的数据。整个流程如下所示:
skyyws
2022-05-20
9470
Impala 3.4 SQL查询之ScanRange流程归纳(六)
我们在前面几篇文章,从代码处理层面,详细分析了Impala的ScanRange相关知识,包括FE端的处理、parquet文件的处理、IO thread的处理等,涉及到的内容比较多。本文笔者将前几篇文章的内容做了一个汇总,整体看一下Impala的整个ScanRange的处理流程。需要注意的是,我们当前的分析都是基于parquet格式、remote HDFS的场景。我们将整个处理过程汇总到了一张流程图上,如下所示:
skyyws
2022-05-20
2230
Impala 3.4 SQL查询之ScanRange详解(五)
在上篇文章中,我们介绍了PerDiskState的unstarted_scan_ranges_这个队列的更新逻辑,主要就是成员的入队和出队。总结下来就是:HdfsScanNode会获取每个文件的footer ScanRange,然后入队;IO thread会通过RequestContext获取对应的PerDiskState,然后出队,并设置到next_scan_range_to_start_成员,同时入队到RequestContext的ready_to_start_ranges_队列。IO thead并不会直接从unstarted_scan_ranges_获取对象,进行scan操作,而是会从另外一个队列in_flight_ranges_中获取对象,返回并进行后续的操作。在本文中,我们同样会结合代码,一起学习下,in_flight_ranges_队列是如何更新的。
skyyws
2022-05-20
5410
Impala 3.4 SQL查询之ScanRange详解(四)
在上篇文章中,我们主要介绍了ScanRange的构造,以及在FE和BE端的一些处理流程。同时,我们还介绍了IO thead处理模型中一个比较重要的对象RequestContext::PerDiskState,以及部分成员变量的含义,在本篇文章中,我们将介绍其中一个比较重要的成员:unstarted_scan_ranges_。
skyyws
2022-05-20
3650
Impala 3.4 SQL查询之ScanRange详解(三)
我们在本系列的前两篇文章中,简单介绍了SQL查询的整个流程以及重写的相关知识。在接下来的这几篇中,会跟大家一起详细学习ScanRange的知识。由于涉及到的内容非常多,因此会分成几篇来讲解,主要会涉及到HDFS_SCAN_NODE、IO thread等知识。由于现在相关的文档比较少,这些文章都是笔者根据代码和实际调试结果整理出来的,如有错误,欢迎指正。默认情况下,本文涉及到的测试表都是HDFS上的parquet表,并且是以天为分区。
skyyws
2022-05-20
5140
Impala HDFS_SCAN_NODE之AverageHdfsReadThreadConcurrency
在Impala的HDFS_SCAN_NODE中有一个counter,叫AverageHdfsReadThreadConcurrency,其相关解释如下所示:
skyyws
2022-05-20
3670
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档