張工是一名程式員,做java開發的,有兩年多開發經驗,有次到一家軟體公司應聘大資料開發崗位,面試官問了他這樣一個問題,
hive表有資料,但為什么impala查詢不到資料?
你能說說這是什么情況導致的,有什么辦法解決方案嗎?
對于這個問題,我們不妨來回顧下,什么情況下hive表有資料,但impala沒有資料的情況,
1. 問題描述
用insert overwrite方式往hive寫入的資料,資料寫入成功了,在hive查詢是可以查到資料的,但在impala重繪元資料后,查詢卻沒有查到,剛開始以為是元資料重繪不成功,再用命令
invalidate metadata table_name
refresh table_name
重繪成功后還是沒有資料,回傳結果為空,
2.問題追溯
往hive表寫入資料sql里使用了union ,導致hdfs目錄結構多了一層,本來資料是在磁區第一層的,使用了union 后,資料存盤到磁區底下的檔案夾了,
導致impala無法訪問到具體資料,impala版本2.12,查看impala版本命令(impala-shell -v)
3.解決方案
在寫入資料sql 后面加上 distribute by + 表中欄位 就可以了,
這是為什么呢,為什么加上distribute by +表中欄位 就可以了,
我們知道,distribute 是分配、分布的意思,顧名思義,hive中(distribute by + “表中欄位”)關鍵字就是控制map輸出結果的分發,相同欄位的map輸出會發到一個reduce節點去處理,
總結
hive表有資料,impala表沒有資料,檢查是否重繪元資料,操作命令:
invalidate metadata
refresh table_name,已經成功重繪元資料了,impala依然沒有資料, 檢查寫入hive sql 是否使用union方式,如果是,在sql 后面加上(distribute by + 表中欄位 ),
拓展:
distribute by、sort by、cluster by
由于筆者知識及水平有限,文中錯漏之處在所難免,歡迎交流,
-END-
往期推薦
mysql自增長id用完了,怎么辦?
生成服務器服務變慢了,如何排查思路?
大資料心得:impala中的重繪元資料和重繪表

微信公眾號:愛開發
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/430271.html
標籤:其他
上一篇:大資料Java基礎DAY21——集合完結(Map介面,HashMap,Linked Hash Map,TreeMap,Collections類)
下一篇:Day542.kafka基礎
