hadoop—当您有许多使用pig的小输入文件时,可以提高性能

lokaqttq  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(264)

目前我正在处理大约19G的日志数据,
而且它们是分开的,所以输入文件的数量是145258(pig stat)。
在web ui中执行应用程序和启动mapreduce作业之间,
准备工作浪费了大量时间(大约3小时?),然后mapreduce工作就开始了。
而且mapreduce作业本身(通过pig脚本)非常慢,大约需要一个小时。
mapreduce逻辑并没有那么复杂,就像一个按操作分组一样。
我有3个datanode和1个namenode,1个secondary namenode。
如何优化配置以提高mapreduce性能?

vybvopom

vybvopom1#

您应该将pig.maxcombinedsplitsize设置为合理的大小,并确保pig.splitcombination设置为其默认值true。
你的数据在哪里?在hdfs上?在s3上?如果数据在s3上,您应该将数据合并到更大的文件中一次,然后在其上执行pig脚本,否则,无论如何,这需要很长时间—s3返回分页的对象列表,并且获取列表需要很长时间(同样,如果bucket中有更多的对象,并且没有使用仅前缀模式搜索文件,hadoop将列出所有对象(因为s3中没有其他选项)。

vktxenjb

vktxenjb2#

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

chy5wohz

chy5wohz3#

试试看 hadoop fs -ls /path/to/files | wc -l 再看看需要多长时间才能恢复-你有两个问题:
发现要处理的文件-上述ls可能需要很长时间才能完成。然后必须查询每个文件的块大小,以确定它是否可以由多个Map器分割/处理
保留上面的所有信息很可能会增加客户机的jvm限制,您可能会看到大量gc试图分配、分配和扩展用于存储至少145k个剥离的剥离信息的集合。
因此,如前所述,尝试将文件组合成更合理的文件大小(接近块大小的某个地方,或其倍数)。也许您可以将同一小时内的所有文件合并到一个串联的文件中(或者今天,取决于您的处理用例)。

相关问题