背景
Kyuubi是一个基于Spark构建的,针对大规模数据处理分析的,支持统一多租户的JDBC接口服务。本篇围绕Kyuubi的编译,配置,部署和使用展开介绍。
环境信息
- CentOS 7.4
- Kyuubi 1.6.0-incubating
- Spark 3.1
编译
注意:Kyuubi不支持scala 2.11。即要求Spark和Flink的Scala版本为2.12。链接:https://github.com/apache/incubator-kyuubi/issues/2903。
首先从GitHub clone项目到本地:
git clone https://github.com/apache/incubator-kyuubi.git
切换到需要编译的分支之后。执行:
build/dist --tgz --flink-provided --spark-provided --hive-provided -Pspark3.1 -Pflink-1.14
开始编译和打包过程。编译完成后软件tar包会自动在源代码根目录生成。
配置
全部配置项的官网介绍:https://kyuubi.apache.org/docs/latest/deployment/settings.html
kyuubi-defaults.conf 配置
Kyuubi Server IP端口配置
- kyuubi.frontend.bind.host: server host。需要配置为本机hostname,IP,或者0.0.0.0
- kyuubi.frontend.bind.port: server 端口号。
HA配置
Kyuubi Server支持高可用。
- kyuubi.ha.client.class: 使用Zookeeper需要配置org.apache.kyuubi.ha.client.zookeeper.ZookeeperDiscoveryClient
- kyuubi.ha.addresses: Zookeeper的地址
- kyuubi.ha.namespace: 如果一套Zookeeper集群维护了多个HA Kyuubi集群,需要配置不同的namespace加以区分。在Zookeeper中namespace对应Kyuubi server状态信息保存的根ZNode。默认为
kyuubi
。
注意:如果启用了Kerberos,需要增加如下配置:
- kyuubi.ha.zookeeper.auth.type: 配置为
KERBEROS
- kyuubi.ha.zookeeper.auth.principal: Zookeeper认证使用的principal
- kyuubi.ha.zookeeper.auth.keytab: Zookeeper认证使用的keytab
Kyuubi Server Kerberos认证配置
- kyuubi.authentication: 配置为
KERBEROS
- kyuubi.kinit.principal: Kyuubi使用的Kerberos principal
- kyuubi.kinit.keytab: Kyuubi使用的Kerberos principal对应的keytab
注意:如果Kyuubi server使用的principal对应Hadoop的用户没有访问HDFS和提交Yarn作业的权限,则只能使用user impersonation。
Engine类型配置
- kyuubi.engine.type: 默认为
SPARK_SQL
。支持SPARK_SQL
,FLINK_SQL
,TRINO
,HIVE_SQL
和JDBC
。
引擎共享策略配置
对应配置项为:kyuubi.engine.share.level
。支持如下配置值:
- CONNECTION: Engine不共享,每个连接都会创建一个对应的engine为之服务。
- USER: 相同用户使用同一个Engine。此项为默认值。
- GROUP:属于同一组的用户使用同一个Engine。
- SERVER:所有用户共享同一个Engine。
kyuubi-env.sh 配置
kyuubi-env.sh
用来配置环境信息。例如JAVA_HOME,Spark/Flink安装目录,配置文件目录等。按照配置文件中注释补充需要的配置项即可。例如使用Spark Engine的时候我们必须配置:
SPARK_HOME
HADOOP_CONF_DIR
YARN_CONF_DIR
User impersonation 配置
例如启动Kyuubi server对应的Hadoop用户为kyuubi。编辑core-site.xml
。加入如下配置:
<property>
<name>hadoop.proxyuser.kyuubi.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.kyuubi.users</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.kyuubi.groups</name>
<value>*</value>
</property>
保存后重启HDFS和Yarn。
注意:这里配置值使用*
会导致可代理的用户范围过大,实际使用时酌情调整。
启动服务
kyuubi服务启动/停止/重启:
bin/kyuubi start/stop/restart
如果启用了HA,可在多个节点使用相同配置启动多个Kyuubi Server实例。
连接Kyuubi
连接Kerberos认证的集群前需要kinit:
kinit kyuubi/hostname@PAULTECH -kt /etc/security/keytabs/kyuubi.keytab
以下命令需要进入到Kyuubi安装目录的bin
目录执行。
非HA方式连接:
./beeline -u 'jdbc:hive2://kyuubi_server:10009/;principal=kyuubi/hostname@PAULTECH'
HA方式连接:
./beeline -u 'jdbc:hive2://zk1:2181,zk2:2181,zk3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi;principal=kyuubi/hostname@PAULTECH'
非Kerberos集群使用无需指定principal
参数。
连接URL参数解析:
- serviceDiscoveryMode:
zooKeeper
表示使用Zookeeper作为服务发现,配置HA的时候使用。 - zooKeeperNamespace: 对应
kyuubi-defaults.conf
中的kyuubi.ha.namespace
。zk命名空间。 - principal: 连接Kerberos集群的时候需要指定Kyuubi的principal。和
kyuubi-defaults.conf
中的kyuubi.kinit.principal
相同。否则会认证失败。
多租户
Kyuubi在设计上支持多租户。目前Spark Engine对多租户的支持最为完善。使用租户身份连接Kyuubi server有如下两种方法。
方法一
kinit Kyuubi Server启动用户对应的principal。连接URL中principal
配置Kyuubi Server用户对应的principal。然后在连接URL后增加hive.server2.proxy.user
参数,指定使用哪个租户。要求租户需要具有HDFS访问权限和Yarn队列提交任务权限。
例如租户为paul
时,我们执行:
./beeline -u 'jdbc:hive2://zk1:2181,zk2:2181,zk3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi;principal=kyuubi/hostname@PAULTECH;hive.server2.proxy.user=paul'
可以看到Kyuubi engine启动执行spark-submit
使用的--proxy-user
参数为paul
。
方法二
kinit租户对应的principal。连接URL中principal
配置Kyuubi Server用户对应的principal。
需要注意:如果租户访问(例如使用beeline)和Kyuubi Server在同一个节点时,不要和Kyuubi Server公用一个ticket cache。建议切换到其他Linux用户再执行kinit。
然后执行如下命令。不再需要添加hive.server2.proxy.user
参数。
./beeline -u 'jdbc:hive2://zk1:2181,zk2:2181,zk3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi;principal=kyuubi/hostname@PAULTECH'
备注
可以使用spark.yarn.queue
指定Spark Engine在Yarn的哪个队列中运行。该配置可以写到连接URL中或者是kyuubi-defaults.conf
中。
网友评论