360今天开源一款分布式查询引擎——XSQL,XSQL是由360统一计算团队开源的一款低门槛、更稳定、多数据源的分布式查询引擎。它允许你快速、近实时地查询大量数据。
背景
近年,大数据领域涌现出了多种多样的数据存储、数据计算的框架或工具,但是却没有统一的标准,外加大数据技术之间的层层壁垒,导致了门槛高和不够稳定两个问题。
第一个问题实际上包括了学习曲线陡峭、可维护性低、部署不可控等。
各种数据源从存储格式到执行引擎,都有非常大的差别。由于SQL是目前被广泛接受的行业标准,且门槛很低,所以部分数据源或者计算引擎提供了对SQL的支持。尽管如此,各种数据源对SQL的支持度也很不统一,有些数据源还引入了SQL之外的语法,他们可以被归类为SQL-like;还有一些数据源没有提供SQL的支持,尤其是一些NoSQL数据库。用户如果想要使用多种数据源,就不得不学习每种数据源自身的API或者非标准SQL。
一些数据源(例如:Druid)所提供的API有很多的可读性问题,降低了系统的可维护性。
一些数据源或者计算引擎在部署的时候,需要安装各种环境、配置大量的配置。导致一些系统在部署之后,除了用户代码需要调整外,还很难升级或保持向前兼容。
这些现状,对于用户来说,无论从学习成本上,还是开发周期上,乃至于线上产品的升级、更新都带来了不小的挑战。
另一个问题实际指的是分布式任务执行的稳定性较差。
大数据技术由于分布式、主备切换、负载均衡等设计导致的异构、异地、分布式、跨机房的部署方式,最终会引起内存资源限制、I/O限制、带宽打满、跨机房传输、CPU跑满、资源隔离等问题;分布式任务处理的数据来自各个不同的业务,每种业务所产生的数据在数据体量、数据产生速度、数据特征等方面都有巨大的差别,因此分布式任务往往会出现数据倾斜、内存溢出、Full GC、空值等一系列问题。
为了解决这些痛点,360统一计算团队开发了一个低门槛、易部署、更稳定的多数据源分布式查询引擎——XSQL。XSQL将致力于降低数据使用的门槛;另一方面, XSQL将致力于提供更加稳定的分布式查询服务。
XSQL介绍
XSQL是一款低门槛、更稳定、多数据源的分布式查询引擎。它允许你快速、近实时地查询大量数据。对于一些数据源(例如:Elasticsearch、Druid等),他可以大幅地降低学习曲线,并节省人力成本。除Hive外,每种数据源都支持下推到具体数据源的执行优化。
通过XSQL提供的多数据源联邦,你将可以避免数据迁移和时间浪费,更加专注于业务本身。XSQL可以通过下推、并行计算、迭代计算等底层支撑技术,对各种数据源的查询加速。
XSQL的特点与特性
XSQL的主要特点
XSQL的主要特点包括:低门槛、更稳定、增效节能及数据联邦。

XSQL特性介绍







XSQL技术架构
XSQL部署架构

XSQL实现架构

XSQL未来架构

XSQL适用场景
- 小张是新来数据部门的社招生,有五年的数据开发经验。在之前的公司经常进行数据统计类的工作,通过SQL语句对Hive和MySQL中的数据进行检索和加工,使得本人对于SQL语法非常熟悉。由于当前产品有从海量数据中按照关键字进行搜索的需求,因此部门决定使用Elasticsearch。小张在Elasticsearch面前,完全是一个小白。小张在初步查阅了Elasticsearch的介绍后,感觉无所适从。
- A部门的业务数据大多都维护在一些MySQL表中,其中有一张customer表用来记录用户的基本信息(例如:用户ID、昵称、年龄、性别、住址等)。同时,一些博客文档的数据却存储在MongoDB的blogs集合中blogs集合的_id字段采用了用户ID。部门产品新增的需求是,在用户的“个人中心”展示用户的博客列表,列表只显示博客标题、发布时间、博客摘要等信息。对于工程师来说,如果能直接将customer表和blogs集合进行关联查询就好了。事情看似非常ease,这也是XSQL的使用场景。
- 老王是数据部门的老员工,各种大数据工具都使用的游刃有余。老王经常使用Spark的API来编写从各种异构数据源读写数据的作业,由于这种工作重复度很高,老王感觉对这门技术的反复使用非常枯燥,而且时间成本也较高,因此他希望能有一种方式可以改善现在的工作。
- B部门是一个对数据库技术非常发烧的部门,目前的各个机器上都安装了Hive、MySQL、Redis、MongoDB等一系列客户端。大家日常开发的任务也都部署在这些机器上,导致这些机器的CPU、内存、磁盘等资源常常出现报警。使用XSQL可以避免Hive之外的各种数据库客户端的安装。
- C部门对Druid有广泛使用,通过预计算加快了查询效率。Web端需要展示Druid结果及其配置信息,但是配置信息存储在MySQL中。Web端对查询展示有极高的响应需求,因此C部门利用XSQL将Druid查询结果导入到MySQL中,并通过MySQL表之间的关系进行展示。
编译&部署&运行指南
- jdk 1.8+
- git clone https://github.com/Qihoo360/XSQL
2、执行编译命令
如果你已经有现成的Spark,可以将XSQL编译为Spark插件:
- XSQL/build-plugin.sh
编译成功后源码根目录将出现
- xsql-0.6.0-plugin-spark-2.4.3.tgz
如果你没有现成的Spark,那么你可以编译完整版的XSQL(内置Spark):
- XSQL/build.sh
编译成功后源码根目录将出现
- xsql-0.6.0-bin-spark-2.4.3.tgz
- jdk 1.8+
- hadoop 2.7.2+
- spark 2.4.x
tar xvf xsql-0.6.0-bin-spark-2.4.3.tgz -C "软件目录"
插件版解压:
tar xvf xsql-0.6.0-plugin-spark-2.4.3.tgz -C "已存在的SPARK_HOME"
2、配置数据源
这里给出一个简单的例子:
spark.xsql.datasources default
spark.xsql.default.database real_database
spark.xsql.datasource.default.type mysql
spark.xsql.datasource.default.url jdbc:mysql://127.0.0.1:2336
spark.xsql.datasource.default.user real_username
spark.xsql.datasource.default.password real_password
spark.xsql.datasource.default.version 5.6.19
$SPARK_HOME/bin/spark-xsql
spark-xsql> show datasources;
2、从Scala API开始
var spark = SparkSession
.builder()
.enableXSQLSupport()
.getOrCreate()
spark.sql("show datasources")
具体使用操作请参考XSQL帮助文档:https://qihoo360.github.io/XSQL/
结语
- https://github.com/Qihoo360/XSQL
- 可点击阅读原文查看,欢迎加star~~
- XSQL开发者组(xsql_dev@groups.163.com)
- XSQL用户组(xsql_user@groups.163.com)
QQ群
- XSQL用户群:838910008
文章说明:
本文转载至 微信公众号 360技术
原文如有版权问题,在下面留言板反馈,我们会第一时间处理。