Hadoop是否也处理副本?例如,def get_page_data():
for page_data in csvfilelist.splitlines():
r = requests.get(page_data.strip())
soup = BeautifulSoup(r.text, 'html.parser')
yield soup
pages = get_page_data()
# iterate over the generator
for page in pages:
print pages
阶段中的工作节点i
仅处理存储在该计算机上的数据。在完成数据(非复制,但是原始)以便在mapper
阶段处理或者可能没有完成之后,是否存在机器mapper
处理存储在该机器上的副本数据的情况?或者仅在某个节点关闭时才使用副本?
答案 0 :(得分:3)
是的,处理副本也会在名为推测执行的特定情况下发生。
如果machine i
花费太多时间来处理存储在该机器中的数据块,则作业的Application master将针对存储在不同机器中的数据块的另一个副本启动重复的并行映射器。这个新的推测映射器将在存储副本的machine j
中运行。
无论哪个mapper首先完成执行,都会考虑其输出。其他慢速运行的映射器及其资源将被删除。
默认情况下,启用推测执行。您可以通过修改以下属性来切换它。
mapreduce.map.speculative
mapreduce.reduce.speculative
无论如何,数据块的不超过一个副本将存储在同一台机器中。数据块的每个副本都将保存在不同的计算机中。
答案 1 :(得分:2)
主节点(jobtracker)可能会也可能不会选择原始数据,实际上它并不保留有关原始数据副本的任何信息。因为当它保存数据时,它会对文件进行校验和验证并将其保存得干净利落。现在,当jobtracker想要为映射器选择一个插槽时,它需要考虑很多事情,例如免费地图插槽的数量,任务跟踪器的开销和其他事情。最后但并非最不重要的是数据局部性,因此最接近满足几乎所有标准的节点将仅被选中,它不会打扰它是原始的还是复制品,并且如上所述,即使它没有保持该身份。