在Elastic MapReduce上划分映射器的职责(MySQL + MongoDB输入)



我想确保我正确理解EMR。我想知道——我所说的对EMR/Hadoop有意义吗?

我目前在我的应用程序上有一个推荐引擎,它检查存储在MySQL和MongoDB中的数据(都在单独的EC2实例上),因此可以向用户建议内容。这工作得很好,但现在我们在一个点上,它现在需要更长的时间来执行脚本比它应该运行的时间间隔。这显然是个问题。

我正在考虑将这个脚本移动到EMR。我明白,我将能够连接到MongoDB和MySQL从我的映射脚本(即它不需要是S3上的文件)。我想知道的是-如果我开始检查MySQL/S3上的数据- Hadoop是否有一些方法来确保脚本不检查每个实例上的相同记录?我理解Hadoop的概念吗?对不起,如果这个问题真的很新手。

是的,hadoop确实确保从DB的输入记录被分割,然后只传递给映射器,即相同的记录不会被不同的映射器读取(即使它们在同一实例上运行)。

一般来说,拆分数据的任务取决于所选的InputFormat,从这里引用:

InputFormat的另一项重要工作是划分输入数据将源(例如,输入文件)分割成片段,这些片段构成对单独的地图任务。这些碎片被称为"分裂"封装在InputSplit接口的实例中。大多数文件,对于例如,在底层块的边界上进行分割并且由FileInputSplit类的实例表示。其他文件可能不可分割,具体取决于特定于应用程序的文件数据。划分其他数据源(例如,数据库中的表)Into拆分将以不同的、特定于应用程序的方式执行时尚。在将数据划分为输入分割时,这一点很重要这个过程既快又便宜。数据本身不需要要访问以执行此过程(因为它全部由单个

你可能已经读过这篇文章了,但这是一个很好的关于hadoop的DBInputFormat的初始资源。

最新更新