我有一个Map缩小器。这个Map器应该使用一些只读参数集。假设我想计算输入行中某些子字符串(某事物的标题)的出现次数。我有一个成对的列表:“sometitle”=>“一个正则表达式从输入行提取这个标题”。这些对存储在通常的文本文件中。
将此文件传递给mapper的最佳方法是什么?我只有一个想法:
将成对的文件上载到hdfs。
使用-dpath.to.file.with.properties将路径传递到文件
在Map器的静态{}部分中,读取文件并填充Map对“some title”=>“regular expr for the title”。
是好是坏?请再见
2条答案
按热度按时间a8jjtwal1#
你已经走上正轨了,但我建议你使用分布式缓存。它的目的正是为了实现这一点—将只读文件传递给任务节点。
将文件放入hdfs
将该文件添加到应用程序主方法中的分布式缓存中。
在mapper类中,重写
configure
或者setup
方法,具体取决于您使用的api版本。在这种方法中,它可以从分布式缓存中读取数据并将所有内容存储在内存中。ddarikpa2#
这是我代码的一部分。请参阅将文件复制到hdfs并启动mr job的脚本。在maven集成测试阶段,我确实使用ant:scp和ssh目标将这个脚本上传到hadoop节点。
以及mapper中的代码:
你看:1。我确实将元数据文件上载到节点2。我把它放到hdfs3上了。我使用-files参数4提供文件路径。我确实指定这个文件在hdfs中(hdfs://0.0.0.0:8020/httpsample/metadata.csv)