0

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

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

我正在考虑将此脚本移至 EMR。我知道我将能够从我的映射脚本连接到 MongoDB 和 MySQL(即它不需要S3 上的文件)。我想知道的是——如果我开始检查 MySQL / S3 上的数据——Hadoop 是否有某种方法可以确保脚本不会检查每个实例上的相同记录?我是否完全理解 Hadoop 的概念?对不起,如果这个问题真的是菜鸟。

4

1 回答 1

1

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

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

InputFormat 的另一项重要工作是将输入数据源(例如,输入文件)划分为片段,这些片段构成了各个映射任务的输入。这些片段称为“拆分”并封装在 InputSplit 接口的实例中。例如,大多数文件在 HDFS 中底层块的边界上被分割,并由 FileInputSplit 类的实例表示。其他文件可能是不可分割的,具体取决于特定于应用程序的数据。将其他数据源(例如,来自数据库的表)分成多个部分将以不同的、特定于应用程序的方式执行。将数据划分为输入拆分时,此过程必须快速且便宜,这一点很重要。

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

于 2013-04-30T03:12:21.367 回答