<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # 1. 并行度決定機制 1. 問題引出 <ins>maptask 的并行度決定 map 階段的任務處理并發度</ins>,進而影響到整個 job的處理速度。 那么,mapTask 并行任務是否越多越好呢? 2. MapTask 并行度決定機制 一個 job 的 map 階段 MapTask 并行度(個數),由客戶端提交 job 時的切片個數決定。 <br/> # 2. MapTask工作機制 1. Read 階段:Map Task 通過用戶編寫的 RecordReader,按照 InputSplit 記錄的位置信息讀取數據,從中解析出一個個`<Key,Value>`。 2. Map 階段:將解析出的 key/value 交給用戶編寫 map()函數處理,并產生一系列新的 key/value。 3. Collect 收集階段:在用戶編寫 map()函數中,當數據處理完成后,一般會調用 OutputCollector.collect()輸出結果。在該函數內部,它會將生成的 key/value 分區(調用 Partitioner),并寫入一個環形內存緩沖區中。 4. Spill 階段:即**溢寫**,當環形緩沖區滿后,MapReduce 會將數據寫到本地磁盤上,生成一個臨時文件。需要注意的是,<ins>將數據寫入本地磁盤之前,先要對數據進行一次本地排序,并在必要時對數據進行合并、壓縮等操作</ins>。 溢寫階段詳情: 步驟 1:利用快速排序算法對緩存區內的數據進行排序,排序方式是,先按照分區編號 partition 進行排序,然后按照 key 進行排序。這樣,經過排序后,數據以分區為單位聚集在一起,且同一分區內所有數據按照 key 有序。 步驟 2:按照分區編號由小到大依次將每個分區中的數據寫入任務工作目錄下的臨時文件 output/spillN.out(N 表示當前溢寫次數)中。如果用戶設置了Combiner,則寫入文件之前,對每個分區中的數據進行一次聚集操作。 步驟 3:將分區數據的元信息寫到內存索引數據結構 SpillRecord 中,其中每個分區的元信息包括在臨時文件中的偏移量、壓縮前數據大小和壓縮后數據大小 。 如 果 當 前 內 存 索 引 大 小超過 1MB ,則將內存索引寫到文件output/spillN.out.index 中。 5. Combine 階段:當所有數據處理完成后,MapTask 對所有臨時文件進行一次合并,以確保最終只會生成一個數據文件。 當所有數據處理完后,MapTask 會將所有臨時文件合并成一個大文件,并保存到文件 output/file.out 中,同時生成相應的索引文件 output/file.out.index。<br/> 在進行文件合并過程中,MapTask 以分區為單位進行合并。對于某個分區,它將采用多輪遞歸合并的方式。每輪合并 io.sort.factor(默認 100)個文件,并將產生的文件重新加入待合并列表中,對文件排序后,重復以上過程,直到最終得到一個大文件。<br/> 讓每個 MapTask 最終只生成一個數據文件,可避免同時打開大量文件和同時讀取大量小文件產生的隨機讀取帶來的開銷。<br/>
                  <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>

                              哎呀哎呀视频在线观看