jjzjj

java - Hadoop 为每个映射器使用一个实例

我正在使用Hadoop的mapreduce来解析xml文件。所以我有一个名为Parser的类,它可以有一个方法parse()来解析xml文件。所以我应该在Mapper的map()函数中使用它。然而,这意味着每次当我想调用一个Parser时,我都需要创建一个Parser实例。但是这个实例对于每个map作业应该是相同的。所以我想知道是否可以只实例化此Parser一次?还有一个附加问题,为什么Mapper类总是静态的? 最佳答案 为确保每个Mapper一个解析器实例,请使用映射器设置方法来实例化您的解析器实例,并使用清理方法进行清理。同样

hadoop - 为什么不为 hadoop TeraSort 映射器/ reducer

我计划在Hadoop0.20.2中的TeraSort类的映射器中插入一些代码。但是查看源码,找不到mapper实现的那段。通常,我们会看到一个名为job.setMapperClass()的方法,它指示映射器类。但是,对于TeraSort,我只能看到setInputformat、setOutputFormat之类的东西。我找不到调用mapper和reduce方法的位置?任何人都可以对此提供一些提示吗?谢谢,源码是这样的,publicintrun(String[]args)throwsException{LOG.info("starting");JobConfjob=(JobConf)ge

java - Hadoop - 为特定节点的 Mapper 中的每个 map() 函数创建类的单个实例

我在java中有一个类似这样的类用于hadoopMapReducepublicClassMyClass{publicstaticMyClassMapperextendsMapper{staticSomeClasssomeClassObj=newSomeClass();voidmap(ObjectKey,Textvalue,Contextcontext){StringsomeText=someClassObj.getSomeThing();}}}我只需要someClassObj的单个实例可用于map()函数每个节点。如何实现?如果您需要有关此主题的更多详细信息,请随时询问。谢谢!

java - Hadoop Map/Reduce Mapper 'map' 方法和日志

我最近被要求研究加速mapreduce项目。我正在尝试查看在实现以下类的“map”方法中生成的log4j日志信息:org.apache.hadoop.mapred.Mapper在这个类中有以下方法:@Overridepublicvoidconfigure(..){..}publicstaticvoiddoCompileAndAdd(..){..}publicvoidmap(..){..}记录信息可用于配置方法和doCompileAndAdd方法(从配置方法调用);但是,没有显示“map”方法的日志信息。我也试过在map方法中简单地使用System.out.println(..)但没有成

hadoop - 如何在 Mapper 和 Reducer 类中共享变量?

我有一个要求,比如我想在mapper和reducer类之间共享一个变量。场景如下:-假设我的输入记录是类型A、B和C。我正在处理这些记录并相应地为map函数中的output.collect生成键和值。但与此同时,我还在映射器类中声明了3个staticint变量,以保持记录A、B和C类型的计数。现在这些变量将由各种map线程更新。完成所有maptask后,我想将这三个值传递给Reduce函数。如何实现?我尝试覆盖close()方法,但它会在每个映射函数执行后调用,而不是在所有映射函数执行完毕时调用。或者是否有任何其他方式来共享变量。我希望输出每种类型记录的总数以及我正在显示的任何已处理输

python - 如何优化这个MapReduce函数,Python,mrjob

我对Map/Reduce原理和pythonmrjob框架还很陌生,我写了这个示例代码,它工作正常,但我想知道我可以改变它什么以使其“完美”/更高效.frommrjob.jobimportMRJobimportoperatorimportre#appendresultfromeachreduceroutput_words=[]classMRSudo(MRJob):definit_mapper(self):#movelistoftuplesacrossmapperself.words=[]defmapper(self,_,line):command=line.split()[-1]self

java - 控制 hadoop mapper 输出文件的数量

我有一份hadoop的工作。陈述工作后,我启动了一些映射器。每个映射器将一些文件写入磁盘,如part-m-00000、part-m-00001。据我了解,每个映射器创建一个零件文件。我有大量数据,所以必须有多个映射器,但我可以以某种方式控制此输出文件的数量吗?我的意思是,hadoop将启动,例如10个映射器,但只有三个部分文件?我找到了这篇文章Howdomultiplereducersoutputonlyonepart-fileinHadoop?但是有使用旧版本的hadoop库。我使用的类来自org.apache.hadoop.mapreduce.*而不是来自org.apache.ha

java - Hadoop java mapper -copyFromLocal 堆大小错误

作为我的Java映射器的一部分,我有一个命令在本地节点上执行一些代码并将本地输出文件复制到hadoopfs。不幸的是,我得到以下输出:ErroroccurredduringinitializationofVMCouldnotreserveenoughspaceforobjectheap我试过将mapred.map.child.java.opts调整为-Xmx512M,但不幸的是没有成功。当我通过ssh进入节点时,我可以毫无问题地运行-copyFromLocal命令。输出文件也很小,大约100kb。如有任何帮助,我们将不胜感激! 最佳答案

java - 将值从 Mapper 传递到 Reducer

我通过查找映射器正在处理的当前文件(以及其他一些东西)获得了少量元数据。我需要将这个元数据发送到reducer。当然,我可以让映射器在它生成的对中发出这个,但我想避免它.另外,再多约束一点,我不想使用DistributedCahce。那么,我还有其他选择吗?更准确地说,我的问题是双重的(1)我尝试通过在映射器的configure(JobConf)中执行job.set(Prop,Value)并在reducer的中执行job.get()来设置一些参数>配置(JobConf)。可悲的是,我发现它不起作用。另外,我很想知道为什么会出现这种行为。我的主要问题是(2)如何以“干净的方式”(如果可能

python - Hadoop 流 : PYTHONPATH not working when mapper runs

我在其中设置了PYTHONPATH,它也能正常工作,除非我运行map-reduce作业它没有说追溯(最近的调用最后):文件“/work/app/hadoop/tmp/mapred/local/taskTracker/hduser/jobcache/job_201203091218_0006/attempt_201203091218_0006_m_000020_0/work/./mapper.py”,第57行,在从src.utilities导入实用程序导入错误:没有名为src.utilities的模块java.lang.RuntimeException:PipeMapRed.waitOu