Spark SQL 讀到的記錄數與 hive 讀到的不一致


    問題:我用 sqoop 把 Mysql 中的數據導入到 hive,使用了--delete-target-dir --hive-import --hive-overwrite 等參數,執行了兩次。 mysql 中只有 20 條記錄。在 hive shell 中,查詢導入到的表的記錄,得到結果 20 條,是對的。

然而在 spark-shell 中,使用 spark sql 得到的結果卻是 40 條。

又執行了一次 sqoop 的導入,hive 中仍然查詢到 20 條,而 spark shell 中卻得到了 60 條!!

查了一下 HDFS 上,結果發現有 3 個文件

 

后來在網上看到有說 Hortonworks 中,用 Ambari 部署的 hive(V3.0),默認是開啟 ACID 的,Spark 不支持 hive 的 ACID。更改 hive 的如下參數,關閉 ACID 功能。

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

刪除 hive 中的表,重新導入。

可以看到,表目錄下的文件名變了,不是原來的 base_ 開頭的了。

用 overwrite 的方式導入多次,也還是只有這兩個文件,spark sql 讀取的數據也沒有出現翻倍的現象。

    至此,問題算是解決了。但是不明白為什么 hive 開啟 ACID 時,盡管表目錄下有多個文件,但是 hive shell 能知道到底哪個是正確的,而 spark 則不知道。估計只有研究源碼才能解決問題了。

 


免責聲明!

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



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