我正在50k文本文档1-100个“页面”上运行Mapreduce作业。我对文档的执行不多,只是一些正则表达式过程。 MapReduce大约需要7个小时。
mapper函数在一行文本上运行,基本上每个文档中每一行文本都会调用map函数,这需要很多过程。然后,reducer运行并合并数据。
public class TextMetricsMapper extends Mapper<LongWritable, Text, Text, Text> {
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
StringBuilder sb = new StringBuilder();
String line = value.toString();
…
由于我正在阅读小的文本文件,因此似乎大部分处理时间都花在了调用映射器上。我的意思是,如果50,000个文件中的1个具有5,000行,那么仅针对该文件的5,000映射过程。
如何更改映射器以仅读取整个文件?我真的很想一次在映射器中查看整个文档,以创建所需的统计信息。
*由于业务需求,我必须使用Hadoop。