Hadoop -基本+流指导要求



我在Apache Hadoop 0.2中编写了一些MapReduce程序。x版本-简单来说,我是初学者。

我正在尝试使用一个名为SeismicUnix的软件在Linux机器上处理一个大的(超过10GB) SegY文件

下面列出了我在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 Streaming,调用SeismicUnix命令在每个节点上处理小块
  3. 将处理过的文件聚合成一个大的SegY文件,这将是输出

技术查询/挑战:

  1. 源SegY文件需要首先加载到HDFS,然后才能被不同的节点处理。我该如何做到这一点-创建一个SequenceFile或其他东西?SeismicUnix读取一个SegY文件,将其转换为自定义格式,然后处理它!
  2. 如第二个命令所示,不同的操作(命令)按照他们想要执行的顺序被管道化,例如suhilb | suaccor。现在,这可以在一个映射器中发生吗?或者我需要为suhilb创建一个映射器并将其输出提供给suaccor -这里非常混乱
  3. 假设处理完成,每个节点现在输出。(这个假设是正确的吗??),我如何合并这些文件(这里完全没有头绪)?

我读了一些关于Google的FlumeJava的文章,认为它是一个解决方案,但我想坚持只使用hadoop,即目前没有库的方法。

抱歉,如果我没有深入/简洁地问我的问题——实际上,我不能得到一个清晰的设计/代码的想法!

回答你的问题,

  1. 如果你知道软件使用什么自定义格式来转换SegY文件,你可以使用相同的格式在HDFS上存储文件。要加载到HDFS中,您应该查看开源工具,如Sqoop。

  2. 可以使用映射器按顺序执行各种操作。因此,不同的映射器将并行地对输入的不同块执行操作。

  3. 要合并输出文件,请尝试使用根据密钥排序output.segy的减速器。您使用的示例键可以是文件的名称。因此,各种输出文件的所有数据被路由到一个reducer,从而生成一个输出部分-r - 000文件。

相关内容

  • 没有找到相关文章

最新更新