我已經在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集羣來加快速度。
按我思維過程:
- 拆分源SEGY文件到羣集(使得一個大文件的一個小塊可用於處理的每個節點上)
- 可能地,使用Hadoop流,主叫SeismicUnix命令以處理每個節點上小塊
- 聚合經處理的文件合併成一個大的SEGY文件,該文件將成爲輸出
技術查詢/挑戰:
- 源SEGY文件需要被第一加載到HDFS之前其可用以進行處理的不同的節點。我該怎麼做 - 創建一個SequenceFile或其他東西? SeismicUnix讀取SegY文件,將其轉換爲自定義格式,然後對其進行處理!
- 如第二個命令所示,不同的操作(命令)按照它們希望執行的順序傳送,例如suhilb | suaccor。現在,可以在此發生在一個映射器或我需要創建一個映射器suhilb和飼料它的輸出suaccor - 非常困惑在這裏
- 假設處理完成,現在output.segy創建(每個節點都是這個假設正確???),我如何合併這些文件(這裏完全無能爲力)?
我讀了一些關於谷歌的FlumeJava認爲它是解決方案,但我想堅持Hadoop,即現在沒有圖書館的方法。
如果我沒有深入淺出地詢問我的疑問 - 實際上我無法清楚地瞭解設計/代碼!
建議要經過'的Hadoop - 權威Guide'書 - 你的混亂將被清除:) –
@Praveen 我經歷的書,但我沒有收到有關自定義格式+流媒體的想法在我的情況。 –
我很想知道你是否有進一步的這個問題? – mortenbpost