Kyuubi 編譯配置和使用指南 背景 環境信息 編譯 配置 啓動服務 連接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支持高可用。

  • 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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章