Hive考覈面試題

1、什麼是Hive
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供類SQL查詢功能(HQL)。

2、Hive的意義(最初研發的原因)
背景:hadoop是個好東西,但是學習難度大,成本高,坡度陡。
意義(目的):降低程序員使用hadoop的難度。降低學習成本。

3、Hive的內部組成模塊,作用分別是什麼
元數據:描述數據的數據(屬性)
表名稱、字段名,字段的數據類型。
內部執行流程

用戶接口:包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)爲shell命令行;JDBC/ODBC是Hive的JAVA實現,與傳統數據庫JDBC類似;WebGUI是通過瀏覽器訪問Hive。
元數據存儲:通常是存儲在關係數據庫如mysql/derby中。Hive 將元數據存儲在數據庫中。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否爲外部表等),表的數據所在目錄等。
解釋器、編譯器、優化器、執行器:完成HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在HDFS 中,並在隨後有MapReduce 調用執行。

解釋器 -> 編譯器 -> 優化器 -> 執行器
解析sql語句
編譯sql成mp程序
對程序進行優化
提交程序

4、Hive支持的數據格式
可支持Text,
SequenceFile,
ParquetFile,
ORC格式
RCFILE等

5、進入Hiveshell窗口的方式
1、在Hive客戶端,配置hive到環境變量的前提下,在節點的任意位置 直接數據hive + 回車
2、啓動hiveserver2 服務
在另一個節點進入beelin的shell窗口
連接hiveserver2服務
!connect jdbc:hive2://node01:10000
6、Hive數據庫、表在HDFS上存儲的路徑時什麼
/user/hive/warehouse

7、like與rlike的區別
like不是正則,而是通配符。這個通配符可以看一下SQL的標準,例如%代表任意多個字符。
rlike是正則,正則的寫法與java一樣。’‘需要使用’\’,例如’\w’需要使用’\w’

8、內部表與外部表的區別
在刪除內部表時:內部表刪除將表的元數據和數據同時刪除。
在刪除外部表時:外部表的元數據被刪除,數據本身不刪除。

9、分區表的優點是,分區字段的要求是
要求:分區字段絕對不能出現在數據表以有的字段中。
優點:將數據按區域劃分開,查詢時不用掃描無關的數據,加快查詢速度。

10、分桶表的優點是,分桶字段的要求是
要求:分桶字段必須是表中的字段。
優點:1、對於join的需求,能夠起到優化加速的作用。(前提是,join字段設置爲分桶字段)
2、用於數據取樣(獲取/提取數據樣本)
將數據編號作爲分桶字段。這樣每個桶內各種“級別”的數據都有。

11、數據導入表的方式
1、直接向分區表中插入數據
2、通過查詢插入數據
3、多插入模式
4、查詢語句中創建表並加載數據(as select)
5、創建表時通過location指定加載數據路徑

12、數據導出表的方式
1、將查詢的結果導出到本地
2、將查詢的結果格式化導出到本地
3、將查詢的結果導出到HDFS上(沒有local)
4、Hadoop命令導出到本地
5 、Hive shell 命令導出
6、export導出到HDFS上(全表導出)
7、SQOOP導出(後面再學)

13、order by與sort by的區別
1、使用order by會引發全局排序
2、sort by會對每組數據進行局部排序。

14、where 與having的區別
where 作用在 分組(group by)和聚集(sum等)計算之前
having作用在 分組(group by)之後,對分組後計算的數據進行過濾

15、distribute by何時使用,通常與哪個聯合使用
當需要根據某個字段進行分區時使用
通常與sort by結合使用(先分區後排序)
Hive要求DISTRIBUTE BY語句要寫在SORT BY語句之前。

16、Cluster by何時使用
需要按照某個字段分區同時也按照這個字段進行排序時使用cluster by

17、distribute by+sort by(相同字段) 與Cluster by的區別

18、hive -e/-f/-hiveconf分別是什麼意思
-e:從命令行執行指定的 HQL
-f:執行 HQL 腳本
-hiveconf:hive相關配置屬性

19、hive聲明參數有哪些方式,優先級是什麼
參數聲明 > 命令行參數 > 配置文件參數

20、編寫hiveUDF代碼,方法名稱叫什麼
evaluate()

21、企業中hive常用的數據存儲格式是什麼?常用的數據壓縮格式是什麼?
常用的數據存儲格式是:ParquetFile、ORC
常用的數據壓縮格式是:Snappy

22、hive自定義函數的類型
1、UDF(User-Defined-Function) 一進一出
2、UDAF(User-Defined Aggregation Function) 聚合函數,多進一處
3、UDTF(User-Defined Table-Generating Functions) 一進多出

================
23、Fetch抓取中設置more有什麼效果,設置none有什麼效果?
簡單的查詢語句不會轉化成爲MR程序
設置爲none後所有查詢語句都要轉化成爲MR程序

24、本地模式有什麼好處
在小數據量的前提下 提高了查詢效率

25、當一個key數據過大導致數據傾斜時,如何處理
開啓Map端聚合和功能
開啓局部聚合後 hive會創建兩個MR 程序 第一個進行數據的局部聚合 第二個進行數據的最終彙總

26、Count(distinct) 的替換語句如何編寫
先去重,再求總數量
SELECT count(DISTINCT id) FROM bigtable;
替換方案 SELECT count(id) FROM (SELECT id FROM bigtable GROUP BY id) a;

27、如何使用分區剪裁、列剪裁
列剪裁: 只拿需要的列
分區剪裁:只拿需要的分區
要什麼 拿什麼

28、如何理解動態分區調整
以第一個表的分區規則,來對應第二個表的分區規則,將第一個表的所有分區,全部拷貝到第二個表中來,第二個表在加載數據的時候,不需要指定分區了,直接用第一個表的分區即可

29、數據傾斜時,如何將衆多數據寫入10個文件
(衆人拾柴火焰高(將一個大的任務拆分成多個小任務,再次執行)
先設置reduce數量10
1:distribute by (字段)
2 distribute by rand()

30、reduce數量的計算是什麼
公式: N=min(參數2,總輸入數據量/參數1)
參數1:每個Reduce處理的最大數據量
參數2:每個任務最大Reduce數量

31、並行執行有什麼好處
並行執行使得多個沒有依賴關係的任務同時執行,起到了提高查詢效率的作用

32、嚴格模式不能執行哪些命令
1、不允許掃描所有分區
2、使用了order by語句查詢,要求必須使用limit語句
3、限制笛卡爾積的查詢

33、JVM重用有什麼好處
允許多個task使用一個jvm
降低了任務啓動的開銷,提高了任務的執行效率
但是,在整個任務結束前,jvm不釋放,長時間佔用。導致資源不足時,資源浪費

34、什麼是MR本地計算
數據存儲到HDFS後,編寫分析代碼實現計算程序,程序在進行分發時,優先分發放到這個程序所使用到的數據所在的節點上。

35、先join後過濾的優化方案
優化方案 先過濾再關聯
1、SELECT a.id FROM ori a LEFT JOIN bigtable b
ON (b.id <= 10 AND a.id = b.id);
2、SELECT a.id FROM bigtable a RIGHT JOIN (SELECT id FROM ori WHERE id <= 10 ) b ON a.id = b.id;

36、影響Map的數量的因素
文件很小時候:影響map數量的因素是文件數量
文件很大時候:影響map數量的因素是塊的數量

37什麼是MR本地模式
任務在提交SQL語句的節點上“本地”執行,任務不會分配到集羣。
作用或好處:在小數據量的前提下,提高查詢效率

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章