2013-01-15 54 views
0

我已經在Apache Hadoop 0.2.x版本中編寫了一些MapReduce程序 - 簡單地說,我是一個初學者。Hadoop - 基本+流媒體指導要求

我試圖處理大量(超過10GB)使用一種稱爲軟件在Linux機器上SegY文件SeismicUnix

,我在Linux機器上運行的基本命令列:

//Read SegY file and convert to custom format (.su file) 

segyread tape=input.sgy verbose=1 endian=0 | segyclean >input.su 


//PIPE-SEPARATE the processing commands viz. suhilb and suaccor 
suhilb | suaccor ntout=1001 sym=0 <Noise1_10.su> output.su 


//Create headers for converting back to SegY format 
segyhdrs < output.su bfile=binary hfile=header 


//Create the final output file in SegY format 
segywrite <output.su tape=output.segy buff=1 conv=1 bfile=binary hfile=header 

這些步驟在單臺計算機上花費很長時間,因此,已經設置了Apache Hadoop集羣來加快速度。

按我思維過程:

  1. 拆分源SEGY文件到羣集(使得一個大文件的一個小塊可用於處理的每個節點上)
  2. 可能地,使用Hadoop流,主叫SeismicUnix命令以處理每個節點上小塊
  3. 聚合經處理的文件合併成一個大的SEGY文件,該文件將成爲輸出

技術查詢/挑戰:

  1. 源SEGY文件需要被第一加載到HDFS之前其可用以進行處理的不同的節點。我該怎麼做 - 創建一個SequenceFile或其他東西? SeismicUnix讀取SegY文件,將其轉換爲自定義格式,然後對其進行處理!
  2. 如第二個命令所示,不同的操作(命令)按照它們希望執行的順序傳送,例如suhilb | suaccor。現在,可以在此發生在一個映射器或我需要創建一個映射器suhilb和飼料它的輸出suaccor - 非常困惑在這裏
  3. 假設處理完成,現在output.segy創建(每個節點都是這個假設正確???),我如何合併這些文件(這裏完全無能爲力)?

我讀了一些關於谷歌的FlumeJava認爲它是解決方案,但我想堅持Hadoop,即現在沒有圖書館的方法。

如果我沒有深入淺出地詢問我的疑問 - 實際上我無法清楚地瞭解設計/代碼!

+0

建議要經過'的Hadoop - 權威Guide'書 - 你的混亂將被清除:) –

+0

@Praveen 我經歷的書,但我沒有收到有關自定義格式+流媒體的想法在我的情況。 –

+0

我很想知道你是否有進一步的這個問題? – mortenbpost

回答

0

在點對應回答你的疑問,

  1. 如果你知道什麼自定義格式的軟件使用轉換SEGY文件,可以使用相同的格式存儲在HDFS文件。要加載到HDFS你應該看看像Sqoop這樣的開源工具。

  2. 您可以按順序使用映射器進行各種操作。因此,不同的映射器會並行地在不同的輸入塊上執行操作。

  3. 要合併輸出文件嘗試使用基於鍵這種種的output.segy減速。您使用的示例鍵可以是文件的名稱。因此,各種輸出文件的所有數據都被路由到一個reducer,從而生成一個輸出文件-r-000文件。

+0

請確認我是否已正確解釋您的答案: 1.雖然我知道自定義格式,但它會隨着處理軟件的變化而改變,因此我打算將源SegY文件存儲在羣集上,並讓處理軟件開啓每個節點都從HDFS獲取其塊,然後轉換爲其自己的格式。我需要考慮創建一個SequenceFile來上傳一個源文件嗎? 2.所以一個簡單的map(...)方法和一個簡單的reduce(...)方法就足夠了,對吧? 3.直到我不清楚如何存儲源SegY,我無法弄清楚如何reconstr。從零件文件 –