自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(290)
  • 资源 (1)
  • 收藏
  • 关注

原创 直接使用Hive的Driver运行Fetch任务

前言大家都知道Hive的Fetch是常用的优化手段,但都是通过HiveCli或者HiveServer2执行的Fetch任务。这种方式足够一般的使用,但不利于集成到自己的项目。下面通过学习HiveFetch的单元测试来直接使用Driver运行Fetch任务。单测在 org.apache.hadoop.hive.ql.exec的TestOperators中有FetchOperator的单元测试@Test public void testFetchOperatorContext() throws Ex

2021-09-19 18:04:02 317

原创 Calcite中的常用工具类介绍

文章目录前言ParseSqlParserUtilValidateSqlValidatorUtilSqlTypeUtilOptimizeRelOptUtilRelMdUtilRelToSqlRelToSqlConverterUtil其他UtilConversionUtil前言工欲善其事,必先利其器,借助已有的一些工具类可以提高使用Calcite进行开发的效率。我们知道Calcite将SQL转换可以分为下面几个阶段:Parse->Validate->Optimize当进行SQL翻译的时候,还

2021-09-19 18:03:48 559

原创 Calcite优化规则之ProjectAggregateMergeRule

文章目录前言分析命中条件单元测试testProjectAggregateMergeNoOptestProjectAggregateMergeSum0testProjectAggregateMerge前言Calcite专注于SQL优化,有着大量的优化规则。本文以Calcite的1.27.0版本为例,介绍它的各种优化规则。分析命中条件这是触发ProjectAggregateMergeRule最典型的特征:Project的输入有一个Aggregate单元测试在RelOptRulesTest.jav

2021-08-29 17:44:03 403

原创 Calcite新增SQL语法步骤总结

在Parser.jj(扫描器)、SqlParserTest.java、reference.md中新增关键字在Parser.jj描述解析器(需要遵循JavaCC的规范),这个类主要有三个功能作为解析使用的SQL statement描述关键字的使用返回Java的SqlNode编写Java实现对应的SqlNode,这个类也有三个功能:记录Operand(如果有的话)和OPERATOR实现转SQL的unparse实现validate(通常会将具体逻辑写在SqlValidatorTest.

2021-08-29 17:42:46 497

原创 Presto新增SQL语法步骤总结

Presto使用ANTLR4解析SQL,ANTLR4新增语法一般为下三步:spark也使用ANTLR4解析SQL,这三步都一样在SqlBase,g4添加文法重新生成SqlBaseLexer、SqlBaseParser、SqlBaseVisitor和SqlBaseBaseVisitor在AstBuilder重写相应的方法接下来就是Presto所需要的步骤创建相应的Node可以直接继承Presto已经实现了的node,比如statement实现AstVisitor相应的visit

2021-08-29 17:37:44 808

原创 使用Coral将HiveView转为PrestoSQL

文章目录前言环境准备使用Coral总结前言随着技术的发展,Hive的计算逐渐被新生的引擎Spark、Presto这些取代。但是数据仓库元数据的管理依旧是交给HiveMetaStore,一些留存的View可能也需要使用新的引擎执行。Spark对Hive的语法兼容较好,不用担心ViewSQL的转换问题;Presto则严格地遵循ANSI标准,对Hive的兼容较差。于是有了一些项目将Hive的SQL转为其他引擎的SQL,Coral就是其中之一。环境准备已经有hive环境的可以直接使用自己的Hive环境

2021-08-21 16:28:19 1113 6

原创 git fork开源仓库后开发的概念和小技巧

前言最近参与了某个开源项目,作为github小白,遇到了一些坑记录了下来。本文比较适合有一定git经验,但未参与过开源项目的同学~概念远程仓库自己使用git的时候,总是会写一个origin。但一直不太明白为什么要有这个origin,直到需要参与开源项目了才理解。git remote -v可以查看远程仓库origin对应的地址...

2021-08-21 14:05:18 560

原创 Maven解决duplicate class问题

修改依赖使用exclusion在引入的时候排除掉需要注意的是,并不是在报错的依赖排除,而是要用mvn dependecy:tree分析找到冲入的依赖修改检测规则在duplicate-finder-maven-plugin插件的配置加入如下的选项忽略类路径<configuration> <ignoredClassPatterns> <ignoredClassPattern>javax.*$</ignoredClassPa

2021-08-21 10:18:39 1912

原创 Arthas入门笔记

文章目录下载简单演示启动被监测进程启动arthas下载点击下载最新版,解压后的文如下可以通过./as.sh或者java -jar arthas-boot.jar启动简单演示刚刚下载的文件中有一个math-game.jar,这是官方提供的一个程序:每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果启动被监测进程java -jar math-game.jar启动arthasjava -jar arthas-boot.jararthas已经探测到了math-game.jar进程,

2021-08-21 10:17:50 81

原创 Debug分析Hive UDF的执行流程以及简单示例

文章目录前言原理示例前言通常编写HQL能方便的使用Hive的UDF,但是对其原理还不太熟悉,于是debug分析了一下它是如何执行的。原理以select concat('hello', 'world');为例,先根据functionName获得FunctionInfo根据参数类型初始化UDF,在调用evaluate进行祭计算示例 @Test public void testGenericUdf() { String[] dataTypes = new String[]{"St

2021-08-15 17:15:40 976

原创 Hive Fetch的原理

JIRAhttps://issues.apache.org/jira/browse/HIVE-2925https://issues.apache.org/jira/secure/attachment/12541300/HIVE-2925.3.patch.txtFilehttps://github.com/apache/hive/blob/7b3ecf617a6d46f48a3b6f77e0339fd4ad95a420/ql/src/java/org/apache/hadoop/hive/ql/pla

2021-08-15 16:13:41 520

原创 简单四步用idea快速debug hive

准备hivegit clone https://github.com/big-data-europe/docker-hive.git端口转发5005:5005启动hivehive --debug port=5005启动idea选择attach模式

2021-08-15 09:10:47 251

原创 HiveUDF的evaluate方法使用分析

文章目录前言分析创建arguments获得evaluateNumericOpMethodResolverDefaultUDFMethodResolverComparisonOpMethodResolver调用evaluate前言工作中需要自己加载并使用Hive的UDF,于是学习了一下Hive的加载过程。分析创建argumentsorg.apache.hadoop.hive.serde2.objectinspector包下面有很多类包装不同类型的参数,在evaluate的时候需要使用获得eval

2021-08-07 14:12:54 1904 3

原创 Mac下用Java调用c/c++的方法

文章目录前言调用思路具体步骤JavaC/C++前言向量化执行逐渐成为了列存数据库优化的热门方向,而Java对向量化执行的支持并不如c++,如果要想使用的话,通过JNI来实现可能更加合适。调用思路Java编写native的java方法并编译为class文件编译为.h的头文件C/C++使用C/C++实现本地方法将本地方法生成动态链接库export JAVA_HOME=/usr/libexec/java_homegcc -I $JAVA_HOME/include -fPIC

2021-08-07 14:11:45 327

原创 Presto为REST API增加config

文章目录前言分析演示后记前言上一篇介绍Presto的REST API调用逻辑时候,当中提到了config注入属性值再返回给接口,接下来看看如何注册一个新的config并返回。分析config.properties中有一个presto.version属性在server包中有一个ServerConfig,它用到了presto.version属性通过Find Usages容易找到它在ServerMainModule中被绑定请求/v1/status的时候,将注入StatusRes

2021-07-10 15:18:27 306 1

原创 Presto本地调试REST API

文章目录背景介绍分析调用链注入链背景介绍工作中需要新增Presto的Rest API,便学习了一下他们的调用流程。Presto提供许多Rest API,下面给出部分以/v1/worker/{nodeId}/status为例,查看调用过程分析调用链先到达WorkerResource.java的对应接口实际上会重定向到/v1/status,从而来到StatusResource.javanodeInfo等信息是初始化的时候注入的那么这些信息的注入链路又是怎样的呢?以nodeInf

2021-07-10 15:18:14 721 1

原创 Calcite延迟CTE的validate

前言解决将validator.validateWithItem((SqlWithItem) withItem)代码放到验证from CTE的时候只需要修改两个单测就可以跑通

2021-06-19 13:50:21 164

原创 Calcite修改运算符的参数类型来支持date运算

文章目录前言算子介绍新增代码新增类型date +/- datedate +/- 1新增单测前言Spark3中支持 date +/- date和 date +/- int但Calcite解析的时候还不支持注意这里提示Supported form(s): NUMERIC + NUMERIC 、DATETIME_INTERVAL等等下面便通过修改Calcite的源码来支持这个运算,注意我是在branch-1.22分支上建立了dev分支进行演示算子介绍Calcite将运算符和许多函数都注册在

2021-06-19 13:48:45 777

原创 Calcite中自定义SQL异常

CalciteResource.java这是一个接口,绑定了参数与BaseMessage,同时声明了异常Class(CalciteException、SqlValidatorException)CalciteResource.properties将CalciteResource.java中新增的方法,functionName和Message同步到属性文件当中下图箭头指出的key就是刚刚看到过的两个方法名首字母大写单元测试(一般是在SqlValidatorTest.java)与SqlToRe.

2021-06-14 16:28:58 468

原创 图解Hive中grouping sets的使用

文章目录前言案例总结前言图解group by时cube和rollup的区别中讨论了cube、 rollup之间的区别,接下来继续讨grouping sets的使用案例数据和建表的准备工作在上一篇博客已经有介绍,不过这里为了使数据有一些差异多加了一行之前构造的数据分布太均匀,male、female、married、unmarried都是5个grouping sets实际上就是多个group by的结果union到一起,比如下面的查询gender, marital_statussele

2021-06-14 16:25:51 498

原创 图解Hive中group by时cube和rollup的区别

前言Jack,male,unmarriedTom,male,unmarriedJim,male,unmarriedJames,male,marriedTony,male,marriedJessica,female,marriedAlice,female,marriedChris,female,marriedRose,female,unmarriedAnny,female,unmarriedcreate table test_table(name string,gender strin

2021-05-22 14:02:13 758 2

原创 Mac使用graphviz绘制Python代码的函数调用关系图

前言代码量太大的时候,各种class、function之间的关系难以理清,这种时候可以借助调用关系图来帮助理解。本文借鉴自https://www.cnblogs.com/GO-NO-1/p/7155684.html准备工作安装graphvizbrew install graphviz安装或者去官网下载安装pycallgraphpip install pycallgraph示例# 在原来的调用逻辑前添加下面这五行from pycallgraph import PyCallGraph

2021-05-22 14:01:24 538 2

原创 Python爬取天天基金网历史数据

前言最近开始学习基金????,感觉需要收集一些数据统计分析才靠谱????毕竟给A股交学费的感觉可不好受????网上有很多公开的数据,我这里选择的是天天基金网进行爬取页面分析接口我分析过了,有些验证不太好获取数据,所以直接从html提取在天天基金网中随便选择一款基金,然后点击进入历史数据页面容易定位出日增长率的css选择器还有翻页按钮程序编写使用selenium打开chrome浏览器进行爬取,全代码如下from selenium import webdriverfrom sel

2021-04-24 16:05:43 2598 1

原创 手把手教你如何实现Presto中的UDF

文章目录前言准备dockergit开发部署测试前言Presto本身并不支持UDF,官方建议通过插件来实现。但是教程有点简洁,对新手不太友好,我折腾了一下午才成功。分享出来帮大家避开一些坑~准备准备代码和运行环境,已有的可以直接跳过。docker我这里用的是docker环境,其他VM或者物理机只要能正常运行Presto都行。docker pull prestosql/presto:316拉取镜像docker run -p 8080:8080 --name prestosql prestos

2021-04-10 09:33:31 1790

原创 Calcite之csvTest的查询流程debug

文章目录前言案例查询流程核心流程前言Calcite的学习资料并不丰富,于是自己便想通过debug单元测试的代码来学习。至于debug的案例就是官方提供的csvTest了,对新人而言csv应该比数据库要友好。案例查询流程在example/csv/src/test/java/org/apache/calcite/test/CsvTest.java中有很多单元测试的方法,我选择最简单的testSelect()。加入断点,开始debug。直接进入发现是一个checkSql(),似乎和检查相关。接着进入

2021-03-14 21:11:43 459

原创 Calcite流程初探

首先熟悉SQL的流程环节,Sql 的执行过程一般可以分为下图中的四个阶段,Calcite 同样也是这样:

2021-03-14 21:11:27 535

原创 Calcite官方教程避坑

文章目录简介教程下载并构建初次查询简介Apache Calcite是用于构建数据库和数据管理系统的开源框架。它包括一个SQL 解析器,一个用于在关系代数中构建表达式的API以及一个查询计划引擎。教程官方为我们提供了简单的教程,但是我在学习的时候遇到了坑,于是记录一下分享出来。下载并构建git clone https://github.com/apache/calcite.gitcd calcite/example/csv./sqlline刚开始就卡在这,简直是劝退教程…最开始怀疑是

2021-03-14 21:10:51 1206

原创 JavaCC的示例程序之计算器

options{ STATIC = false;}PARSER_BEGIN(Calculator)import java.io.PrintStream;public class Calculator{ double previousValue = 0.0; public static void main(String[]args)throws ParseException, TokenMgrError, NumberFormatException{ Calculator par

2021-03-09 12:53:40 273

原创 JavaCC的示例程序之简易加法计算器

文章目录前言格式说明代码示例编译运行前言在上一篇博客已经成功按照javacc之后,接着用javacc编译一个简单的程序格式说明JavaCC的描述文件扩展名约定为.jj,格式通常如下options { JavaCC的选项}PARSER_BEGIN(解析器类名)package 包名;import 库名;public class 解析器类名 { 任意的Java代码}PARSER_END(解析器类名)扫描器的描述解析器的描述代码示例下面的代码实现了一个简易的

2021-03-09 12:53:16 283

原创 Mac下载安装JavaCC

前言最近在实习需要用到Apache Calcite,而Calcite依赖JavaCC,便先学习了一下JavaCC。Java Compiler Compiler (JavaCC)是最流行的用于Java应用程序的解析器生成器。下载进入JavaCC的官网下载压缩包并解压注意这里只是源码文件,不是可执行文件下载二进制文件并重命名为javacc.jar如果自己想挑战的话,可以不下载二进制的可执行文件而直接用刚刚下载的源码编译安装新建target目录并将重命名的javacc.ja

2021-03-09 12:52:55 915 6

原创 Mac隐藏终端的用户名和主机名

首先要区分自己的终端用的是bash还是zsh,网上很多教程都是bash的,我用的zsh按照bash的步骤做了没有效果。bashvim /etc/bashrcPS1为显示的格式,h代表主机名、u代表用户名去掉即可实现隐藏的效果zshvim /etc/zshrcn表示用户名、m表示主机名去掉后的效果...

2021-03-09 12:52:10 2251

原创 shell脚本修改ini配置文件

工作中经常遇到如下的配置文件,我随意写了个命名demo.inikey=valueid=20name=jimage=20经常需要修改某个key,频繁vim进去修改有些麻烦,可以考虑封装一个脚本alter.sh内容如下。#/bin/basholdValue=`cat $1 | grep $2 | sed "s/$2=//g"`echo "For $2,$oldValue will be modified to $3"sed -i "s/$2=$oldValue/$2=$3/" $1其中$

2021-03-03 20:22:35 2153 1

原创 Linux时间取整技巧

发现问题在学习前辈们代码的适合,发现了一段奇怪的代码于是研究了一下。if [ "$VER" == "" ]; then # 获得一天前的时间精确到秒 export ONE_DAY_AGO=$(date '+%Y-%m-%d %H:%M:%S' --date '1 days ago') # 获得秒数再取整,这里就很奇怪了 export VER_UNIX_TS=$(expr `date -d "${ONE_DAY_AGO}" +%s` / 60 / 5 \* 60 \* 5 ) .

2021-02-28 20:54:11 1207

原创 Linux和Mac下用管道批量计算时间差

前言在公司实习的时候,需要计算某个服务的启动时间即提交任务到Server真正Start的时长。由于改服务个数较多,考虑编写shell脚本来实现。示例从日志中提取时间的步骤省略掉,提取出来的结果如下保存为time.log。2021-02-27 09:59:282021-02-27 09:59:482021-02-27 10:03:332021-02-27 09:58:402021-02-27 09:59:142021-02-27 09:55:302021-02-27 10:01:2320

2021-02-28 20:48:36 403

原创 Presto源码分析-UI界面的功能新增

文章目录前言介绍需求一:统计查询数前言介绍presto的ui界面代码集中在presto-main/src/main/resources/webapp,重点介绍下面的三部分*.html: ui页面的基本框架,从中引入大量js(来自dist)src: js的源码位置dist: node编译之后的文件因此简单的需求,只需要修改html和node对应的部分即可。需求一:统计查询数Presot的UI界面可以显示最近的查询,但是没有统计个数,我们可以通过添加一行代码来实现这个功能。在pres

2021-02-28 12:33:50 583 5

原创 Study Note about The Practice of Presto & Alluxio in E-Commerce Big Data Platform

This article from a User Talk at PrestoCon. You can look the Slides and Video in web.Some infomation about the Speakerhello every one,my name is Wenjun Tao,a senior software engineer jd company.I’m also the core member of our presto team.It is my hon

2021-02-28 08:54:17 216

原创 远程调试提交到hadoop的jar包

我们通常可以用hadoop jar来提交自己的jar包hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount /user/root/input /user/root/output在hadoop脚本中加入两行,打印类路径和java命令可以看到hadoop jar本质上是对java命令的封

2021-01-31 10:17:31 534

原创 YARN的MRAppMater源码学习记录

先看这个类的入口main方法, public static void main(String args[]) { try { //准备一些参数 Thread.setDefaultUncaughtExceptionHandler(new YarnUncaughtExceptionHandler()); String containerIdStr = System.getenv(org.apache.

2021-01-31 10:17:12 191

原创 YARN的DistributedShell源码分析

文章目录准备工作代码剖析Clientinit()run()ApplicationMaster准备工作hadoop官方提供了两个YARN应用程序的示例,这里修改distributedshellhadoop-2.7.6-src\hadoop-yarn-project\hadoop-yarn\hadoop-yarn-applications将这个模块复制一份到自己的工作空间,然后导入idea导入的时候所有选项默认即可,不了解的不建议修改,甚至是项目名也不可随意更改mvn package -Dm

2021-01-31 09:13:08 307

原创 YARN执行DistributedShell示例

本文介绍YARN自带的一个非常简单的应用程序实例—distributedshell的使用方法。它可以看做YARN编程中的“hello world”,主要功能是并行执行用户提供的shell命令或者shell脚本。我的集群情况,主要关注1个RM和3个NM用DistributedShell创建一个hello-world文件这里不能用echo输出,应该是运行环境输出定向的问题我自己虚拟机跑的,只有3个NM,内存设置的也比较小$HADOOP_HOME/bin/hadoop jar $HADOOP_.

2021-01-31 09:11:50 625

callLog项目数据生产工具

在linux当中每隔10S生成一行callLog的数据,用'java -cp calllogs-0.0.1-SNAPSHOT.jar product.AutoDataGen ./nam_num.csv ./calllog.csv'运行,其中nam_num.csv为姓名手机号映射的文件

2019-07-13

空空如也

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

TA关注的人

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