跨数据源统一 SQL 查询引擎 Quicksql

跨数据源统一 SQL 查询引擎 Quicksql

MIT
Java
跨平台
2019-01-10
红薯

QSQL是以SQL进行单一、混合查询的一款产品。QSQL支持标准SQL语言(SQL-2003);QSQL支持查询关系型数据库、NoSQL式数据库、原生不支持SQL查询的存储(如ES、Druid),及借助中间计算引擎实现混合查询。QSQL最大的特点是独立于计算引擎、存储引擎本身,如此用户只需要关注于QSQL语法以及数据本身,就可完成数据计算、统计以及分析。

架构设计

1540973404791

QSQL包含三层结构:

  • 语法解析层:负责SQL语句的解析、校验、优化、混算SQL的切分以及最终生成Query Plan;

  • 计算引擎层:负责Query Plan路由到具体的执行计划中,将Query Plan解释为具体的执行引擎可识别的语言;

  • 数据存储层:负责数据的提取、存储;

编译&部署

1 编译环境依赖

  • java >= 1.8

  • scala >= 2.11

  • maven >= 3.3

2 编译步骤

在源码根目录下,执行:

mvn -DskipTests clean package

编译成功后执行:

ls ./target/

在./target/目录下,会生成发布包 qsql-0.5.tar.gz。

3 部署环境依赖

  • CentOS 6.2

  • java >= 1.8

  • scala >= 2.11

  • spark >= 2.2

  • [可选] 目前QSQL支持的存储引擎MySQL、Elasticsearch、Hive、Druid

4 客户端部署

在客户端解压缩发布包 qsql-0.5.tar.gz

tar -zxvf ./qsql-0.5.tar.gz

建立软链

ln -s qsql-0.5/ qsql

该发布包解压后的主要目录结构如下:

  • bin:脚本目录

  • conf:配置文件

  • data:存放测试数据

  • lib:依赖jar包

  • metastore:元数据管理

在QSQL发布包$QSQL_HOME/conf目录中,分别配置如下文件:

  • base-env.sh:设置相关环境变量,如:

    • JAVA_HOME

    • SPARK_HOME

    • QSQL_CLUSTER_URL

    • QSQL_HDFS_TMP

  • qsql-runner.properties:设置系统参数

  • log4j.properties:设置日志级别

运行示例

QSQL Shell

./bin/qsql -e "select 1"

详情:English|中文

示例程序

QSQL附带了示例目录中的几个示例程序。要运行其中一个,使用./run-example [params]。例如:

内存表数据:

./bin/run-example com.qihoo.qsql.CsvScanExample

Hive join MySQL:

./bin/run-example com.qihoo.qsql.CsvJoinWithEsExample

注意

./run-example <com.qihoo.qsql.CsvJoinWithEsExample>

运行混算,请确保当前客户端存在Spark、Hive、MySQL环境。并且将Hive与MySQL的连接信息添加到元数据管理中。

详情:English|中文

参数配置

环境变量

Property NameMeaning
JAVA_HOMEJava的安装路径
SPARK_HOMESpark的安装路径
QSQL_CLUSTER_URLHadoop集群的路径
QSQL_HDFS_TMP设置临时目录路径
QSQL_DEFAULT_WORKER_NUM设置初始化的Worker数量
QSQL_DEFAULT_WORKER_MEMORY设置每个Worker分配的内存
QSQL_DEFAULT_DRIVER_MEMORY设置Driver端分配的内存
QSQL_DEFAULT_MASTER设置运行时的集群模式
QSQL_DEFAULT_RUNNER设置运行时的执行计划

参数配置

应用程序参数

Property NameDefaultMeaning
spark.sql.hive.metastore.jarsbuiltinSpark Sql链接hive需要的jar包
spark.sql.hive.metastore.version1.2.1Spark Sql链接hive的版本信息
spark.local.dir/tmpSpark执行过程中的临时文件存放路径
spark.driver.userClassPathFirsttrueSpark执行过程中,用户jar包优先加载
spark.sql.broadcastTimeout300Spark广播的超时时间
spark.sql.crossJoin.enabledtrueSpark Sql开启cross join
spark.speculationtrueSpark开启任务推测执行
spark.sql.files.maxPartitionBytes134217728(128MB)Spark读取文件时单个分区的最大字节数

元数据参数

Property NameDefaultMeaning
meta.storage.modeintern元数据存储模式,intern:读取内置sqlite数据库中存储的元数据,extern:读取外部数据库中存储的元数据。
meta.intern.schema.dir../metastore/schema.db内置数据库的路径
meta.extern.schema.driver(none)外部数据库的驱动
meta.extern.schema.url(none)外部数据库的链接
meta.extern.schema.user(none)外部数据库的用户名
meta.extern.schema.password(none)外部数据库的密码

元数据管理

表结构

DBS

表字段说明示例数据
DB_ID数据库ID1
DESC数据库描述es 索引
NAME数据库名es_profile_index
DB_TYPE数据库类型es、hive、mysql

DATABASE_PARAMS

表字段说明示例数据
DB_ID数据库ID1
PARAM_KEY参数名UserName
PARAM_VALUE参数值root

TBLS

表字段说明示例数据
TBL_ID表ID101
CREATED_TIME创建时间2018-10-22 14:36:10
DB_ID数据库ID1
TBL_NAME表名student

COLUMNS

表字段说明示例数据
CD_ID字段信息ID10101
COMMENT字段注释学生姓名
COLUMN_NAME字段名name
TYPE_NAME字段类型varchar
INTEGER_IDX字段顺序1

内置SQLite数据库

在QSQL发布包$QSQL_HOME/metastore目录中,存在如下文件:

  • sqlite3:SQLite命令行工具

  • schema.db:内置元数据数据库

  • ./linux-x86/sqldiff:显示SQLite数据库之间的差异的命令行程序

  • ./linux-x86/sqlite3_analyzer:用于测量和显示单个表和索引对SQLite数据库文件使用多少空间以及如何有效地使用空间

通过sqlite3连接到schema.db数据库,并操作元数据表

sqlite3 ../schema.db

外部MySQL数据库

修改内嵌的SQLite数据为MySQL数据库

vim metadata.properties
> meta.storage.mode=extern
> meta.extern.schema.driver    = com.mysql.jdbc.Driver
> meta.extern.schema.url       = jdbc:mysql://ip:port/db?useUnicode=true
> meta.extern.schema.user      = YourName
> meta.extern.schema.password  = YourPassword

初始化示例数据到MySQL数据库中

cd $QSQL_HOME/bin/
./metadata --dbType mysql --action init
的码云指数为
超过 的项目
加载中

评论(15)

筑梦前行
筑梦前行
没用过,但好像很厉害的样子!
被小白杀
被小白杀
facebook不是已经弄了一个presto么?重复造轮子?
阿伦哥-
阿伦哥-
重器
z
zhangunder
重型武器!!!!
攻城狮朋友圈
攻城狮朋友圈
等待1.0,这个家伙是重工业啊
能跨库join并排序吗?
wleoi
wleoi

引用来自“程序猿兼职平台”的评论

程序员兼职平台,教你怎么年入500W? www.hiyougo.cn
有这发广告的功夫,还不如测测你自己网站能不能访问
marvel888
marvel888
类似presto?
韦小仇
韦小仇
这个有点厉害
kppom
kppom
我想问问能加速hive的查询速度吗?看着hive查询进度条简直是能急死人。

暂无资讯

1
回答
大数据查询引擎 统一路由的产品有哪些?比如360的quickSQL,还有别的吗?求推荐

大数据查询引擎 统一路由的产品有哪些?比如360的quickSQL,还有别的吗?求推荐

05/14 13:45

没有更多内容

加载失败,请刷新页面

没有更多内容

国产高性价比手机要凉凉?官方回应

5月26日消息,有网友在360公司董事长兼CEO周鸿祎微博下留言:360还做不做手机了?更不更新系统了? 对此360公司官方微博回复这位网友:公司的新战略是大安全战略,将聚焦于三个安全大脑的建设...

06/10 19:22
22
0
360死性不改 “偷梁换柱”上架苹果又悄然被下架

来源: 腾讯科技 今年5月7日,苹果再次将360产品下架。 当人们的印象还停留在今年初苹果大面积下架360产品的时候,苹果却悄然采取了又一次的360产品下架行动。这次下架,正如业内一位专家“歪...

2013/07/05 14:49
6.7K
0
【j360-boot】Spring-boot系列五(docker、docker、docker)

Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run"。 我们为Spring平台及第三方库提 供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用...

2015/09/24 22:57
1K
3
史上最贵域名诞生!360斥资1700万美元买360.com

昨日,360公司官方人士向腾讯科技确认,公司已斥巨资收购国际顶级域名360.com。传闻这一收购价格为1700万美元,约合人民币1.1亿元。 史上最贵域名诞生!360斥资1700万美元买360.com 此前,360...

2015/02/05 21:18
77
0
怎样看待360 提示可以卸载手机预装软件商店引发的事件?

此贴转至知乎http://www.zhihu.com/question/21716903 我想,应该不会有人站在道德的高地去要求一家商业公司做到绝对的道德吧,应 该不会有人会把流氓当作一辈子只做流氓事的人吧。 我想,抗...

2013/09/30 10:33
8.1K
0
对决:腾讯对360摊牌

对决:腾讯对360摊牌 腾讯和360之争终于从弹窗大战阶段进入了高潮阶段,11月3日下午6点,腾讯突然向其用户发布消息称,将在装有360软件的电脑上停止运行QQ软件,用户登录腾讯QQ时会显示一个弹...

2012/11/08 09:58
49
0
对360出招时,百度需慎行

李开复在8月29日零点时发微博:问:百度和360今晚的争夺战谁会输?答:用户。 一个半小时后,周鸿祎转发评论道:中国有垄断八成的搜索巨头,让用户没有选择,这才是对用户和行业最大伤害。谷...

2012/08/29 08:59
1K
0
【j360-boot】Spring-boot系列三(崩溃模式,不是你崩就是电脑崩)

Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run"。 我们为Spring平台及第三方库提 供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用...

2015/09/24 17:12
1K
1
奇虎360不正当竞争官司不断

摘要:大家对于3Q大战应该不是很陌生了,毕竟这件事影响还是挺大的,到底谁对谁错大家要有自己的判断力,不能盲目跟风,毕竟是要讲证据的!奇虎360不正当竞争官司不断 10月24日,关于对360公...

2011/12/08 22:42
22
0
白鸦:360的可怕

几年来,站在“道德”的高度,以“杀流氓软件”为口号,以“打系统补丁”为基本切入点,以“推荐应用列表”为扩展,以“安全卫士”自居的360,装了近3亿电脑,赚到了“网民”的充分“信任”。...

2010/03/15 20:39
121
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部