在elastic mapreduce(mysql+mongodb input)上拆分Map者的职责

mctunoxg  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(221)

我想确保我正确理解电子病历。我在想-我所说的对emr/hadoop有意义吗?
目前我的应用程序上有一个推荐引擎,它检查mysql和mongodb中存储的数据(都在单独的ec2示例上),因此可以向用户推荐内容。这已经很好地工作了,但是现在我发现执行脚本所花费的时间比它应该运行的时间间隔要长。这显然是个问题。
我在考虑把这个剧本搬到电子病历上去。我知道我可以从Map脚本连接到mongodb和mysql(也就是说,它不需要是s3上的文件)。我想知道的是,如果我开始检查mysql/s3上的数据,hadoop是否有某种方法确保脚本不会检查每个示例上的相同记录?我完全理解hadoop的概念吗?很抱歉,如果这个问题真的很难回答。

bfnvny8b

bfnvny8b1#

是的,hadoop确实确保来自db的输入记录被拆分,然后只传递给Map器,即相同的记录不会被不同的Map器读取(即使它们在同一示例上运行)。
一般来说,拆分数据的任务取决于所选的 InputFormat ,在此引用:
inputformat的另一项重要工作是将输入数据源(例如,输入文件)划分为片段,这些片段构成各个map任务的输入。这些片段称为“splits”,封装在inputspilt接口的示例中。例如,大多数文件在hdfs的底层块的边界上被分割,并由fileinputsplit类的示例表示。其他文件可能无法保存,具体取决于应用程序特定的数据。将其他数据源(例如,数据库中的表)划分为多个部分将以不同的、特定于应用程序的方式执行。在将数据划分为输入拆分时,这一过程必须快速且廉价。执行此过程不需要访问数据本身(因为在mapreduce作业开始时,数据都是由一台机器完成的)。
您可能已经读过了,但这是一个很好的关于hadoop的dbinputformat的初始资源。

相关问题