hadoop-需要基本+流指南

cxfofazt  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(299)

我已经用ApacheHadoop0.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

这些步骤在一台机器上需要很长时间,因此,已经建立了一个apachehadoop集群来加快速度。
按照我的思维过程:
将源segy文件拆分到集群上(以便在每个节点上都可以处理一小块大文件)
可能,使用hadoop流,调用seismicunix命令来处理每个节点上的小块
将处理过的文件聚合成一个大的segy文件,作为输出
技术问题/挑战:
源segy文件需要首先加载到hdfs上,然后才能供不同的节点处理。我该怎么做-创建一个sequencefile或其他什么?seismicunix读取segy文件,将其转换为自定义格式,然后对其进行处理!
如第二个命令所示,不同的操作(命令)是按照它们要执行的顺序进行管道传输的,例如suhilb | suaccor。现在,这是在一个Map器中发生的,还是我需要为suhilb创建一个Map器并将其输出提供给suaccor?这里非常混乱
假设处理完成了,每个节点现在都创建了output.segy(这个假设正确吗??),我如何合并这些文件(这里完全不知道)?
我读过一些关于google的flumejava的文章,认为它是一个解决方案,但我想坚持只使用hadoop,即目前没有库的方法。
抱歉,如果我没有问我的问题深入/简洁-实际上,我不能得到一个设计/代码的清晰想法!

7jmck4yq

7jmck4yq1#

回答你的问题,
如果您知道软件用于转换segy文件的自定义格式,则可以将文件存储在 HDFS 使用相同的格式。装入 HDFS 您应该研究像sqoop这样的开源工具。
可以使用Map器按顺序执行各种操作。因此,不同的Map器将并行地对输入的不同块执行操作。
要合并输出文件,请尝试使用对 output.segy 根据钥匙。您使用的示例键可以是文件名。因此,各种输出文件的所有数据都被路由到一个reducer,从而生成一个输出part-r-000文件。

相关问题