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

我正在尝试使用称为SegY的软件在Linux机器上处理较大(超过10GB)的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文件,将其转换为自定义格式,然后对其进行处理!
  • 如第二条命令所示,不同的操作(命令)按照希望执行的顺序进行传递。 suaccor。现在,是否可以在一个映射器中发生这种情况,还是我需要为suhilb创建一个映射器并将其输出提供给suaccor-此处
  • 非常困惑
  • 假设处理已完成,并且现在创建了每个节点output.segy(此假设正确吗?),如何合并这些文件(此处完全毫无头绪)?

  • 我读了一些有关Google FlumeJava的解决方案的信息,但我想坚持使用仅限Hadoop的方法,即目前还没有库方法。

    抱歉,如果我没有深入/简短地询问我-实际上,我无法清楚了解设计/代码!

    最佳答案

    回答与您的查询相对应的分数,

  • 如果您知道软件用于转换SegY文件的自定义格式,则可以使用相同格式将文件存储在HDFS上。要加载到HDFS中,您应该查看Sqoop等开源工具。
  • 您可以使用映射器依次执行各种操作。因此,不同的映射器将对输入的不同块并行执行操作。
  • 要合并输出文件,请尝试使用化简器,该化简器根据键对output.segy进行排序。您使用的示例密钥可以是文件名。因此,各种输出文件的所有数据都被路由到一个reducer,从而生成了一个输出部分-r-000文件。
  • 10-07 16:55