<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 功能強大 支持多語言、二開方便! 廣告
                **Map 數的決定因素有哪些?** 通常情況下,作業會通過 input 的目錄產生一個或者多個 map 任務。主要的決定因素有: * input 的文件總個數 * input 的文件大小 * 集群設置的文件塊大小。 **是不是設置 map 數越多越好?** 答案是否定的。 如果一個任務有很多小文件(遠遠小于塊大小 128m),則每個小文件也會被當做一個塊,用一個 map 任務來完成,而一個 map 任務啟動和初始化的時間遠遠大于邏輯處理的時間,就會造成很大的資源浪費。而且,同時可執行的 map 數是受限的。 <br/> **是不是保證每個 map 處理接近 128m 的文件塊,就沒問題了?** 答案也是不一定。 比如有一個 127m 的文件,正常會用一個 map 去完成,但這個文件只有一個或者兩個小字段,卻有幾千萬的記錄,如果 map 處理的邏輯比較復雜,用一個 map 任務去做,肯定也比較耗時。 <br/> 針對上面的問題 2 和 3,我們需要采取兩種方式來解決:即減少 map 數和增加 map 數。 <br/> **1.小文件進行合并,減少 map 數(默認開啟)** 在 map 執行前合并小文件,減少 map 數。 CombineHiveInputFormat 具有對小文件進行合并的功能(系統默認的格式)。 ```sql -- 一以下單位都是Byte,100000000就是100MB -- 下面這三個參數組合在一起的意思是: -- 如果文件大于block(128MB)則按照128MB切割; -- 如果100<block<128,則按照100MB切割; -- 剩余小文件以及分割后剩余的數據小于100MB則安裝100MB分割 set mapred.max.split.size=100000000; set mapred.min.split.size.per.node=100000000; set mapred.min.split.size.per.rack=100000000; -- 在執行前將小文件合并 set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 計算公式:當結果大于blocksize時就會減少Map,當小于blocksize時就是增加Map. computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M ``` 注意:HiveInputFormat 沒有對小文件合并功能。 <br/> **2.復雜文件增加 Map 數** 當 input 的文件都很大,任務邏輯復雜,map 執行非常慢的時候,可以考慮增加 Map 數,來使得每個 map 處理的數據量減少,從而提高任務的執行效率。 MapReduce 中沒有辦法直接控制 map 數量,可以通過設置每個 map 中處理的數據量進行設置。 增加 map 的方法為:根據下面的公式,調整 maxSize 最大值: ``` computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M ``` 讓 maxSize 最大值低于 blocksize 就可以增加 map 的個數。
                  <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>

                              哎呀哎呀视频在线观看