mapreduce介面可能有多種不同的實現方式,需根據具體的計算環境來選擇
以google的常用計算環境為例
1.機器配置 linux dual-process x86 2-4gb memory
2.網路硬體 100/1000 mb/s, 平均整體二分頻寬少很多
3.集群 由數百、數千台機器組成,機器故障很常見
4.儲存由連線到每個機器的廉價ide磁碟提供,它們內部開發的分布式檔案系統用於管理這些磁碟上的資料。檔案系統使用副本在不可靠的硬體之上提供可用性和可靠性
5.使用者提交job到排程系統,每個job由一組tasks組成,並由排程器將每個task對映到機器中一組可用計算機上執行
map呼叫被分布在多台機器,輸入資料被自動劃分為m個分割,輸入分割之間沒有互動,可以在不同機器上並行處理。使用分割槽函式(e.g. hash(key) mod r),將中間鍵空間劃分為r個片段分發給reduce並行呼叫,分割槽函式和分割槽數由使用者指定。使用者呼叫mapreduce函式的系列操作如下
1.split input files 將輸入檔案按指定大小s(16~64mb,使用者通過可選引數指定)劃分為m個分割檔案,然後在集群中啟動多個副本程式
2.assign tasks master挑選空閒worker節點並為其分配乙個map task或reduce task
3.parses k/v 被分配map task的worker讀取相關分割的內容,從輸入內容中解析鍵/值對並生成中間鍵/值對快取於記憶體中
4.written to local disk 快取的中間鍵/值對,通過分割槽函式劃分為r個區域,定期寫到本地磁碟並將其相對位置返回給master,master再將這些位置資訊傳給worker
5.rpc read and sort 當master將位置資訊通知到reduce worker, reduce worker使用遠端過程呼叫從map worker的磁碟讀入快取資料。當reduce worker讀入所有的中間資料按key排序,如果中間資料過大不適合在記憶體運算,可考慮使用外部排序
7.completed 完成所有map和reduce任務後master喚醒使用者程式
--- edit by 雲時代的運維開發(clouddevops)
python實現目標跟蹤(opencv)
1.單目標跟蹤 import cv2 import sys major ver,minor ver,subminor ver cv2.version split print major ver,minor ver,subminor ver if name main 建立 tracker type m...
使用SSD實現目標檢測
本人主要參考這位大神的研究 利用這位大神的 執行了一遍ssd,之後會進一步研究ssd框架的原理和利用ssd布置自己的機械人。安裝和實現的過程中遇到了下面的一些編譯和執行的問題,我想先記錄下來,以備不時之需。第一 在對進行檢測的時候遇到 import matplotlib.pyplot as plt ...
python opencv實現目標區域裁剪功能
這個任務是自己在專案中資料處理的一部分內容,待處理的如下所示 我需要將目標區域給裁剪出來,要不然在後期訓練網路的時候整幅影象過大,且目標區域過小,得到結果不好,還會加劇計算量。在網上找了各個大佬的部落格看,沒找到合適的,便自己動手寫了,順便自己的小破站剛搭建起來,記錄一下自己的思路。思路去尋找目標區...