Hive面試題收集
1.Hive 原理
1. 使用者提交查詢等任務給Driver。
2. 編譯器獲得該使用者的任務Plan。
3. 編譯器Compiler根據使用者任務去MetaStore中獲取需要的Hive的元資料資訊。
4. 編譯器Compiler得到元資料資訊,對任務進行編譯,先將HiveQL轉換為抽象語法樹,然後將抽象語法樹轉換成查詢塊,將查詢塊轉化為邏輯的查詢計劃,重寫邏輯查詢計劃,將邏輯計劃轉化為物理的計劃(MapReduce), 最後選擇最佳的策略。
5. 將最終的計劃提交給Driver。
6. Driver將計劃Plan轉交給ExecutionEngine去執行,獲取元資料資訊,提交給JobTracker或者SourceManager執行該任務,任務會直接讀取HDFS中檔案進行相應的操作。
7. 獲取執行的結果。
8. 取得並返回執行結果。
2.Mapreduce和hive的區別和聯絡
http://www.360doc.com/content/14/1208/10/20466010_431234360.shtml
3.hive是基於hadoop的資料倉庫。那麼為什麼說hive是基於Hadoop的呢?
之所以說hive是構建在Hadoop之上的資料倉庫,簡單的說是因為:
①資料儲存在hdfs上
②資料計算用mapreduce
Hive是一種建立在Hadoop檔案系統上的資料倉庫架構,並對儲存在HDFS中的資料進行分析和管理;它可以將結構化的資料檔案對映為一張資料庫表,並提供完整的 SQL 查詢功能,可以將 SQL 語句轉換為 MapReduce 任務進行執行,通過自己的 SQL 去查詢分析需要的內容,這套 SQL 簡稱 Hive SQL(HQL),使不熟悉MapReduce 的使用者也能很方便地利用 SQL 語言對資料進行查詢、彙總、分析。
Hive不支援更改資料的操作,Hive基於資料倉庫,提供靜態資料的動態查詢。其使用類SQL語言,底層經過編譯轉為MapReduce程式,在hadoop上執行,資料儲存在HDFS上。
3.簡述有Hive之後,為何還要學mapreduce
https://blog.csdn.net/WYpersist/article/details/79981385
3.你覺得Hive是否支援in函式
https://blog.csdn.net/WYpersist/article/details/79980945
4.當輸入hive 命令時卡住了,你認為是為什麼,從哪些方面考慮
Cpu ,網路,記憶體
5.說出Hive 安裝資料時,mysql和Derby的區別,為什麼安裝mysql ,或為什麼安裝Derby,分別有什麼優缺陷
https://blog.csdn.net/WYpersist/article/details/80101617
6.簡述Hive 桶表什麼,什麼作用,舉例
7.Hive 分割槽是什麼,什麼作用,該怎麼分割槽
8.Hive 動態分割槽和靜態分割槽
10.說出Hive 匯入資料的過程(表有多個分割槽,桶)
11.Hive 排序
12.說說你所理解的Hive 檢視操作
13.Hive 序列函式
14.簡述Hive 自定義函式
15.知道Hive UDF是什麼嗎,什麼作用,為什麼要用
16.簡述Hive 優缺點
https://blog.csdn.net/wypersist/article/details/79999401
17.說說Hive內部表和外部表,為什麼要建外部表
Hive 內部表和外部表的區別
Hive 建立內部表時,會將資料移動到資料倉庫指向的路徑;若建立外部表,僅記錄資料所在的路徑,不對資料的位置做任何改變。在刪除表的時候,內部表的元資料和資料會被一起刪除,而外部表只刪除元資料,不刪除資料。這樣外部表相對來說更加安全些,資料組織也更加靈活,方便共享源資料。
需要注意的是傳統資料庫對錶資料驗證是 schema on write(寫時模式),而 Hive 在load時是不檢查資料是否符合schema的,hive 遵循的是 schema on read(讀時模式),只有在讀的時候hive才檢查、解析具體的資料欄位、schema。
讀時模式的優勢是load data 非常迅速,因為它不需要讀取資料進行解析,僅僅進行檔案的複製或者移動。
寫時模式的優勢是提升了查詢效能,因為預先解析之後可以對列建立索引,並壓縮,但這樣也會花費要多的載入時間。
被external修飾的是內部表(managed table),被external修飾的為外部表(external table);
區別:
內部表資料由Hive自身管理,外部表資料由HDFS管理;
內部表資料儲存的位置是hive.metastore.warehouse.dir(預設:/user/hive/warehouse),外部表資料的儲存位置由自己制定;
刪除內部表會直接刪除元資料(metadata)及儲存資料;刪除外部表僅僅會刪除元資料,HDFS上的檔案並不會被刪除;
對內部表的修改會將修改直接同步給元資料,而對外部表的表結構和分割槽進行修改,則需要修復(MSCK REPAIR TABLE table_name;)
https://blog.csdn.net/wypersist/article/details/80314022
18.什麼是資料傾斜
https://blog.csdn.net/shujuelin/article/details/84524805
19.Hive 表型別有哪些
https://blog.csdn.net/dsl200970/article/details/70245916
Mapreduce和hive的區別和聯絡
http://www.360doc.com/content/14/1208/10/20466010_431234360.shtml
20.說出Hive 如何調優,提升效率
https://blog.csdn.net/WYpersist/article/details/80030499
https://blog.csdn.net/WYpersist/article/details/80030921
https://blog.csdn.net/WYpersist/article/details/80032327
21.說出Hive 資料傾斜是什麼,有什麼影響,怎麼解決
Hive 程式設計題
5、海量資料分佈在100臺電腦上,統計出這批資料的TOP10。(寫出核心演算法思路)
6、背景:現有商品,買家,賣家三個實體,實現一個小小型的交易系統
1)給出表結構設計
2)帥選出沒有買過商品的使用者
3)寫出sql 語句,帥選出僅僅購買了麵粉的使用者
HIVE與RDBMS關係資料庫的區別
1、hive儲存的資料量比較大,適合海量資料,適合儲存軌跡類歷史資料,適合用來做離線分析、資料探勘運算,
事務性較差,實時性較差
rdbms一般資料量相對來說不會太大,適合事務性計算,實時性較好,更加接近上層業務
2、hive的計算引擎是hadoop的mapreduce,儲存是hadoop的hdfs檔案系統,
rdbms的引擎由資料庫自己設計實現例如mysql的innoDB,儲存用的是資料庫伺服器本地的檔案系統
3、hive由於基於hadoop所以儲存和計算的擴充套件能力都很好,
rdbms在這方面比較弱,比如orcale的分表和擴容就很頭疼
4、hive表格沒有主鍵、沒有索引、不支援對具體某一行的操作,適合對批量資料的操作,不支援對資料的update操作,
更新的話一般是先刪除表然後重新落資料
rdbms事務性強,有主鍵、索引,支援對具體某一行的增刪改查等操作
5、hive的SQL為HQL,與標準的RDBMS的SQL存在有不少的區別,相對來說功能有限
rdbms的SQL為標準SQL,功能較為強大。
22.Hive分析視窗函式
23.Hive 資料傾斜型別
24.如何解決hive 資料傾斜
25.Hive內部表和外部表的區別
https://blog.csdn.net/wypersist/article/details/80314022
26.Hive 取前10條資料
https://blog.csdn.net/wypersist/article/details/80318305
27.Hive 四種排序
https://blog.csdn.net/wypersist/article/details/80314431
28.Mysql 和hive的區別
Hive 的sql語句和mysql 的sql語句有什麼不同
Mysql和derby
Hive 將元資料儲存在 RDBMS 中,一般常用 MySQL 和 Derby。預設情況下,Hive 元資料儲存在內嵌的 Derby 資料庫中,只能允許一個會話連線,只適合簡單的測試。實際生產環境中不適用, 為了支援多使用者會話,則需要一個獨立的元資料庫,使用 MySQL 作為元資料庫,Hive 內部對 MySQL 提供了很好的支援。
內建的derby主要問題是併發效能很差,可以理解為單執行緒操作。
Derby還有一個特性。更換目錄執行操作,會找不到相關表等
比如在/usr下執行建立表,在/usr下可以找到這個表。在/etc下執行查詢這個表,就會找不到 。
29,Hive儲存格式
https://blog.csdn.net/ly19901208/article/details/77049824
30.Hive 工作原理
https://blog.csdn.net/wypersist/article/details/80174647