当前位置:
首页
文章
后端
详情

Kyuubi 编译配置和使用指南

背景

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支持高可用。我们可以使用Zookeeper提供Kyuubi的服务发现功能。

  • 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_SQLFLINK_SQLTRINOHIVE_SQLJDBC

引擎共享策略配置

对应配置项为: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
  • HIVE_HOME
  • HIVE_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要求kyuubi用户必须要有访问HDFS数据目录(表数据的存放目录)和home目录(/user/kyuubi)的权限,以及提交任务到Yarn队列的权限。在启动Kyuubi服务之前需要通过Ranger配置kyuubi具有上述权限。

启动服务

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参数。指定用户名使用-n 用户名方式,如下所示:

./beeline -u 'jdbc:hive2://zk1:2181,zk2:2181,zk3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi' -n kyuubi

连接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中。

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。

同类热门文章

深入了解C++中的new操作符:使用具体实例学习

C++中的new操作符是动态分配内存的主要手段之一。在程序运行时,我们可能需要动态地创建和销毁对象,而new就是为此提供了便利。但是,使用new也常常会引发一些问题,如内存泄漏、空指针等等。因此,本文将通过具体的示例,深入介绍C++中的new操作符,帮助读者更好地掌握其使用。


深入了解C++中的new操作符:使用具体实例学习

怎么用Java反射获取包下所有类? 详细代码实例操作

Java的反射机制就是在运行状态下,对于任何一个类,它能知道这个类的所有属性和方法;对于任何一个对象,都能调用这个对象的任意一个方法。本篇文章将通过具体的代码示例,展示如何通过Java反射来获取包下的所有类。


怎么用Java反射获取包下所有类? 详细代码实例操作

员工线上学习考试系统

有点播,直播,在线支付,三级分销等功能,可以对学员学习情况的监督监控,有源码,可二次开发。支持外网和局域网私有化部署,经过测试源码完整可用!1、视频点播:视频播放,图文资料,课件下载,章节试学,限时免

员工线上学习考试系统

了解Java中的volati关键字的作用 以及具体使用方法

本篇文章将和大家分享一下Java当中的volatile关键字,下面将为各位小伙伴讲述volatile关键字的作用以及它的具体使用方法。


了解Java中的volati关键字的作用 以及具体使用方法

Java Map 所有的值转为String类型

可以使用 Java 8 中的 Map.replaceAll() 方法将所有的值转为 String 类型: 上面的代码会将 map 中所有的值都转为 String 类型。 HashMap 是 Java

Java Map 所有的值转为String类型