HDP Spark2 HIVE3.1 的問題


    HDP 上安裝了 Hive3.1 和 Spark2, 提交 Spark 作業時,報找不到 Hive 中表的問題

  但是查一了下 hive 表,明明是存在這個表的。查看日志,注意到如下的一段日志。

沒修改值之前,我在 Spark-shell 里創建了一張 hive 表,發現其創建的位置是 spark.sql.warehouse.dir 指向的目錄,不在 hive.metastore.warehouse.dir 目錄里 (其實這個值在 hive 中的配置,但是 spark 的 conf 下的目錄里沒有配置)。我在 spark 的 conf 目錄里增加了 hive.metastore.warehouse.dir 的值,使其與 hive 中配置的值一樣。可是我修改后,在 spark-shell 里查尋表時,依然顯示是剛才創建的表。我把 spark.sql.warehouse.dir 的值也改成 hive.metastore.warehouse.dir  的值,仍然如此。

網上的另外幾種方法:

1. 把 hive-site.xml 復制到 Spark 的 conf 目錄下。

    我看了一下 spark 的 conf 目錄,有 hive-site.xml 這個表的,而且從日志中也可以看到 spark 能找到 hive 的 thrift://datacenter2:9083 這個地址,說明沒問題。

2. 創建 spark session 的時候要啟用 hive。

val ss = SparkSession.builder().appName("統計").enableHiveSupport().getOrCreate()

我的程序里有啟用的,所以也不是原因。

3. 關閉 Hive 3 中的默認的 ACID 功能,修改如下幾個參數

hive.strict.managed.tables=false 
hive.create.as.insert.only=false 
metastore.create.as.acid=false

   試過之后,問題依舊。

   崩潰了,找不到其它解決方法了。先記錄一下。

 ================================================

      有別的事,先做別的了。過了2天,抱着試試看的態度,在 /etc/spark2/3.1.0.0-78/0 下建了個軟鏈接到  /etc/hive/conf 下的 hive-site.xml ,竟然找得到表了。通過比較,發現原 spark 下的 hive-site.xml 里多了一個 metastore.catalog.default 的配置,值是 spark。在網上搜了一下,才知道要改成 hive 才可以讀 hive 下創建的表。這個值我理解的是表示hive倉庫的命名空間。為什么 Spark 沒有默認設置成 hive 的 catalog 的呢? 因為 HDP 3.1 中的 hive 會默認開啟 ACID,spark 讀取 ACID 的 表時,會出錯,所以設置了一個 spark 的 catalog。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM