我正在开发一种情感分析工具,它可以从。txt文件中接收内容,并且需要在字典中检查该单词是积极的还是消极的。我使用FileInputFormat.addInputPath(args[0])来引用包含要分析的单词的.txt文件。我尝试用字典的内容创建一个ArrayList (.txt文件64KB),并将其传递给Mapper类中使用的类ReadDictionary的静态对象。在eclipse上运行它是可以的,但是当我尝试在Hadoop上运行时,我得到了一些错误。如何将字典的内容(.txt文件64KB)传递给map类以高效的方式在Hadoop (HDFS)上运行?
可以使用org.apache.hadoop.filecache.DistributedCache
缓存字典文件
DistributedCache是Map-Reduce框架提供的一个工具,用于缓存应用程序所需的文件(文本,存档,jar等)。
在从属节点上执行作业的任何任务之前,框架会将必要的文件复制到从属节点上。它的效率源于这样一个事实,即每个作业只复制一次文件,并且能够缓存从服务器上未归档的归档文件。
在org.apache.hadoop.mapreduce.Mapper
类中有一个setup
方法,该方法在Mapper
初始化时调用。
您可以将字典保存在HDFS,本地或远程某处,并且您可以将句柄(路径,文件路径或远程URL)作为上下文参数传递给它。在setup
impl中,使用context参数实例化字典。在Mapper
的整个生命周期中,字典对象都将留在内存中。
cleanup
方法中清除它。