通過 Spark thriftserver 操作Hudi表 背景 環境準備 驗證 附錄 參考資料

背景

本篇主要講解如何配置Spark thriftserver,從而可以使用JDBC方式通過Spark thriftserver操作Hudi表。

博主的環境信息:

  • Spark 3.1.1
  • Hive 3.1.0
  • Hadoop 3.1.1
  • Hudi 0.11.1

環境準備

首先,我們需要編譯Hudi。然後找到編譯後輸出的hudi-spark3.1-bundle_2.12-0.11.1.jarhudi-hadoop-mr-bundle-0.11.1.jar,複製到$SPARK_HOME/jars中。

找一臺已經安裝了maven的服務器。執行:

git clone https://github.com/apache/hudi.git

源代碼clone成功之後,切換分支到origin/release-0.11.1。接着執行編譯命令(Scala版本和Spark版本需要和實際使用的Spark一致):

mvn clean package -Dspark3.1 -Dscala2.12 -DskipTests -T 4

編譯輸出產物位於hudi/packaging/中。

接下來集成Hive配置。如果Spark還沒有集成Hive metastore配置的話,需要將hive-site.xml複製到$SPARK_HOME/conf目錄中。

最後使用如下命令啓動Spark thriftserver:

$SPARK_HOME/sbin/start-thriftserver.sh \
--jars /path/to/hudi-spark3.1-bundle_2.12-0.11.1.jar \
--conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
--conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension \
--hiveconf hive.aux.jars.path=/path/to/hudi-hadoop-mr-bundle-0.11.1.jar \
--hiveconf hive.metastore.schema.verification=false \
--hiveconf datanucleus.schema.autoCreateAll=true

--jars /path/to/hudi-spark3.1-bundle_2.12-0.11.1.jar--hiveconf hive.aux.jars.path=/path/to/hudi-hadoop-mr-bundle-0.11.1.jar需要替換爲jar包真實存放路徑。前面將這兩個jar放置到了$SPARK_HOME/jars中,可以不添加這兩個配置。

以上配置是根據本人在GitHub上的提問[SUPPORT] Cannot create table via Spark thrift server · Issue #6185 · apache/hudi (github.com)的解答得知。Thriftserver的這些啓動參數不全是必需的。實測時候不可缺少的參數是這兩個:

--conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
--conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension \

執行後有如下提示信息:

starting org.apache.spark.sql.hive.thriftserver.HiveThriftServer2, logging to /var/log/spark3/spark-hdfs-org.apache.spark.sql.hive.thriftserver.HiveThriftServer2-1-xxx.out

根據提示,我們可以查看啓動時候的日誌文件:

tail -f /var/log/spark3/spark-hdfs-org.apache.spark.sql.hive.thriftserver.HiveThriftServer2-1-xxx.out

如果沒有報錯,說明啓動成功。

最常見的錯誤爲沒有權限訪問HDFS。需要配置啓動Spark thriftserver用戶訪問HDFS的權限(通過Ranger),或者換一個有權限的用戶啓動thriftserver。

如果需要修改thriftserver的端口號和bind host,可以在啓動thriftserver的命令行添加如下配置:

--hiveconf hive.server2.thrift.port=<listening-port> \
--hiveconf hive.server2.thrift.bind.host=<listening-host> \

驗證

$SPARK_HOME/bin/beeline --hiveconf hive.input.format=org.apache.hudi.hadoop.HoodieParquetInputFormat -u jdbc:hive2://thriftserver-ip:10000/default

注意:jdbc連接字符串中的thriftserver-ip爲thriftserver所在機器的IP或hostname,後面的10000爲端口號。使用的時候需要替換爲真實值。

進入beeline命令行後可以執行建表,插入數據和查詢語句。可以正常操作Hudi表。

附錄

如果使用了Ambari管理Spark thriftserver,爲了修改啓動參數,可以自定義spark3-thrift-server-conf配置項,增加:

  • spark.serializer=org.apache.spark.serializer.KryoSerializer
  • spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension

兩個自定義配置。然後重啓Spark thriftserver。

參考資料

Spark 官方 Thriftserver 文檔

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