Spark讀取Hive on Tez任務問題
這篇博客定義爲“翻譯”,其實不太準確,並沒有嚴格意義翻譯某篇文章。主要是受了 Hive-on-Tez issue in Spark Jobs when using Hortonworks 這篇文章的啓發,解決了問題,才寫此文(此文的解決和原文提到的兩個解決方案有部分不同)。
參考 Class org.datanucleus.api.jdo.JDOPersistenceManagerFactory was not found出現的問題後續,由於HDP集羣調整Hive引擎爲Tez後,出現的問題。具體問題如下:
19/03/18 10:40:16 INFO client.TezClient: Session mode. Starting session.
19/03/18 10:40:16 INFO client.TezClientUtils: Using tez.lib.uris value from configuration: /hdp/apps/${hdp.version}/tez/tez.tar.gz
19/03/18 10:40:16 ERROR client.TezClientUtils: Invalid URI defined in configuration for location of TEZ jars. providedURI=/hdp/apps/${hdp.version}/tez/tez.tar.gz
19/03/18 10:40:16 ERROR yarn.ApplicationMaster: User class threw exception: java.lang.RuntimeException: org.apache.tez.dag.api.TezUncheckedException: Invalid URI defined in configuration for location of TEZ jars. providedURI=/hdp/apps/${hdp.version}/tez/tez.tar.gz
java.lang.RuntimeException: org.apache.tez.dag.api.TezUncheckedException: Invalid URI defined in configuration for location of TEZ jars. providedURI=/hdp/apps/${hdp.version}/tez/tez.tar.gz
參考 Hive-on-Tez issue in Spark Jobs when using Hortonworks
可以知道,在遠程發起Spark任務,讀取Hive時,指定配置文件hive-site.xml時,這個hive-site.xml是哪個?
- 指的是 /usr/hdp/current/hive-client/conf
- 指的是/usr/hdp/current/spark-client/conf
總結
一般來說,spark-client 和hive-client中的hive-site.xml是一樣的。
但是如果Hive的執行引擎設置爲Tez的時候,Spark讀取Hive的時候就不能使用hive-client中的hive-site.xml文件,而只能使用usr/hdp/current/spark-client/conf/hive-site.xml作爲指定的–files 資源文件。這樣才能在Hive on Tez的環境中使用調用Spark任務,進而讀取Hive中數據。