0

我想为一个非常大的区域生成数字高程模型数据。至少 18 x 10^12 个样本。要生成这些数据,我只需要起始位置、域大小和分辨率。

例如

输入 :

ORIGIN_LAT=33.663901;ORIGIN_LON=-117.894687;ORIGIN_DEPTH =0.000000
SIZE_DOMAIN_LAT=4000.000000;SIZE_DOMAIN_LON=4000.000000;SIZE_DOMAIN_DEPTH =1600.000000

输出 :

-117.894687,  33.663901, 0.000000  

-117.894687 ,    33.663901 ,     -200.000000 

-117.894687     , 33.663901 ,    -300.000000 

-117.894687 ,    33.663901  , -400.000000 

-117.894687     , 33.663901 ,    -500.000000 

-117.894687 ,    33.663901 ,     -600.000000 

-117.894687     , 33.663901     , -700.000000 

-117.894687 ,    33.663901  , -800.000000 

-117.894687     , 33.663901     , -900.000000 

-117.894687 ,    33.663901 ,     -1000.000000

.....................

所以我想知道如何获得比工作节点更多的地图任务。因为输入是非常小的文件。

我不确定我是否误解了这些概念,但是如果程序在一个节点上运行,则没有使用集群,这里只有映射阶段生成数据,我使用的是零减速器。

实际上,我正在使用另一个 MR 程序分析这些数据,该程序目前使用外部程序生成数据,但效率不高。所以我需要用 MR 程序生成这些数据。

我在集群中有 5 个节点,输入文件的大小非常小,可以生成至少 5 个地图任务。如何使用 MR 并行性来生成这些数据?

1 解决方案

我在 map() 中将大区域划分为几个子区域,并将它们分配给减速器。

4

2 回答 2

0

这是一个小解决方案,但它可能有效:

  • 您可以重复相同的输入文件或在每个文件中使用不同的值进行单行输入!
  • 如果您想在开始时添加一个计数器值,以便在映射器中检测到该值并进行相应处理
  • 使文件成为 gzip 文件,这将迫使 hadoop 拥有与文件数量一样多的映射器。

对于上面的最后一点,您需要将以下属性添加到 core-site.xml 文件:

<property>
    <name>io.compression.codecs</name>
    <value>org.apache.hadoop.io.compress.GzipCodec</value>
  </property>

以及 mapred-site.xml 的以下属性:

<property>
    <name>mapred.output.compression.codec</name>
    <value>org.apache.hadoop.io.compress.GzipCodec</value>
</property>
于 2013-04-30T14:35:58.747 回答
0

尽管该参数mapred.reduce.tasks要求 Hadoop 框架创建多个映射任务,但不能保证操作。因此,映射任务的数量由输入拆分的数量控制,这取决于通用公式。这是有关作业客户端如何计算文本文件的输入拆分的链接

hadoop中的job客户端如何计算inputSplits

有了上面的解释,如果小输入文件需要创建更多的map任务。您可能必须遵循其中任何一种方法。

  1. 将您的输入文件拆分为 5 个小输入文件,以便为您的 5 节点集群创建至少 5 个映射任务或

  2. 调整参数等mapred.min.split.sizedfs.block.size以便为您的输入文件创建更多数量的地图任务。

于 2013-04-30T15:11:55.017 回答