<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 小表,大表join 將key相對分散,并且**數據量小的表放在join的左邊**,這樣可以有效減少內存溢出錯誤發生的幾率. 再進一步使用Group讓小的維度表(1000條以下的記錄條數)先進內存.在map端完成reduce. 實際測試發現: 新版hive已經對小表join大表和大表join小表進行了優化,小表放在左邊和右邊已經沒有明顯區別. # 大表join大表 ## 空key過濾 有時join超時是因為某些key對應的數據太多,而相同key對應的數據都會發送到相同的reducer上,從而導致內存不夠.此時我們應該仔細分析這些異常的key,很多情況下,這些key對應的數據是異常數據,我們需要在sql語句中進行過濾. ~~~ select n.* from (select * from nullidtable where id is not null) n left join ori o on n.id=o.id; ~~~ ## 空key轉換 有時雖然某個key為空對應的數據很多,但是相應的數據不是異常數據,必須要包含在join結果中,此時我們可以表a中key為空的字段賦一個隨機的值,使得數據隨機均勻的分到不同的reducer上 例如 不隨機分布空null值 1. 設置5個reduce個數 ~~~ set mapreduce.job.reduces=5; ~~~ 2. join兩張表 ~~~ select n.* from nullidtable n full join ori o on case when n.id is null then concat('hive', rand()) else n.id end = o.id; ~~~ 消除了數據傾斜,負載均衡reducer的資源消耗 # MapJoin 如果不指定MapJoin或者不符合MapJoin的條件,那么hive解析器會將join操作轉換層commin join.即在reduce階段完成join.容易發生數據傾斜.可以用MapJoin把小表全部加載到內存在map端進行join,避免reducer處理 **開啟mapjoin參數設置** * 設置自動選擇MapJoin ~~~ //默認是true set hive.auto.convert.join=true; ~~~ * 大表小表的閾值設置(默認25M以下是小表) ~~~ set hive.mapjoin.smaltable.filesize=25000000 ~~~ **MapJoin工作機制** ![](https://box.kancloud.cn/482a3e05ffff8525e977d52db309b5ef_1076x778.png) 1. Task A,他是一個local task(在客戶端本地執行task),負責掃描小表b的數據,將其轉換成一個HashTabke的數據結構,并寫入本地的文件中,之后將文件加載到DistributeCache中 2. Task B,該任務是一個沒有Reduce的MR,啟動MapTasks掃描大表a,在map節點,根據a的每一條記錄去和DistributeCache中b表對應的HashTable關聯,并直接輸出結果 3. 由于MapJoin沒有Reduce,所以由Map直接輸出結果文件,有多少個Map Task,就有多少個結果文件
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看