Java – Hadoop中的流式或定制Jar

前端之家收集整理的这篇文章主要介绍了Java – Hadoop中的流式或定制Jar前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Hadoop(亚马逊的EMR)上运行流媒体作业,并使用 Python编写的mapper和reducer.我想知道如果我在Java(或使用Pig)中实现相同的映射器和还原器,我将会遇到速度提升.

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

我的工作是从Google图书NGG数据集和计算总体测量中读取NGram计数.似乎计算节点上的cpu利用率接近100%. (我想听听您对有限cpu或IO绑定作业的差异的看法).

谢谢!

AMAC

解决方法

为什么要考虑部署定制罐子?

能够使用更强大的自定义输入格式.对于流媒体作业,即使使用可插拔的输入/输出,就像上述here一样,您只能将其作为文本/字符串的映射器/缩减器的键值和值.您将需要花费一些cpu周期来转换为所需类型.
> Ive还听说Hadoop可以很聪明地在多个作业中重复使用JVM,而在流式传输时不可能(无法确认)

何时使用猪?

> @L_403_3@是非常酷的,是一个比java / python或perl高得多的数据流语言.您的猪脚本往往比编写任何其他语言的等效任务要小得多

何时不用猪?

>即使猪本身很自然地知道有多少地图/减少和何时产生地图或减少和无数的这样的事情,如果你确定你需要多少地图/减少你有一些非常具体的您在Map / reduce功能中需要执行的计算,并且您对性能非常具体,那么您应该考虑部署自己的jar.这link显示,猪可以滞后本机hadoop M / R的性能.您还可以看看编写自己的Pig UDFs,它分离出一些计算密集型函数(甚至可以使用JNI在UDF内调用一些本机C/C++代码)

有关IO和cpu绑定作业的注意事项:

>从技术上来说,hadoop和map reduce的全部要点是并行化计算密集型函数,所以我认为你的地图和减少作业是计算密集型的.当数据通过网络发送时,Hadoop子系统忙于执行IO的唯一时间在地图之间,并减少相位.而且,如果您拥有大量数据,并且手动配置太少的映射,并减少导致磁盘泄漏(尽管太多的任务会导致启动/停止JVM和太多小文件的时间太多).流作业还将具有启动Python / Perl VM的额外开销,并将数据复制到JVM和脚本VM之间.

猜你在找的Java相关文章