HDP Spark2 HIVE3.1 的問題

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

  可是查一了下 hive 表,明明是存在這個表的。查看日誌,注意到以下的一段日誌。shell

沒修改值以前,我在 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  的值,仍然如此。session

網上的另外幾種方法:app

1. 把 hive-site.xml 複製到 Spark 的 conf 目錄下。ui

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

2. 建立 spark session 的時候要啓用 hive。日誌

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

個人程序裏有啓用的,因此也不是緣由。code

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

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

   試過以後,問題依舊。blog

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

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

      有別的事,先作別的了。過了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。 

相關文章
相關標籤/搜索