柚子快報邀請碼778899分享:大數(shù)據(jù) HIVE面試問題
柚子快報邀請碼778899分享:大數(shù)據(jù) HIVE面試問題
HIVE面試問題
什么是hive:
hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可將HDFS上一個結(jié)構(gòu)化的數(shù)據(jù)文件映射為數(shù)據(jù)表,方便進行管理。 HIVE也可以使用完整的SQL語句進行查詢,是把SQL語句轉(zhuǎn)換為MapReduce任務(wù)在hadoop運行,寫SQL比寫MapReduce任務(wù)學(xué)習(xí)成本低很多。
hive內(nèi)部表和外部表的區(qū)別:
未被external修飾的是內(nèi)部表,被external修飾的為外部表。 區(qū)別: 內(nèi)部表數(shù)據(jù)由Hive自身管理,外部表數(shù)據(jù)由HDFS管理,存儲位置由自己指定; 刪除內(nèi)部表會直接刪除元數(shù)據(jù)(metadata)及存儲數(shù)據(jù);刪除外部表僅僅會刪除元數(shù)據(jù),HDFS上的文件并不會被刪除。
hive存儲格式:
STORED AS TEXTFILE; --存儲的數(shù)據(jù)是文本,可以直接讀取STORED AS ORC;–存儲的數(shù)據(jù)是二進制,不可以直接讀取STORED AS PARQUET;–存儲的數(shù)據(jù)是二進制,不可以直接讀取
hiveHIVE小文件過多處理:
1)使用hive自帶的concatenate命令,自動合并小文件,但只能處理ORC,sql: alter table A concatenate;2)調(diào)整參數(shù)減少MAP數(shù)量3)調(diào)整參數(shù)減少REDUCE數(shù)量4)使用hadoop的archive將小文件歸檔,但歸檔后不能直接insert5)如果一次性解決一張歷史性遺留問題表,建議備份數(shù)據(jù)重建表,或者insert overwrite6)減少使用動態(tài)分區(qū)的使用,動態(tài)分區(qū)會產(chǎn)生大量的小文件。
Hive的兩張表關(guān)聯(lián),使用MapReduce怎么實現(xiàn)?
首先在MAP端讀取源表的數(shù)據(jù),Map輸出時候以Join on條件中的列為key,如果Join有多個關(guān)聯(lián)鍵,則以這些關(guān)聯(lián)鍵的組合作為key; Map輸出的value為join之后所關(guān)心的(select或者where中需要用到的)列;同時在value中還會包含表的Tag信息,用于標明此value對應(yīng)哪個表; 按照key進行排序,接著根據(jù)key的值進行hash,并將key/value按照hash值推送至不同的reduce中,這樣確保兩個表中相同的key位于同一個reduce中 ,最后根據(jù)key的值完成join操作,期間通過Tag來識別不同表中的數(shù)據(jù)。
HIVE特點(HIVE和RDBMS有何異同)
1)Hive不支持實時查詢,適合離線批量數(shù)據(jù)處理。2)延遲性比較高,適合對實時性不高的應(yīng)用場景,比如數(shù)倉、大數(shù)據(jù)分析3)HIVE適合數(shù)據(jù)量大的場景,商業(yè)數(shù)據(jù)庫數(shù)據(jù)量大會非常影響效率。4)HIVE不支持事物,比如關(guān)系型數(shù)據(jù)庫里的各種鎖,并不適合單條數(shù)據(jù)修改的場景。5)HIVE支持修改數(shù)據(jù)的存儲格式,比如TXTFILE,ORC,PARQUET,或者修改壓縮格式,在關(guān)系型數(shù)據(jù)庫里就沒有這些選項。
什么是主數(shù)據(jù)、元數(shù)據(jù)
主數(shù)據(jù):實際業(yè)務(wù)數(shù)據(jù)元數(shù)據(jù):描述數(shù)據(jù)的數(shù)據(jù),對數(shù)據(jù)及信息資源的描述性信息,大部分屬性字段就是元數(shù)據(jù)
數(shù)據(jù)排序 row_number(),rank()和dense_rank()的區(qū)別:
row_number() 按順序生成唯一值,排序相同時序號唯一rank() 排序相同時序號相同,總序號數(shù)不變dense_rank() 排序相同時序號相同,總序號數(shù)減少
Hive有索引嗎
Hive支持索引(3.0版本之前),但是Hive的索引與關(guān)系型數(shù)據(jù)庫中的索引并不相同。并且 Hive索引提供的功能很有限,效率也并不高,因此Hive索引很少使用。索引適用的場景:適用于不更新的靜態(tài)字段。以免總是重建索引數(shù)據(jù)。每次建立、更新數(shù)據(jù)后,都要重建索引以構(gòu)建索引表。
sort by 和 order by 的區(qū)別
order by 會對輸入做全局排序,因此只有一個reducer(多個reducer無法保證全局有序)只有一個reducer,會導(dǎo)致當(dāng)輸入規(guī)模較大時,需要較長的計算時間。sort by不是全局排序,其在數(shù)據(jù)進入reducer前完成排序. 因此,如果用sort by進行排序,并且設(shè)置mapred.reduce.tasks>1, 則sort by只保證每個reducer的輸出有序,不保證全局有序。
請說明hive中 Sort By,Order By,Cluster By,Distrbute By各代表什么意思?
Order by:會對輸入做全局排序,因此只有一個reducer(多個reducer無法保證全局有序)。只有一個reducer,會導(dǎo)致當(dāng)輸入規(guī)模較大時,需要較長的計算時間。Sort by:不是全局排序,其在數(shù)據(jù)進入reducer前完成排序。1Distribute by:按照指定的字段對數(shù)據(jù)進行劃分輸出到不同的reduce中。Cluster by:除了具有 distribute by 的功能外還兼具 sort by 的功能。
開窗函數(shù)使用
聚合開窗函數(shù):sum() --求和開窗排名開窗函數(shù):row_number()、rank()、dense_rank() --排名開窗格式是開窗函數(shù)+over()語法,內(nèi)含分組、排序、窗口范圍等,如:row_number over(partition by 分組字段 order by 排序字段 asc|desc rows between 開始位置 and 結(jié)束位置)常使用的窗口范圍是rows between unbounded preceding and current row,表示從起點到當(dāng)前行,常用該窗口來計算累加求和開窗: select name,orderdate,cost, sum(cost) over() as sp1, --所有行相加 sum(cost) over(partition by name) as sp2, --按名字分組,組內(nèi)相加 sum(cost) over(partition by name order by orderdate) as sp3, --按名字分組并按時間排序 查看顧客上次和下次的購買時間 select name,orderdate,cost, lag(orderdate,1) over(distribute by name sort by orderdate)as sp1,–上次購買時間 lead(orderdate,1) over(distribute by name sort by orderdate)as sp2–下次購買時間 from business; LAG(col,n): 往前第 n 行數(shù)據(jù) LEAD(col,n):往后第 n 行數(shù)據(jù)
Hive的函數(shù):UDF、UDAF、UDTF的區(qū)別?
UDF:單行進入,單行輸出UDAF:多行進入,單行輸出UDTF:單行輸入,多行輸出
所有的Hive任務(wù)都會有MapReduce的執(zhí)行嗎?
不是,從Hive0.10.0版本開始,對于簡單的不需要聚合的類似SELECT from LIMIT n語句,不需要起MapReduce job,直接通過Fetch task獲取數(shù)據(jù)。
柚子快報邀請碼778899分享:大數(shù)據(jù) HIVE面試問題
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。