我编写了一个简单的脚本来分析commoncrawl数据。以下是我的映射器的片段。
src_code = record.payload.read().replace('\r', '').split('\n\n')[1]
soup = BeautifulSoup(src_code.strip(), "lxml")
[x.extract() for x in soup.findAll(['script', 'style'])]
txt = soup.get_text().encode('utf8')
try:
isReliable, textBytesFound, details = cld2.detect(txt)
except:
txt = ''.join(x for x in txt if x in string.printable) # Handle invalid utf-8 chars
details = cle.detect_txt_lang(txt)
我必须分析warc.gz文件(因为我还要获得一些标题信息)。我在本地集群上测试了我的映射器,其具有与EMR相同的hadoop版本。 5个文件需要40分钟(我有慢速的互联网)。但是当我在EMR上运行这个工作时,它在67分钟内停留了大约41分钟(发现我必须杀死它)。 问题出在哪儿?上面的脚本读取内容(预期的html代码)然后调用方法来查找文本语言(如果可能)。 这是一个解析器问题吗?或语言方法问题(此方法是cld2库方法)
更多细节。我在EMR上使用了m1.medium(用于测试)。我只给了一个输入,即只有一个warc.gz文件。 以下是EMR工作的日志
2017-01-14 05:00:21,840 INFO org.apache.hadoop.mapreduce.Job (main): Job job_1484542573756_0001 running in uber mode : false
2017-01-14 05:00:21,843 INFO org.apache.hadoop.mapreduce.Job (main): map 0% reduce 0%
2017-01-14 05:00:47,163 INFO org.apache.hadoop.mapreduce.Job (main): map 67% reduce 0%