我想问一下在运行map reduce作业时调用外部API的不便。缺点是什么?
一些例子:如果在映射器内部,我们需要对地址进行地理编码,并调用谷歌地图api,或者调用外部DB以获取项目的相关元素,等等。
只要外部API中没有DB调用,就可以调用外部API。在很多方面,这比重新编写逻辑更可取。通常,您希望您的MapReduce作业只不过是在非MapReduce上下文中编写的包装器逻辑。这是为了更好地测试代码。
但是,强烈反对进行外部DB调用。这将大大降低MapReduce作业的速度,因为每个调用都是随机访问调用。此外,数千次Map/Reduce taks同时击中你的DB可能会让DB屈服。如果您需要相关的元素,最好将所有元素都放在HDFS上,并在MapReduce中进行连接。如果您所说的DB是NoSQL存储,如Cassandra或HBase,那么它们将具有批量导出功能,可以将整个表导出到HDFS上。