Spark執行sql命令出錯:Uable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

運行Spark作業出現問題

異常信息:pyspark.sql.utils.AnalysisException: ‘java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;’
spark執行sql出錯截圖

問題出現原因

  • (1) PySpark 沒有找到 MySQL 的 JDBC 驅動。因此應該首先檢查在自己的hive安裝目錄的lib目錄中是否有mysql的驅動。如果沒有,則需要下載一個mysql的jdbc驅動包上傳到hive安裝目錄的lib目錄中。並且在啓動pyspark時,不能直接使用命令:pyspark,而是應該使用命令:pyspark --master spark://node1(主機名):7077 --jars (mysql的驅動包所在路徑)。如還有疑惑,可參考下面啓動命令。

    pyspark --master spark://node1:7077 --jars 	/home/hadoop/hive/lib/mysql-connector-java-5.1.46.jar
    

  • (2) hosts配置不正確導致無法連接 MySQL。因此需保證在hosts文件中含有以下配置。

    127.0.0.1  node1
    127.0.0.1  localhost
    

  • (3) hive的版本和spark中hive的版本不一致,因爲spark中hive的版本默認爲 version 1.2.0。故解決該問題,需要在hive-site.xml中添加如下配置。(hive中的hive-site.xml配置文件和spark/conf中的配置文件都需要添加)

    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    

最後,以上解決方法雖然可以單獨使用,但是不建議單獨使用。因爲以上三種解決方法我都單獨使用過,然而卻依然報錯。可是,當我三種解決方法一起使用時,卻把問題解決了。故個人強烈推薦三種解決方法一起使用。

pyspark\color{red}{溫馨提醒:需要先修改文件,最後再啓動pyspark。}

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