我在 Apache Hadoop 0.2.x 版本中编写了一些 MapReduce 程序——简单来说,我是一个初学者。
我正在尝试使用名为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 集群来加快速度。
根据我的思考过程:
- 将源 SegY 文件拆分到集群上(以便在每个节点上处理一小块大文件)
- 可能,使用 Hadoop Streaming,调用 SeismicUnix 命令来处理每个节点上的小块
- 将处理后的文件聚合成一个大的 SegY 文件,该文件将作为输出
技术查询/挑战:
- 源 SegY 文件需要先加载到 HDFS 上,然后才能提供给不同的节点进行处理。我该怎么做 - 创建一个 SequenceFile 或其他东西?SeismicUnix 读取 SegY 文件,将其转换为自定义格式,然后对其进行处理!
- 如第二个命令所示,不同的操作(命令)按照它们想要执行的顺序进行管道传输,例如 suhilb | 苏克 现在,这可以在一个映射器中发生吗,还是我需要为 suhilb 创建一个映射器并将其输出提供给 suaccor - 这里非常困惑
- 假设处理完成并且现在创建了每个节点 output.segy(这个假设是否正确???),我如何合并这些文件(这里完全没有头绪)?
我读了一些关于谷歌的 FlumeJava 的文章,认为它是一种解决方案,但我想坚持只使用 Hadoop,即目前没有库方法。
抱歉,如果我没有深入/简洁地询问我的问题 - 实际上,我无法清楚地了解设计/代码!