Quicksql 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Quicksql 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Quicksql 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 Java
操作系统 跨平台
软件类型 开源软件
开源组织 360
地区 国产
投 递 者 红薯
适用人群 未知
收录时间 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 Name Meaning
JAVA_HOME Java的安装路径
SPARK_HOME Spark的安装路径
QSQL_CLUSTER_URL Hadoop集群的路径
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 Name Default Meaning
spark.sql.hive.metastore.jars builtin Spark Sql链接hive需要的jar包
spark.sql.hive.metastore.version 1.2.1 Spark Sql链接hive的版本信息
spark.local.dir /tmp Spark执行过程中的临时文件存放路径
spark.driver.userClassPathFirst true Spark执行过程中,用户jar包优先加载
spark.sql.broadcastTimeout 300 Spark广播的超时时间
spark.sql.crossJoin.enabled true Spark Sql开启cross join
spark.speculation true Spark开启任务推测执行
spark.sql.files.maxPartitionBytes 134217728(128MB) Spark读取文件时单个分区的最大字节数

元数据参数

Property Name Default Meaning
meta.storage.mode intern 元数据存储模式,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 数据库ID 1
DESC 数据库描述 es 索引
NAME 数据库名 es_profile_index
DB_TYPE 数据库类型 es、hive、mysql

DATABASE_PARAMS

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

TBLS

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

COLUMNS

表字段 说明 示例数据
CD_ID 字段信息ID 10101
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
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (15)

加载中
没用过,但好像很厉害的样子!
2019/02/21 10:34
回复
举报
facebook不是已经弄了一个presto么?重复造轮子?
2019/01/30 22:11
回复
举报
重器
2019/01/25 14:45
回复
举报
重型武器!!!!
2019/01/16 11:58
回复
举报
等待1.0,这个家伙是重工业啊
2019/01/10 19:35
回复
举报
能跨库join并排序吗?
2019/01/10 15:05
回复
举报

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

程序员兼职平台,教你怎么年入500W? www.hiyougo.cn
有这发广告的功夫,还不如测测你自己网站能不能访问
2019/01/10 15:02
回复
举报
类似presto?
2019/01/10 14:23
回复
举报
这个有点厉害
2019/01/10 13:14
回复
举报
我想问问能加速hive的查询速度吗?看着hive查询进度条简直是能急死人。
2019/01/10 10:58
回复
举报
更多评论
暂无内容
发表了博客
2012/12/13 13:03

360

360 卸载界面做了特别的保护 ,不能模拟点击按钮。。导致远程桌面操作的时候 无法卸载,,,,

0
0
发表了博客
2016/09/26 23:09

360-1

svn操作 student05 123 http://192.168.77.84/svn/Mobliesfe05 代码包结构划分 目的:方便项目后期的维护和管理 1.按照代码类型划分 android 2.按照业务类型划分 按照业务的不同,将不同的文件放到 不同的包中 传智播客软件:cn.itcast 招生:cn.itcast.student 教学:cn.itcast.teach 财务:cn.itcast.money 阴影的实现 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

0
0
发表了博客
2012/08/29 09:02

如何吃掉360

管虎的电影《杀生》不算太红,但我想说说。这片子讲的是一个肆无忌惮穿行在传统世界的泼皮,被最终降服的故事。 我这里想说的是周鸿祎。他几乎跟所有互联网大佬都有过交战,很多对手已经灰飞湮灭。他的敌人想必很多。但如果以合乎常规的竞争手段对付奇虎360,无疑任何一个人都不可能搞定它!《杀生》里,牛结实最终是死了,死在他有了一个未出生的孩子,这个未出生的孩子是他的罩门。 说起罩门,方世玉也有。方世玉才满月时,老...

0
0
发表了博客
2012/08/07 11:10

360还是很牛的

两年多来,本本的光驱一直不能用,我也就这样忍受着。近期发现360的修复专家不再收费,可以开放使用,就把问题提交了上去,马上就得回复,告诉我如何修改注册表,如何设置,然后等等,居然就好了!!!真是不可想像的好啊,只有在这里,拜谢360的大侠们和周总了!

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于数据库专区
2019/05/14 13:45

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

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

3
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
15 评论
223 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部