使用Pig Latin时有许多小输入文件可以提高性能

时间:2013-08-27 07:47:14

标签: hadoop apache-pig

目前我正在处理大约19千兆字节的日志数据,

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

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

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

并且mapreduce作业本身(通过Pig脚本)非常慢,大约需要一个小时。

mapreduce逻辑并不复杂,就像按操作分组一样。

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

尝试hadoop fs -ls /path/to/files | wc -l并查看回来需要多长时间 - 您有两个问题:

  1. 发现要处理的文件 - 上述ls可能需要很长时间才能完成。然后必须查询每个文件的块大小,以确定它是否可以由多个映射器分割/处理
  2. 保留上述所有信息很可能会推动客户端的JVM限制,您可能会看到大量的GC尝试分配,分配和增长用于存储分割信息的集合。至少145k分裂。
  3. 正如已经建议的那样,尝试将文件组合成更合理的文件大小(块大小附近或其倍数)。也许你可以将同一小时的所有文件合并到一个连接文件中(或者到一天,取决于你的处理用例)。

答案 2 :(得分:0)

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