为啥猪的工作罐子这么大

Posted

技术标签:

【中文标题】为啥猪的工作罐子这么大【英文标题】:Why are Pig's job jars so big为什么猪的工作罐子这么大 【发布时间】:2013-09-09 11:17:04 【问题描述】:

当我通过 PigServer java 类执行 pig 脚本时,会创建很多 Jobxxx.jar。我知道这些是正在发送到 Hadoop 集群的 Map/Reduce 作业。 因为我有一个相当复杂的脚本,所以我知道这将被分成许多不同的工作。 但是,我很困惑,为什么这些 jar 文件必须这么大。当然,它们都包含我的 UDF 的代码,它不是那么大,但它们也包含例如整个(分解的)org/apache/pig 结构。生成的 jar 文件每个都超过 7 MB。

在将这些文件发送到 hadoop 集群之前,如何防止它们变得如此之大?

【问题讨论】:

我认为它包含 org/apache/pig 结构的原因是因为可以针对不同版本的 Pig 编译作业。对于我从事的一些项目,我们已将 Pig 0.10 和 0.11 作业发送到集群。 【参考方案1】:

由于多种原因,这些工作与它们一样大:

正如 mr2ert 所说,可以为不同版本的 Pig 编译作业,MR 集群并不关心; Pig 是客户端的东西。 MR 框架并不关心创建工作的原因,它需要一个.jar 来执行。 Pig 编译作业,为实现所需功能的每个作业创建 Mapper / Reducer 对。

现在,由于 Pig 在客户端编译作业,然后将作业 jar 提交到集群,并且由于集群需要在其 CLASSPATH 中包含所有依赖项,因此最合理的选择是创建一个分解的 .jar捆绑了所有需要的依赖项。

据我所知,您无法做任何事情来减小大小,因为这是 Pig 的作者在提交作业时捆绑依赖项的工程决策。

而且,坦率地说,如果您在处理 .jar 的 5 - 100 MB 时遇到问题,那么您到底用 Pig 做什么?

【讨论】:

感谢您解决这个问题。要回答您的问题,我真的不在乎每个作业是 7MB,问题是每个请求有大约 80 个作业。如果不是因为另一个问题,我的客户端上的 /tmp 文件夹不会被清空,除非 jvm 被关闭,否则这本身不是问题。关闭它并不是一个真正的选择,因为我在应用程序服务器中运行它。 现在 /tmp 文件夹在几次请求后包含许多 GB 的 jars。 hadoop 集群应该处理大数据,而不是我的客户端应用程序服务器。我已经通过删除旧的 jar 文件解决了这个问题,在没有请求运行的时候。

以上是关于为啥猪的工作罐子这么大的主要内容,如果未能解决你的问题,请参考以下文章

学会 Python 到底能干嘛?我们整理出了 7 大工作方向……

学会 Python 到底能干嘛?我们整理出了 7 大工作方向……

为啥我的 toast 可以在这么多不同的环境下工作?

使用大象鸟罐子的猪 JsonLoader() 处理 twitter 的复杂 json 对象时出错

项目在日食中工作,但不是在装在罐子里之后

系统为啥这么慢