2013-01-15 40 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。从零件文件 –