0

目前我正在处理大约 19 GB 的日志数据,

并且它们是分开的,因此输入文件的数量是 145258(pig stat)。

在 Web UI 中执行应用程序和启动 mapreduce 作业之间,

准备工作浪费了大量时间(大约 3 小时?),然后 mapreduce 工作开始。

而且mapreduce作业本身(通过Pig脚本)也很慢,大约需要一个小时。

mapreduce 逻辑并没有那么复杂,就像 group by 操作一样。

我有 3 个数据节点和 1 个名称节点,1 个辅助名称节点。

如何优化配置以提高 mapreduce 性能?

4

3 回答 3

1

您应该将 pig.maxCombinedSplitSize 设置为合理的大小,并确保 pig.splitCombination 设置为其默认值 true。

你的数据在哪里?在 HDFS 上?在 S3 上?如果数据在 S3 上,您应该将数据合并到更大的文件中,然后在其上执行您的 pig 脚本,否则,无论如何都会花费很长时间 - S3 返回带有分页的对象列表,并且需要很长时间才能获取列表(另外,如果您在存储桶中有更多对象,并且您没有使用仅前缀模式搜索文件,hadoop 将列出所有对象(因为 S3 中没有其他选项)。

于 2013-08-27T08:46:29.960 回答
1

试一试hadoop fs -ls /path/to/files | wc -l,看看需要多长时间才能回来 - 你有两个问题:

  1. 发现要处理的文件 - 上面的 ls 可能需要很长时间才能完成。然后必须查询每个文件的块大小,以确定它是否可以被多个映射器拆分/处理
  2. 保留上面的所有信息很可能会推动客户端的 JVM 限制,您可能会看到大量 GC 试图分配、分配和增长用于存储拆分信息的集合,至少为 145k分裂。

因此,正如已经建议的那样,尝试将您的文件组合成更合理的文件大小(接近您的块大小或其倍数)。也许您可以将同一小时内的所有文件组合成一个连接文件(或一天,取决于您的处理用例)。

于 2013-08-27T11:26:22.783 回答
0

看起来问题更多的是Hadoop而不是Pig。您可能想尝试将所有小文件合并到一个 Hadoop 存档中,看看它是否会提高性能。有关详细信息,请参阅此链接
您可以尝试的另一种方法是运行单独的 Pig 作业,该作业定期将所有日志文件联合到一个“大”日志文件中。这应该有助于减少主要工作的处理时间。

于 2013-08-27T13:03:38.383 回答