通過 Spark thriftserver 操作Hudi表

背景

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

博主的環(huán)境信息:

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

環(huán)境準(zhǔn)備

首先,我們需要編譯Hudi。然后找到編譯后輸出的hudi-spark3.1-bundle_2.12-0.11.1.jarhudi-hadoop-mr-bundle-0.11.1.jar,復(fù)制到$SPARK_HOME/jars中。

找一臺(tái)已經(jīng)安裝了maven的服務(wù)器。執(zhí)行:

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

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

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

編譯輸出產(chǎn)物位于hudi/packaging/中。

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

最后使用如下命令啟動(dòng)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包真實(shí)存放路徑。前面將這兩個(gè)jar放置到了$SPARK_HOME/jars中,可以不添加這兩個(gè)配置。

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

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

執(zhí)行后有如下提示信息:

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

根據(jù)提示,我們可以查看啟動(dòng)時(shí)候的日志文件:

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

如果沒有報(bào)錯(cuò),說明啟動(dòng)成功。

最常見的錯(cuò)誤為沒有權(quán)限訪問HDFS。需要配置啟動(dòng)Spark thriftserver用戶訪問HDFS的權(quán)限(通過Ranger),或者換一個(gè)有權(quán)限的用戶啟動(dòng)thriftserver。

如果需要修改thriftserver的端口號(hào)和bind host,可以在啟動(dòng)thriftserver的命令行添加如下配置:

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

驗(yàn)證

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

注意:jdbc連接字符串中的thriftserver-ip為thriftserver所在機(jī)器的IP或hostname,后面的10000為端口號(hào)。使用的時(shí)候需要替換為真實(shí)值。

進(jìn)入beeline命令行后可以執(zhí)行建表,插入數(shù)據(jù)和查詢語句??梢哉2僮鱄udi表。

附錄

如果使用了Ambari管理Spark thriftserver,為了修改啟動(dòng)參數(shù),可以自定義spark3-thrift-server-conf配置項(xiàng),增加:

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

兩個(gè)自定義配置。然后重啟Spark thriftserver。

參考資料

Spark 官方 Thriftserver 文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容