目前我使用aws emr作为集群。对于库,我使用级联。
输入数据存储在awss3的一个目录中。这个目录包含许多文件,每个文件大约有100mb大(不是压缩的,纯文本),而且这些文件每天的数量很容易达到100个。每个文件的文件名都包含一个日期。一天结束时,我会处理当天生成的所有文件。
目前我的hadoop应用程序进程如下:
使用s3文件夹作为输入 GlobHfs
这个 GlobHFS
有一个自定义过滤器,它过滤文件名,只接受今天的文件
只处理过滤过的文件,并将输出抽头设置为s3。
我的问题是:
我应该使用压缩吗?如果是,我应该使用什么压缩类型?我读了.gz压缩使它只有一个Map程序可以做的工作,在我的情况下,文件夹有很多文件,这是相关的吗?我应该在每个文件中使用lzo吗?
我应该存储较大的文件,还是当前的格式(许多较小的文件)足够好?
2条答案
按热度按时间vsaztqbk1#
注意,在使用s3n:///时,在glob的情况下在s3中列出文件可能需要很长时间。
您应该尝试使用s3distcp,它可以复制、合并、压缩数据等,并且可以更快地完成列表。
zu0ti5jz2#
压缩将有助于减少网络数据流。lzo压缩更适合乔布斯先生。但是,由于您的文件存储在s3中而不是hdfs中,因此每个文件都将由Map器进行处理,而不考虑所使用的压缩。据我所知,块大小不适用于s3的情况。
这里的一个建议是在bucket下创建键,每个键对应一个日期。这将加速输入过滤。e、 g//
用于emr集群的节点类型可以是文件大小的决定因素之一。如果节点是像r3.8xlarge这样的高效节点,那么输入文件的大小可以更大。另一方面,如果是m1.medium,文件大小必须很小才能正确使用集群。