我无法在Hadoop YARN上为Nutch 1.7运行多次获取Map tak。
我正在使用bin / crawl脚本并执行以下调整以触发具有多个map任务的提取,但是我无法执行此操作。
将maxNumSegments和numFetchers参数添加到生成阶段。 $ bin / nutch生成$ commonOptions $ CRAWL_PATH / crawldb $ CRAWL_PATH / segments -maxNumSegments $ numFetchers -numFetchers $ numFetchers -noFilter
删除了topN参数并删除了noParsing参数,因为我希望在获取时进行解析。 $ bin / nutch fetch $ commonOptions -D fetcher.timelimit.mins = $ timeLimitFetch $ CRAWL_PATH / segments / $ SEGMENT -threads $ numThreads#-noParsing#
生成阶段不会生成多个段。
因此,获取阶段不会创建多个map任务,我也相信脚本是写的,即使生成生成多个段,它也不允许fecth计算多个segemnts。
有人可以告诉我,他们如何让脚本在分布式Hadoop集群中运行?或者,如果应该使用不同版本的脚本?
感谢。
答案 0 :(得分:0)
你是否正在使用Nutch 1.xx?在这种情况下,Generator类会查找名为“mapred.job.tracker”的标志,并尝试查看它是否是本地的。 Hadoop2中已弃用此属性,默认值设置为local。您必须将属性的值覆盖为local以外的其他值,Generator将为这些段生成多个分区。
答案 1 :(得分:0)
我最近遇到了这个问题,并认为以Keith的答案为基础提供有关如何解决这个问题的更全面的解释是个好主意。
我用Nutch 1.10和Hadoop 2.4.0进行了测试。
正如Keith所说, Generator.java 中第542行的 if 块读取 mapred.job.tracker 属性并设置值如果属性为numLists
,则变量1
为local
。这个变量似乎控制了reduce任务的数量,并影响了map任务的数量。
在mapred-site.xml
中覆盖所述属性的值修复了这个问题:
<property>
<name>mapred.job.tracker</name>
<value>distributed</value>
</property>
(或除了local
之外你喜欢的任何其他值)。
问题是我的情况还不足以生成多个 fetch 映射任务。我还必须更新 runtime / deploy / bin / crawl 脚本中numSlaves
参数的值。我没有在Nutch 1.x文档中找到任何关于这个参数的提及,所以在经过一些试验和错误之后我偶然发现了它。
#############################################
# MODIFY THE PARAMETERS BELOW TO YOUR NEEDS #
#############################################
# set the number of slaves nodes
numSlaves=3
# and the total number of available tasks
# sets Hadoop parameter "mapred.reduce.tasks"
numTasks=`expr $numSlaves \* 2`
...