Quicksql 跨数据源统一 SQL 查询引擎 项目简介
QSQL是以SQL进行单一、混合查询的一款产品。QSQL支持标准SQL语言(SQL-2003);QSQL支持查询关系型数据库、NoSQL式数据库、原生不支持SQL查询的存储(如ES、Druid),及借助中间计算引擎实现混合查询。QSQL最大的特点是独立于计算引擎、存储引擎本身,如此用户只需要关注于QSQL语法以及数据本身,就可完成数据计算、统计以及分析。架构设计QSQL包含三层结构:语法解析层:负责SQL语句的解析、校验、优化、混算SQL的切分以及最终生成Query Plan;计算引擎层:负责Query Plan路由到具体的执行计划中,将Query Plan解释为具体的执行引擎可识别的语言;数据存储层:负责数据的提取、存储;编译&部署1 编译环境依赖java >= 1.8scala >= 2.11maven >= 3.32 编译步骤在源码根目录下,执行:mvn -DskipTests clean package编译成功后执行:ls ./target/在./target/目录下,会生成发布包 qsql-0.5.tar.gz。3 部署环境依赖CentOS 6.2java >= 1.8scala >= 2.11spark >= 2.2[可选] 目前QSQL支持的存储引擎MySQL、Elasticsearch、Hive、Druid4 客户端部署在客户端解压缩发布包 qsql-0.5.tar.gztar -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_HOMESPARK_HOMEQSQL_CLUSTER_URLQSQL_HDFS_TMPqsql-runner.properties:设置系统参数log4j.properties:设置日志级别运行示例QSQL Shell./bin/qsql -e "select 1"详情:English|中文示例程序QSQL附带了示例目录中的几个示例程序。要运行其中一个,使用./run-example [params]。例如:内存表数据:./bin/run-example com.qihoo.qsql.CsvScanExampleHive join MySQL:./bin/run-example com.qihoo.qsql.CsvJoinWithEsExample注意./run-example <com.qihoo.qsql.CsvJoinWithEsExample>运行混算,请确保当前客户端存在Spark、Hive、MySQL环境。并且将Hive与MySQL的连接信息添加到元数据管理中。详情:English|中文参数配置环境变量Property NameMeaningJAVA_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 NameDefaultMeaningspark.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 joinspark.speculationtrueSpark开启任务推测执行spark.sql.files.maxPartitionBytes134217728(128MB)Spark读取文件时单个分区的最大字节数元数据参数Property NameDefaultMeaningmeta.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数据库ID1DESC数据库描述es 索引NAME数据库名es_profile_indexDB_TYPE数据库类型es、hive、mysqlDATABASE_PARAMS表字段说明示例数据DB_ID数据库ID1PARAM_KEY参数名UserNamePARAM_VALUE参数值rootTBLS表字段说明示例数据TBL_ID表ID101CREATED_TIME创建时间2018-10-22 14:36:10DB_ID数据库ID1TBL_NAME表名studentCOLUMNS表字段说明示例数据CD_ID字段信息ID10101COMMENT字段注释学生姓名COLUMN_NAME字段名nameTYPE_NAME字段类型varcharINTEGER_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
> 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