繁体   English   中英

在Hadoop中流式传输或自定义Jar

[英]Streaming or custom Jar in Hadoop

我正在Hadoop(在亚马逊的EMR上)运行流媒体作业,使用Python编写的映射器和reducer。 我想知道如果我在Java中实现相同的mapper和reducer(或使用Pig),我将体验到的速度提升。

特别是,我正在寻找人们从流式传输到自定义jar部署和/或Pig的经验,以及包含这些选项的基准比较的文档。 我发现了这个问题 ,但答案对我来说不够具体。 我不是在寻找Java和Python之间的比较,而是在Hadoop中的自定义jar部署和基于Python的流式传输之间进行比较。

我的工作是从Google Books NGgram数据集中读取NGram计数并计算汇总度量。 似乎计算节点上的CPU利用率接近100%。 (我想听听你对CPU绑定或IO绑定工作的差异的看法)。

谢谢!

AMAC

为什么要考虑部署自定义jar?

  • 能够使用更强大的自定义输入格式。 对于流式作业,即使您使用此处提到的可插拔输入/输出,您也只能使用映射器/缩减器的键和值作为文本/字符串。 您需要花费一些CPU周期来转换为所需的类型。
  • 我也听说Hadoop可以很聪明地在多个作业中重复使用JVM,这在流式传输时是不可能的(无法确认)

什么时候用猪?

  • Pig Latin非常酷,是比java / python或perl更高级的数据流语言。 您的Pig脚本往往比编写任何其他语言的等效任务小得多

什么时候不用猪?

  • 即使猪非常擅长弄清楚有多少地图/减少以及何时产生地图或减少以及无数这样的事情,如果你确定有多少地图/减少你需要你有一些非常具体的计算你需要在Map / reduce函数中做,并且你对性能非常具体,那么你应该考虑部署自己的jar。 这个链接表明猪的性能可以落后于原生的hadoop M / R. 您还可以看看编写自己的Pig UDF ,它隔离了一些计算密集型函数(甚至可能使用JNI来调用UDF中的一些本机C / C ++代码)

有关IO和CPU绑定作业的说明:

  • 从技术上讲,hadoop和map reduce的重点是并行化计算密集型函数,所以我认为你的地图和减少工作是计算密集型的。 当数据通过网络发送时,Hadoop子系统忙于执行IO的唯一时间是在映射和减少阶段之间。 此外,如果您有大量数据,并且您手动配置了太少的映射并减少了导致溢出到磁盘(尽管太多任务将导致花费太多时间来启动/停止JVM和太多小文件)。 流式作业还会产生额外的开销,即启动Python / Perl VM,并在JVM和脚本VM之间来回复制数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM