中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive架構、傾斜優化、sql及常見問題

發布時間:2020-07-18 05:39:11 來源:網絡 閱讀:532 作者:afeiye 欄目:大數據

Hive架構

Hive架構、傾斜優化、sql及常見問題
hive架構如圖所示,client跟driver交互,通過parser、planner、optimizer,最后轉為mapreduce運行,具體步驟如下
Hive架構、傾斜優化、sql及常見問題

  1. driver輸入一條sql,會由parser轉為抽象語法樹AST,這個是沒有任務元數據信息的語法樹;
  2. 語法分析器再把AST轉為一個一個的QueryBlock,一個QueryBlock包含輸入、輸出、計算邏輯,也就是說一個子程序就是QueryBlock
  3. planner遍歷所有的QueryBlock,轉為一個個的Operator(算子,比如tablescanOperator),最后形成OperatorTree;
  4. 優化器對OperatorTree進行優化,包含謂詞下推、剪枝等;
  5. 然后遍歷OperatorTree,分割成多個mapreduce作業,形成物理計劃
  6. 之后進行物理優化,比如是否進行map join等

Hive 數據傾斜優化

  1. 對于group by可以有兩個優化點
    map聚合:set hive.map.aggr=true,會在map端對相同key先聚合一下;
    分發為兩道作業:set hive.groupby.skewindata=true,會對原來的一道作業分為兩道作業,第一道隨機分配key,第二道再按key分配
    注意:對于部分聚合函數有用,比如sum和count,但是完全聚合函數無用,比如avg
  2. 對于join也有兩個優化點
    map join:新版hive中默認開啟set hive.auto.convert.join=true ,join的左表如果足夠小,會直接把左表內容加載到內存中
    兩道作業:set hive.optimize.skewjoin = true;set hive.skewjoin.key = skew_key_threshold (default = 100000)這個兩道作業跟groupby不一樣,這個是說把超過10萬行的數據單獨啟一道map join,最后再把結果聚合

hive常見問題

  1. hive不支持非等值join
    錯誤:select from a inner join b on a.id<>b.id
    替代方法:select
    from a inner join b on a.id=b.id and a.id is null;
  2. hive不支持非join連接
    錯誤:select from dual a,dual b where a.key = b.key;
    正確:select
    from dual a join dual b on a.key = b.key;
  3. hive不支持or
    錯誤:select from a inner join b on a.id=b.id or a.name=b.name
    替代方法:select
    from a inner join b on a.id=b.id union all select * from a inner join b on a.name=b.name
  4. hive內部表和外部表的區別
    創建表時:創建內部表時,會將數據移動到數據倉庫指向的路徑;若創建外部表,僅記錄數據所在的路徑, 不對數據的位置做任何改變。
    刪除表時:在刪除表的時候,內部表的元數據和數據會被一起刪除, 而外部表只刪除元數據,不刪除數據。這樣外部表相對來說更加安全些,數據組織也更加靈活,方便共享源數據
  5. sortby、orderby、distributeby
    order by會引發全局排序;會導致所有的數據集中在一臺reducer節點上,然后進行排序,這樣很可能會超過單個節點的磁盤和內存存儲能力導致任務失敗。
    distribute by + sort by就是該替代方案,被distribute by設定的字段為KEY,數據會被HASH分發到不同的reducer機器上,然后sort by會對同一個reducer機器上的每組數據進行局部排序。
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海兴县| 江川县| 万山特区| 阿瓦提县| 东兰县| 丽水市| 自贡市| 瑞昌市| 高台县| 青阳县| 云龙县| 威宁| 竹山县| 荣昌县| 西盟| 民丰县| 巴林左旗| 沁阳市| 永州市| 凤冈县| 板桥市| 鄂温| 永宁县| 武威市| 新安县| 高青县| 天台县| 临城县| 长武县| 永寿县| 肇东市| 金塔县| 永嘉县| 潼关县| 锦州市| 内乡县| 延川县| 密云县| 弋阳县| 边坝县| 龙陵县|