我已经在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