一.廣州電商公司
1.簡單自我介紹
2.介紹下之前的公司離線數倉項目
3.mysql和hive區別?
4.sql的執行順序?
5.hive的優化
6.說下你之前公司來,你的技能層次在每個公司?你怎么評價你的技能?
7.你的之前業務主要是做什么?我說了項目分工
8.數倉的分層,分幾層?按照數據域分層,問幾層?
9.sql優化一般怎么優化的?
10.非本專業怎么進行后續學習的?
11.系統函數怎么用的?
12.數據遷移怎么做的?
13.數據可視化界面怎么做的?bi你們講解是誰負責
14.有用過dws層直接對接bi嘛?mysql數據庫有用嗎?為啥對接bi?
3.mysql和hive區別?
??? hive不是數據庫,除了sql語法有點像,其他都不一樣
?????????? ? ? ? ? hive??????????????????? ? ? ? ? ???????????? mysql
?存儲位置?? hdfs???????????????????????????????????????? 本地磁盤
?計算引擎?? 分布式mr、tez、spark???????????? 自己的單機的
?計算效率?? 數據量大,快???????????????????????????? 小,快
?數據更新?? 適合分析(select)???? ? ? ? ? ? ? ? 增刪改查
5.hive的優化
group by
1)map端預聚合? (預聚合的配置參數為hive.map.aggr,默認值true)
2)數據傾斜時進行負載均衡處理
通過將參數hive.groupby.skewindata(默認false)設置為true,那么在進行group by時,會啟動兩個MR job。第一個job會將map端數據隨機輸入reducer,每個reducer做部分聚合操作,相同的group by key會分布在不同的reducer中。第二個job再將前面預處理過的數據按key聚合并輸出結果,這樣就起到了均衡的效果。
3)count(distinct)
當數據量大時,效率會很低,尤其是數據傾斜的時候。
可以通過group by代替count(distinct)使用。
4)本地模式
對于處理小數據量的任務,我們不需要通過集群模式進行處理(因為為該任務實際觸發的job執行等開銷可能比實際任務的執行時間還要長),Hive可以通過本地模式在單臺機器上處理所有的任務。
set hive.exec.mode.local.auto=true;
------------------------------------------------------------
2)map Join:? 大小表join,避免shuffle
3)SMB Join:? sort merge bucket join
??? 大表 join 大表:
??????? 分桶表,分桶字段 = 關聯字段 = 桶排序 字段
??????? 分桶的數量,成比例
4)分區、分桶
??? 分區:避免全表掃描
??? 分桶:做SMB的時候, 抽樣key判斷傾斜
5)壓縮 : snappy
6)存儲格式 : 列式 orc
??? id? name??? age
??? 1??? zs???? 18
??? 2??? ls???? 19
?? ?
??? 行式?? 1??? zs???? 18???? 2??? ls???? 19
??? 列式?? 1??? 2???? zs??? ls??? 18??? 19
??????? 查詢效率高
??????? 存儲結構更緊密,壓縮后更小
??????? select name from A
?? ?
??? 行式: text、sequnencefile
??? 列式: orc、parquet
??????? orc為hive而生的,跟hive性能更強
??????? parquet兼容性更好
7)調整reduce的數量
??? 指定參數 ,默認 -1 表示禁用
??? 估算機制:?? 數據量/ 每個Reducer處理上限(默認256M)
??? 特殊語法: orderby 、 count(distinct )
?? ?
??? 優先級: 特殊語法 > 參數 > 估算機制
8)謂詞下推????? 默認開啟
??? select xx from? A join B? on A.id=B.id and A.id>10
??? select xx from? A join B? on A.id=B.id where A.id>10
??? 經過謂詞下推,第二種也會先 過濾,再join,效果一樣
?? ?
9)并行執行????? 默認開啟
10)開啟cbo????? 默認開啟
11)合并小文件
??? 危害:
??? 解決: ?
??????? JVM重用
??????? CombineHiveInputFormat
??????? merge功能: 結束后,再另外啟動一個job來合并小文件于16m的文件
??????????? 小于 16m ==》 256m
??????????? map-only:默認開啟
??????????? map-reduce:默認關閉,需要開啟
?????????? ?
12)使用多引擎
??? mr??? : 跑 年、月 時間跨度大、數據量大的指標
??? tez?? : 現在沒用
??? spark : 跑日常天指標
?? ?
??? set hive.execution.enginee = mr;
??? sql1;
?? ?
??? set hive.execution.enginee=spark;
??? sql2;