Re: [問題] 資料量很大的處理

看板java作者 (wake up ...)時間12年前 (2012/03/11 22:17), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串2/2 (看更多)
第一眼看起來可以用Hadoop MapReduce處理 - 資料更動不頻繁 (HDFS write-once-read-multiple times) - 資料格式 key value pair key ... ... ... value1 ... valueN (一筆 record) ... key key ... ... value1 ... valueN (一筆 record) ... key key key ... value1 ... valueN (一筆 record) ... Steps: 1.) 資料上傳到HDFS 2.) Map phase: 針對每筆 record 處理 e.g. 依據 key 值 collect(value n) Reduce phase: 依 key 值整合所有的資料 e.g. 把相同 key 值的資料 (value) 作整合 比如說有份時間/天氣的資料表 02/Dec/1987 ... ... ... 11C ... ... 28/Feb/1945 ... ... ... 00C ... ... 16/Mar/1990 ... ... ... 32C ... ... 23/Jan/2011 ... ... ... 02C ... ... 02/Dec/1987 ... ... ... 12C ... ... 29/Aug/2012 ... ... ... 50C ... ... Map phase: def map(key: T, value: T, collector: OutputCollector, ...) { // ... read from some where containing corresponded id as filter // key -> 02/Dec/1987 value -> 11C if(id.equals(key)) collector.collect(key, value); } Reduce phase: def reduce(key T, values: Iterator, collector: OutputCollector ...) { // iterate and then process values // key -> 02/Dec/1987 values -> [11C, 12C] while(values.hasNext()) { // do something } } ※ 引述《johnhao1206 (Ya大熊)》之銘言: : 現在正在寫一個程式處理一個極大的文章 (256MB) : 目前寫的方法是硬把他存到二維陣列之中再去做處理 : 基本的格式是這樣 : id data1 data2 data3 ... : 現在困擾的是要去找到對應id的資料去做處理的時候 : 搜尋整個array需要花費相當多的時間 (也要考慮記憶體的問題) : 上網看了幾個方法但是好像不是我要的 : 1.File Channel : 不用讀入整個檔案可以減少記憶體花費 : (但是external search不是很花時間嗎?) : 2.Map : 有嘗試用map的方法去做,但是這樣耗費的記憶體好像會相當龐大 : (我初始給到512MB了還是會爆炸) : 3. : 這個不知道是不是方法, : 想把原本的資料按照id排序之後再用binary search : 希望可以增加搜尋速度 : 不知道各位有沒有什麼方法處理這種問題? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.82.81

03/12 10:25, , 1F
只有一台cluster,hadoop跑起來夠力嗎?
03/12 10:25, 1F

03/14 00:55, , 2F
謝謝! 但我的應用好像不太適合用hadoop XD
03/14 00:55, 2F

03/15 22:41, , 3F
你都用hash 了,不就是hadoop 了, 不適合?
03/15 22:41, 3F

03/16 15:36, , 4F
hash = hadoop ???
03/16 15:36, 4F
文章代碼(AID): #1FNBGCby (java)
文章代碼(AID): #1FNBGCby (java)