10
我正在使用Python编写的映射器和简化器在Hadoop(在Amazon的EMR上)中运行流式作业。如果我在Java中实现相同的映射器和简化器(或使用Pig),我想知道速度增益。Hadoop中的流式传输或自定义Jar
特别是,我正在寻找人们从流式传输到定制jar部署和/或Pig以及包含这些选项基准比较的文档的体验。我发现这个question,但答案不够具体。我不想在Java和Python之间进行比较,而是在Hadoop中的自定义jar部署和基于Python的流之间进行比较。
我的工作是阅读NGram从Google图书NGgram数据集计算和计算聚合度量。看起来计算节点上的CPU利用率接近100%。 (我希望听到您对CPU限制或IO限制作业的差异的意见)。
谢谢!
Amaç
谢谢!由于我已经有纯文本输入/输出要求,所以自定义输入格式与我的情况无关。 猪的评价告诉我,我宁愿远离它。我已经有了Python实现。 我的脚本是CPU密集型的。他们只是从标准输入中读取数据,进行一些数字运算,然后输出结果。但我不确定这是否意味着我的Hadoop作业整体可以被视为CPU限制。无论如何,我真正想问的是作业是CPU限制还是IO限制,以及它是作为自定义jar还是流式作业实现的。 –
考虑到您的Maps和Reduce任务将在其自己的JVM上运行,以及通常map和reduce函数受CPU限制的事实,这些单独的Hadoop任务将受CPU限制。 Hadoop作业的协调JVM很可能是IO密集型的,因为它忙于等待来自将任务发送到map和reduce层的单个任务的响应。 –
实际上,我刚刚意识到,map和reduce任务运行的JVM也处理一些IO(从HDFS输入流并将输出写入HDFS)。由于hadoop确保map函数接近数据的位置,所以通常非常快(对于reduce函数,这是不正确的)。 –