【问题标题】:Hadoop - basic + streaming guidance requiredHadoop - 需要基本 + 流式指导
【发布时间】:2013-01-15 08:38:45
【问题描述】:

我在 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 集群来加快速度。

按照我的思路:

  1. 将源 SegY 文件拆分到集群上(这样大文件的一小块可用于在每个节点上进行处理)
  2. 可能,使用 Hadoop Streaming,调用 SeismicUnix 命令来处理每个节点上的小块
  3. 将处理后的文件聚合成一个大的 SegY 文件作为输出

技术问题/挑战:

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

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

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

【问题讨论】:

  • 建议阅读Hadoop - The Definitive Guide 书 - 你的困惑将被清除:)
  • @Praveen 我正在阅读这本书,但我对自定义格式 + 流媒体的情况一无所知。
  • 我很想知道您是否曾进一步解决这个问题?
  • @mortenbpost 不是真的!实际上,当我将 SegY 文件转换为 SequenceFile 时,SegY 格式被误导/损坏了,这是一个问题。

标签: hadoop mapreduce hadoop-streaming


【解决方案1】:

根据您的问题回答问题,

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

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

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

【讨论】:

  • 请确认我是否正确解释了您的答案: 1. 虽然我知道自定义格式,但它会随着处理软件的变化而改变,所以我打算将源 SegY 文件原样存储在集群上并让每个节点上的处理软件从 HDFS 中获取其块,然后转换为自己的格式。我是否需要考虑创建一个 SequenceFile 来上传源文件? 2. 所以一个简单的 map(...) 方法和一个简单的 reduce(...) 方法就足够了,对吧? 3.直到我不清楚如何存储源SegY,我不知道如何重建。来自零件文件
猜你喜欢
  • 1970-01-01
  • 2013-06-09
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多