我有一个高流量的服务,我记录事件。每隔几分钟,我使用gzip压缩并将日志旋转到S3中。从那里,我们使用Amazon的Hadoop -- Elastic MapReduce -- 通过Hive处理日志。
目前在服务器上,当我们压缩和旋转日志时,我们会出现CPU峰值。我们想要从gzip切换到lzo或snappy以帮助减少这种CPU峰值。我们是一个CPU限制型服务,所以我们愿意为较少的CPU消耗而交换更大的日志文件。
我一直在阅读LZO和Snappy(也称zippy)方面的资料。 LZO的优点之一是它在HDFS中是可分割的。然而,我们的文件经过Gzip压缩后大约为15MB,因此我认为我们不会达到HDFS中64MB的默认块大小,因此这不应该成为问题。即使如此,我们应该能够将默认值调高到128MB。
目前,我想尝试Snappy,因为它似乎略微更快/资源占用更少。两者都不在Amazon的yum存储库中,因此我们可能需要自定义安装/构建--因此在工程时间方面没有太多的权衡。我听说过一些关于LZO许可证的担忧,但是如果它不接近我们的代码,我认为在我们的服务器上安装它就可以了,对吗?
那么,我应该选择哪一个呢? 其中一个在Hadoop中的表现会比另一个更好吗? 有人使用其中任何一种实现并分享任何问题吗?
目前在服务器上,当我们压缩和旋转日志时,我们会出现CPU峰值。我们想要从gzip切换到lzo或snappy以帮助减少这种CPU峰值。我们是一个CPU限制型服务,所以我们愿意为较少的CPU消耗而交换更大的日志文件。
我一直在阅读LZO和Snappy(也称zippy)方面的资料。 LZO的优点之一是它在HDFS中是可分割的。然而,我们的文件经过Gzip压缩后大约为15MB,因此我认为我们不会达到HDFS中64MB的默认块大小,因此这不应该成为问题。即使如此,我们应该能够将默认值调高到128MB。
目前,我想尝试Snappy,因为它似乎略微更快/资源占用更少。两者都不在Amazon的yum存储库中,因此我们可能需要自定义安装/构建--因此在工程时间方面没有太多的权衡。我听说过一些关于LZO许可证的担忧,但是如果它不接近我们的代码,我认为在我们的服务器上安装它就可以了,对吗?
那么,我应该选择哪一个呢? 其中一个在Hadoop中的表现会比另一个更好吗? 有人使用其中任何一种实现并分享任何问题吗?