为什么考虑部署自定义jar?
- 能够使用更强大的自定义输入格式。对于流作业,即使您使用此处提到的可插拔输入/输出,也将映射器/缩减器的键和值限制为文本/字符串。您将需要花费一些CPU周期才能转换为所需的类型。
- Ive还听说过Hadoop在跨多个Jobs重用JVM方面很聪明,这在流式传输时是不可能的(无法确认)
什么时候使用猪?
- Pig Latin很酷,并且是比java / python或perl更高级的数据流语言。您的Pig脚本往往比编写任何其他语言的等效任务小得多
什么时候不使用猪?
- 尽管Pig非常擅长于自己弄清楚有多少地图/缩小以及何时生成或缩小地图以及无数这样的事情,但是如果您不确定要多少张地图/缩小,则可以进行一些非常具体的计算您需要在Map / reduce函数中进行 *** 作,并且对性能非常特定,那么您应该考虑部署自己的jar。此链接表明,猪的性能可能落后于原生的hadoop M / R。您也可以看一下编写自己的Pig UDF,它隔离了一些计算密集型功能(甚至可能使用JNI在UDF中调用某些本机C / C ++代码)
关于IO和CPU绑定作业的说明:
- 从技术上讲,hadoop和map reduce的重点是并行化计算密集型功能,因此我假设您的map和reduce作业是计算密集型的。当数据通过网络发送时,Hadoop子系统唯一的忙于IO的时间是在映射和缩减阶段之间。另外,如果您有大量数据,并且手动配置的映射太少,并减少了溢出到磁盘的数量(尽管太多的任务将导致花费太多时间启动/停止JVM和太多的小文件)。流作业会带来启动Python / Perl VM的额外开销,并使数据在JVM和脚本VM之间来回复制。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)