Go to file
2018-03-06 14:54:37 +08:00
bin mv mvn to build 2018-01-20 00:01:36 +08:00
build mv mvn to build 2018-01-20 00:01:36 +08:00
docs 1. add build script 2018-01-19 15:55:08 +08:00
if init commit for kyuubi 2018-01-05 19:38:54 +08:00
patches readme doc 2018-03-06 11:20:57 +08:00
src add scala test plugin 2018-03-06 14:54:37 +08:00
.gitignore mv mvn to build 2018-01-20 00:01:36 +08:00
.travis.yml add .travis.yml 2018-03-06 11:35:38 +08:00
LICENSE Initial commit 2017-12-18 17:05:10 +08:00
pom.xml add scala test plugin 2018-03-06 14:54:37 +08:00
README_CN.md readme cn 2018-01-25 10:10:01 +08:00
README.md build status 2018-03-06 11:59:57 +08:00
scalastyle-config.xml 1. create sc in a new thread; 2. kill yarn app by app name when sc init timeout 2018-01-17 17:15:35 +08:00

Kyuubi Build Status

Kyuubi is an enhanced version of Apache Spark's primordial Thrift JDBC/ODBC Server.

Thrift JDBC/ODBC Server as a similar servcie of Spark SQL Apache Hive HiveServer2 而存在的服务通过该服务允许用户使用JDBC/ODBC端口协议来执行Spark SQL查询。通过Thrift JDBC/ODBC Server业务用户就可以用使用一些支持JDBC/ODBC连接的BI工具比如Tableau网易有数等, 来对接基于Spark的海量数据报表制作并取得比Apache Hive更好的SQL on Hadoop性能。但由于Apache Spark本身架构的限制要作为一款企业级的产品来使用其与HiveServer2相比 还有不少的问题存在比如多租户隔离、权限控制、高并发、高可用等等。而Apache Spark社区对这块的支持也处于长期停滞的状态。

Kyuubi针对这些存在的问题在某些方面对Thrift JDBC/ODBC Server进行的增强。具体如下表所示

--- Thrift JDBC/ODBC Server Kyuubi 备注
SparkContext多实例 Apache Spark对于单个JVM中实例化多个SparkContext一直有较多的尝试可以参见这里
而其多实例特性可以通过spark.driver.allowMultipleContexts开启也不过是SparkContext被实例化多次并公用一套调度和执行环境而已有点像java对象的一次浅拷贝。
Kyuubi附带的Patch提供了一种以用户隔离调度和执行环境的方法。
SparkContext动态实例化 Thrift JDBC/ODBC Server在启动时初始化一个SparkContext实例而Kyuubi则在用户会话创建时去缓存中获取或新建SparkContext
SparkContext动态回收 Thrift JDBC/ODBC Server再用户断开会话后会回收SparkSession而SparkContext则是常驻的变量
Kyuubi对于SparkSession亦如是不同的是由于SparkContext是动态新增的从而对应的会有相应的回收机制。
动态Yarn队列 Spark on Yarn可以通过spark.yarn.queue指定队列Thrift JDBC/ODBC Server指定这个队列后并无法修改这个队列
HiveServer2可以set mapred.job.queue.name=thequeue来指定执行队列,
Kyuubi采取了折中方案可以将spark.yarn.queue设置连接串中。
动态参数设置 仅支持spark.sql.开头的动态参数 Kyuubi支持在连接串中指定spark.executor.cores/memory等参数动态设置对应SparkContext所能调度的资源
权限控制 Kyuubi后续会增加Spark Authorizer的支持。
代理执行 仅支持代理一位用户server启动时通过--proxy-user指定 支持hive.server2.proxy.user
支持hive.server2.doAs
多租户 基于以上特性Kyuubi可以在开启LCE的Yarn集群上实现多租户
SQL执行日志 HiveServer2通过LogDivertAppender来从定向SQL执行的日志到文件中Kyuubi基于重写了该Appender得以将执行日志拉去到文件中。
高可用 Thrift JDBC/ODBC Server实际是粗糙的改写了HiveServer2的部分代码连接ZK实现高可用的代码被阉掉了Kyuubi把他们加回来而已
Cluster模式 Kyuubi后续会加入cluster模式的支持

快速上手

编译

Kyuubi基于maven构建

build/mvn clean package

运行

Kyuubi本质上作为一个Spark Application可以轻松的用spark-submit起来

$ $SPARK_HOME/bin/spark-submit \ 
    --class yaooqinn.kyuubi.server.KyuubiServer \
    --master yarn \
    --deploy-mode client \
    --driver-memory 10g \
    --conf spark.hadoop.hive.server2.thrift.port=10009 \
    $KYUUBI_HOME/target/kyuubi-1.0.0-SNAPSHOT.jar

作为一个长服务,当然最好用nohup配合&来使用。但是更加推荐内置脚本来运行Kyuubi。

首先,在$KYUUBI_HOME/bin/kyuubi-env.sh设置好SPARK_HOME

export SPARK_HOME=/the/path/to/an/runable/spark/binary/dir

其次,通过bin/start-kyuubi.sh启动Kyuubi

$ bin/start-kyuubi.sh \ 
    --master yarn \
    --deploy-mode client \
    --driver-memory 10g \
    --conf spark.hadoop.hive.server2.thrift.port=10009 \

即可通过beeline等Thrift API或者Tableau这种工具来连接了。

最后,bin/stop-kyuubi.sh来停止服务。

当然仅仅如此的话Kyuubi完全等价于Thrift JDBC/ODBC Server并不具备多租户的特性。

多租户

前置条件