QSQL是以SQL进行单一、混合查询的一款产品。QSQL支持标准SQL语言(SQL-2003);QSQL支持查询关系型数据库、NoSQL式数据库、原生不支持SQL查询的存储(如ES、Druid),及借助中间计算引擎实现混合查询。QSQL最大的特点是独立于计算引擎、存储引擎本身,如此用户只需要关注于QSQL语法以及数据本身,就可完成数据计算、统计以及分析。
QSQL包含三层结构:
语法解析层:负责SQL语句的解析、校验、优化、混算SQL的切分以及最终生成Query Plan;
计算引擎层:负责Query Plan路由到具体的执行计划中,将Query Plan解释为具体的执行引擎可识别的语言;
数据存储层:负责数据的提取、存储;
java >= 1.8
scala >= 2.11
maven >= 3.3
在源码根目录下,执行:
mvn -DskipTests clean package
编译成功后执行:
ls ./target/
在./target/目录下,会生成发布包 qsql-0.5.tar.gz。
CentOS 6.2
spark >= 2.2
[可选] 目前QSQL支持的存储引擎MySQL、Elasticsearch、Hive、Druid
在客户端解压缩发布包 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:设置日志级别
./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的连接信息添加到元数据管理中。
在QSQL发布包$QSQL_HOME/metastore目录中,存在如下文件:
sqlite3:SQLite命令行工具
schema.db:内置元数据数据库
./linux-x86/sqldiff:显示SQLite数据库之间的差异的命令行程序
./linux-x86/sqlite3_analyzer:用于测量和显示单个表和索引对SQLite数据库文件使用多少空间以及如何有效地使用空间
通过sqlite3连接到schema.db数据库,并操作元数据表
sqlite3 ../schema.db
修改内嵌的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