什麼是Hive?
Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供類SQL查詢功能(HQL)。node
2.HIve的意義(最初研發的緣由)
減小開發人員的開發成本和學習成本。web
3.Hive的內部組成模塊,做用分別是什麼
元數據:描述數據的數據
內部執行流程:
解析器(解析SQL語句)、編譯器(把SQL語句編譯成MapReduce程序)、優化器(優化MapRedue程序)、執行器(將MapReduce程序運行的結果提交到HDFS)正則表達式
4.Hive支持的數據格式
Text,SequenceFile,ParquetFile,ORC,RCFILEshell
5.進入Hiveshell窗口的方式?
第一種交互方式:Hive交互shell(直接經過bin/hive的方式)
第二種交互方式:Hive JDBC服務
1.啓動hiveserver2服務
前臺:bin/hive --service hiveserver2
2.beeline鏈接hiveserver2
beeline
beeline> !connect jdbc:hive2://node01:10000數據庫
6.Hive數據庫、表在HDFS上存儲的路徑時什麼?
/user/hive/warehouseapp
七、like與rlike的區別
like:like是模糊匹配查詢
rlike:rlike支持正則表達式。jvm
8.內部表與外部表的區別?
內部表刪除將表的元數據和數據同時刪除。
外部表的元數據被刪除,數據自己不刪除。svg
9.分區表的優勢是,分區字段的要求是?
優勢:
指定分區查詢,提升查詢,分析的效率
要求:
分區字段絕對不能出如今數據表以有的字段中。函數
十、分桶表的優勢是,分桶字段的要求是?
優勢:
一、對於join的需求,可以起到優化加速的做用。(前提是,join字段設置爲分桶字段)
二、用於數據取樣(獲取/提取數據樣本)
要求:
分桶字段必須是表中的字段工具
十一、數據導入表的方式
1.直接向表中插入數據
2.經過查詢插入數據
3.多插入模式
4.查詢語句中建立表並加載數據
5.建立表時經過location指定加載數據路徑
12.數據導出表的方式
一、將查詢的結果導出到本地
二、將查詢的結果格式化導出到本地
三、將查詢的結果導出到HDFS上(沒有local)
四、Hadoop命令導出到本地
5 、hive shell 命令導出
六、export導出到HDFS上(全表導出)
7. sqoop導出
1三、order by與sort by的區別
order by:全局排序,一個MapReduce
sort by: 對每一個分區內進行排序,對全局結果集來講不是排序。
14.where 與having的區別?
「Where」是一個約束聲明,在查詢數據庫的結果返回以前對數據庫中的查詢條件進行約束,即在結果返回以前起做用,且where後面不能使用「聚合函數」;
「Having」是一個過濾聲明,所謂過濾是在查詢數據庫的結果返回以後進行過濾,即在結果返回以後起做用,而且having後面可使用「聚合函數」。
1五、distribute by什麼時候使用,一般與哪一個聯合使用?
當須要根據某個字段 進行 分區時 使用
一般與sort by 結合使用(先分區後排序)
Hive要求DISTRIBUTE BY語句要寫在SORT BY語句以前。
16.Cluster by什麼時候使用?
須要按照某個字段分區同時也按照這個字段進行升序排序時使用cluster by
17. distribute by+sort by(相同字段) 與Cluster by的區別?
distribute by+sort by 方式能夠指定正序和倒序
Cluster 只能是正序,沒法指定排序方式
18.hive -e/-f/-hiveconf分別是什麼意思?
-e從命令行執行指定的HQL
-f 執行HQL腳本
-hiveconf 設置hive運行時候的參數配置
1九、hive聲明參數有哪些方式,優先級是什麼?
配置文件<命令行參數<參數聲明
20.編寫hiveUDF代碼,方法名稱叫什麼?
evaluate
21.企業中hive經常使用的數據存儲格式是什麼?經常使用的數據壓縮格式是什麼?
存儲格式是ORC,ParquetFile格式,
數據壓縮格式是snappy
22.hive自定義函數的類型
自定義函數分爲三個類別:
UDF(User Defined Function):一進一出
UDAF(User Defined Aggregation Function):彙集函數,多進一出(例如count/max/min)
UDTF(User Defined Table Generating Function):一進多出,如lateral view explode()
23.Fetch抓取中設置more有什麼效果,設置none有什麼效果?
設置成more,簡單的查詢語句不會轉化成爲MR程序
設置成none,全部查詢語句都要轉化成爲MR程序
2四、本地模式有什麼好處
在小數據量的前提下 提升了查詢效率
25.當一個key數據過大致使數據傾斜時,如何處理
開啓Map端聚合和功能開啓局部聚合後 hive會建立兩個MR 程序
第一個進行數據的局部聚合
第二個進行數據的最終彙總
2六、Count(distinct) 的替換語句如何編寫
SELECT count(DISTINCT id) FROM bigtable;
替換語句
SELECT count(id) FROM (SELECT id FROM bigtable GROUP BY id) a;
先過濾在管理
2七、如何使用分區剪裁、列剪裁
列剪裁: 只拿須要的列
分區剪裁:只拿須要的分區
要什麼 拿什麼
28.如何理解動態分區調整
以第一個表的分區規則,來對應第二個表的分區規則,將第一個表的全部分區,所有拷貝到第二個表中來,第二個表在加載數據的時候,不須要指定分區了,直接用第一個表的分區便可
29.數據傾斜時,如何將衆多數據寫入10個文件
(將一個大的任務拆分紅多個小任務,再次執行)
設置reduce數量(10)
1:distribute by (字段)
2 distribute by rand()
30.影響map數量的因素
文件很小時候:影響map數量的因素是文件數量
文件很大時候:影響map數量的因素是塊的數量
31.reduce數量的計算是什麼
公式:
N=min(參數2,總輸入數據量/參數1)
參數1:每一個Reduce處理的最大數據量
參數2:每一個任務最大Reduce數量
32.並行執行有什麼好處
並行執行使得多個沒有依賴關係的任務同時執行,起到了提升查詢效率的做用
33.嚴格模式不能執行哪些命令
一、不容許掃描全部分區
二、使用了order by語句查詢,要求必須使用limit語句
三、限制笛卡爾積的查詢
34.JVM重用有什麼好處
容許多個task使用一個jvm
下降了任務啓動的開銷,提升了任務的執行效率
(可是,在整個任務結束前,jvm不釋放,長時間佔用。致使資源不足時,資源浪費)
35. 什麼是MR本地模式
任務在提交SQL語句的節點上"本地執行",任務不會分配到集羣
36. 什麼是本地計算
數據存儲到HDFS後,編寫分析代碼實現計算程序,程序在進行分發時,優先分發放到這個程序所使用到的數據所在的節點上。
37.先join後過濾的優化方案
1.將過濾條件寫在join…on 的 on中
SELECT a.id FROM ori a LEFT JOIN bigtable b
ON (b.id <= 10 AND a.id = b.id);
2.將過濾條件寫在join…on 的join,子查詢過濾
SELECT a.id FROM bigtable a RIGHT JOIN (SELECT id FROM ori WHERE id <= 10 ) b ON a.id = b.id;
本文同步分享在 博客「Alice菌」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。