将参数传递给Hadoop映射器

wlk*_*wlk 16 hadoop mapreduce

我正在使用新的Hadoop API并寻找一种方法将一些参数(少量字符串)传递给映射器.
我怎样才能做到这一点?

此解决方案适用于旧API:

JobConf job = (JobConf)getConf();
job.set("NumberOfDocuments", args[0]);
Run Code Online (Sandbox Code Playgroud)

这里," NumberOfDocuments"是参数的名称,其值是args[0]从命令行参数" " 读取的.设置此参数后,可以在reducer或mapper中检索其值,如下所示:

private static Long N;
public void configure(JobConf job) {
     N = Long.parseLong(job.get("NumberOfDocuments"));
}
Run Code Online (Sandbox Code Playgroud)

注意,棘手的部分是你不能设置这样的参数:

Configuration con = new Configuration();
con.set("NumberOfDocuments", args[0]);
Run Code Online (Sandbox Code Playgroud)

Pra*_*ati 44

在main方法中,在运行作业时设置所需的参数,或使用-D命令行选项.

Configuration conf = new Configuration();
conf.set("test", "123");

Job job = new Job(conf);
Run Code Online (Sandbox Code Playgroud)

在mapper/reducer中获取参数为

Configuration conf = context.getConfiguration();
String param = conf.get("test");
Run Code Online (Sandbox Code Playgroud)