<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Kyuubi 剖析 | Apache Kyuubi(Incubating) 核心功能調(diào)研

          共 4666字,需瀏覽 10分鐘

           ·

          2021-11-24 02:18

          ? ?




          作者簡介


          王震

          愛奇藝高級研發(fā)工程師,負責大數(shù)據(jù)計算平臺的開發(fā)和維護工作

          Apache?Linkis?(Incubating) PPMC

          Apache Kyuubi (Incubating)?Contributor



          背景


          ? ? Apache Kyuubi (Incubating) 是 Spark Thrift Server 增強版實現(xiàn),實現(xiàn) HiveServer2 協(xié)議,啟動一個 Thrift 服務(wù),通過 JDBC 方式接收 Spark SQL 請求并執(zhí)行。我司通過提供 Kyuubi 服務(wù), 實現(xiàn) Hive SQL 到 Spark SQL 的遷移,同時提供 Ad-hoc 查詢服務(wù)。

          ? ? 目前使用版本是 Kyuubi 0.7 版本,社區(qū)最新的 Kyuubi 1.4.0 版本帶來了很大的架構(gòu)優(yōu)化,所以做如下的調(diào)研測試。


          測試環(huán)境部署



          版本信息

          ? ? Kyuubi 版本:1.4.0 (未發(fā)布,master 分支)

          ? ? Spark 版本:3.1.1

          打包編譯

          ? ? 拉取 Kyuubi 代碼,并執(zhí)行打包命令,完成后上傳至服務(wù)器

          1
          ./build/dist --tgz --spark-provided -Pkyuubi-extension-spark-3-1  # 打包

          配置

          1. 綁定IP和端口

            配置 Kyuubi Server 服務(wù) IP 和端口

            1
            2
            kyuubi.frontend.bind.host       0.0.0.0
            kyuubi.frontend.bind.port 10015
          2. 配置 KERBEROS 認證

            Hadoop 集群開啟了 Kerberos 認證,則配置 Kerberos 認證,并添加 Kerberos 相關(guān)配置,使用 hue 用戶代理運行。

            1
            2
            3
            kyuubi.authentication   KERBEROS
            kyuubi.kinit.principal hue/_HOST@***.COM
            kyuubi.kinit.keytab /etc/kyuubi/conf/hue.keytab
          3. Zookeeper 配置

            Kyuubi 依賴 Zookeeper 做服務(wù)發(fā)現(xiàn)和 HA,所以需要添加 Zookeeper 配置并使用了 DIGEST 認證。

            1
            2
            3
            kyuubi.ha.zookeeper.quorum=192.168.1.100:2181
            kyuubi.ha.zookeeper.auth.type=DIGEST
            kyuubi.ha.zookeeper.auth.digest=hue:hue
          4. 配置 Namespace

            不同集群的 Kyuubi Server 使用同一個 Zookeeper 集群,配置不同 Namespace 隔離,后續(xù)連接時只需要指定?zooKeeperNamespace?訪問不同集群。

            1
            2
            kyuubi.ha.zookeeper.namespace=kyuubi_cluster001
            kyuubi.session.engine.initialize.timeout=180000

          功能調(diào)研


          Beeline 連接 Kyuubi

          ? ? 使用 beeline 工具連接 Kyuubi 進行測試,Kyuubi JDBC 鏈接包括了以下配置:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          # zookeeper 連接
          ZOOKEEPER_QUORUM=192.168.1.100:2181
          # 集群名稱
          CLUSTER=cluster001
          # spark 配置
          SPARKI_CONFS=spark.executor.instances=10;spark.executor.memory=3g
          # kyuubi 配置
          KYUUBI_CONFS=$SPARKI_CONFS;kyuubi.engine.share.level=CONNECTION

          # jdbc 鏈接
          JBDC_URL="jdbc:hive2://${ZOOKEEPER_QUORUM}/default;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi_$CLUSTER?$KYUUBI_CONFS"

          # 使用 beeline 連接
          beeline -u "$JBDC_URL"

          相關(guān)說明:

          • 由于 JDBC 鏈接會有分號等字符,beeline 連接時 JDBC 鏈接需要帶上引號。

          • Hive 和 Spark 中都有 beeline 命令,可能與 Kyuubi Server 存在兼容性問題,需要使用合適的 beeline 路徑。

          共享引擎策略

          1. 引擎共享策略
            Kyuubi 支持共享引擎,可通?kyuubi.engine.share.level?配置不同共享級別,共享級別定義如下:

            • CONNECTION:連接級別,引擎適用于一次 jdbc connection,不做其他共享,此配置適用于離線 ETL 任務(wù),使得不同任務(wù)之間相互隔離。

            • USER:用戶級別共享,引擎可以在同一個用戶的不同連接進行共享,適用于 AdHoc 查詢和較小的任務(wù),可以節(jié)省資源,并在有可用引擎時支持快速響應(yīng)。

            • SERVER:服務(wù)級別共享(全局共享),引擎可以全局共享,所有連接可以共享一個引擎,不過啟動引擎的用戶需要具有較高權(quán)限才能滿足訪問不同用戶的表。

          2. 引擎使用單個 SparkSession
            默認情況下,共享引擎對于新的 Connection 連接,使用的新的 SparkSession,不同連接共享 SparkContext 的資源,不過一些 session 級別的參數(shù)、函數(shù)、臨時表等都是隔離開的??梢酝ㄟ^kyuubi.engine.single.spark.session參數(shù),使用全局的 SparkSession,使得不同連接可以共享 Session 狀態(tài),包括參數(shù)、函數(shù)、臨時表等。

          3. 引擎 TTL
            對于共享引擎,多個連接共享使用,并不由某個連接單獨管理,在某個連接關(guān)閉后引擎不會馬上退出,而是在引擎空閑的時間超過配置的超時時間后自動退出,通過kyuubi.session.engine.idle.timeout?參數(shù)進行配置。

          ? ??

          ? ? 對于共享引擎,官方公眾號有更詳細介紹:Apache Kyuubi:靈活運用引擎隔離共享,加速即席查詢,支持大規(guī)模 ETL

          用戶默認配置

          ? ? Kyuubi 支持用戶級別的默認配置,可以為不同用戶配置不同的參數(shù),詳見:Settings: User Defaults

          ? ? 下面示例,給 user1 和 user2 設(shè)置了不同的隊列和動態(tài)資源最大 Executor 數(shù):

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          # For system defaults
          spark.master=yarn;
          spark.submit.deployMode=cluster
          spark.dynamicAllocation.enabled=true;

          # user1
          __user1__.spark.yarn.queue=root.queue1;
          __user2__.spark.dynamicAllocation.maxExecutors=200;

          # user2
          __user2__.spark.yarn.queue=root.queue2;
          __user2__.spark.dynamicAllocation.maxExecutors=500;

          Kyuubi Spark SQL Extensions

          ? ? Kyuubi 中實現(xiàn)了一些 Spark SQL 的優(yōu)化,可通過?spark.sql.extensions=org.apache.kyuubi.sql.KyuubiSparkSQLExtension?配置開啟,具體:Auxiliary SQL extension for Spark SQL 的官方文檔。

          解決小文件問題:

          ? ? KyuubiSparkSQLExtension 中定義了?RepartitionBeforeWritingHive?和?RepartitionBeforeWritingDatasource?規(guī)則,在寫入 Hive 或 DataSource 前插入 Repartition 操作,來控制寫入的分區(qū)數(shù),可通過?spark.sql.optimizer.insertRepartitionNum?參數(shù)配置 Repartition 操作的分區(qū)數(shù)。
          ? ? 對于動態(tài)分區(qū)寫入,加了一個隨機數(shù)來解決 Repartition 可能帶來的數(shù)據(jù)傾斜的問題,不過可能會導致小文件,通過?spark.sql.optimizer.dynamicPartitionInsertionRepartitionNum?配置可設(shè)置動態(tài)分區(qū) Repartition 操作插入的隨機分區(qū)數(shù)。



          Kyuubi Metrics

          ? ? Kyuubi Server 中也定義了一些監(jiān)控指標,用于監(jiān)控 Kyuubi Server 的運行狀況,支持了很多的 Reporter,包括 Prometheus,后續(xù)工作需要將指標投遞到 Prometheus 中,對 Kyuubi 服務(wù)進行監(jiān)控告警。具體參考:Kyuubi Server Metrics 官方文檔。

          Kyuubi Ctl

          ? ? Kyuubi 的 bin 目錄中提供了?kyuubi-ctl?工具,目前主要用于維護 Server 和 Engine 實例的狀態(tài),可以獲取和刪除 Server 和 Engine 在 Zookeeper 上的注冊信息。

          ? ? 目前包括了,下面一些命令,可執(zhí)行?bin/kyuubi-ctl --help?獲取完整幫助信息。

          1
          2
          3
          4
          5
          6
          Command: get [server|engine] [options]
          Get the service/engine node info, host and port needed.
          Command: delete [server|engine] [options]
          Delete the specified service/engine node, host and port needed.
          Command: list [server|engine] [options]
          List all the service/engine nodes for a particular domain.

          ? ? 后續(xù)在服務(wù)做灰度升級時,可通過?kyuubi-ctl?命令,先下線 KyuubiServer 注冊信息,切斷 KyuubiServer 流量,等一段時間后該 KyuubiServer 上連接都關(guān)閉后,下線該服務(wù)。


          后續(xù)規(guī)劃


          1. 共享策略

            • 離線 SQL:對于離線 SQL 為了保證任務(wù)穩(wěn)定性,不使用共享引擎,保證任務(wù)進行完全隔離不相互影響。

            • Adhoc 任務(wù):使用 User 級別共享,加大 TTL 時間,讓引擎盡量常駐,使得 Adhoc 查詢能夠及時響應(yīng);需要考慮 Spark 調(diào)度策略,防止資源搶占導致響應(yīng)慢。

          2. 配置管理
            目前考慮將配置交由上游系統(tǒng)管理,根據(jù)標簽設(shè)置不同配置,任務(wù)提交時帶上相應(yīng)的標簽即可。



          點個在看你最好看

          瀏覽 354
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  夜夜骚AV一二三区无码 | 美女第一操逼网站 | 风间由美一二三区AV片 | 免费无码毛片一区二区本码视频 | 国产伦精品一区二区三区妓女原神 |