如何从Mapper Hadoop设置系统环境变量?

时间:2012-04-20 12:32:04

标签: hadoop mapreduce

线下的问题已经解决,但我面临另一个问题。

我这样做:

DistributedCache.createSymlink(job.getConfiguration()); 
DistributedCache.addCacheFile(new URI   
("hdfs:/user/hadoop/harsh/libnative1.so"),conf.getConfiguration()); 

并在映射器中:

System.loadLibrary("libnative1.so");

(我也试过了 的System.loadLibrary( “libnative1”); 的System.loadLibrary( “native1”);

但是我收到了这个错误:

java.lang.UnsatisfiedLinkError: no libnative1.so in java.library.path

我完全无能为力将java.library.path设置为.. 我尝试将它设置为/ home并将每个.so从分布式缓存复制到/ home /但仍然无效:(

有任何建议/解决方案吗?

<击> IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

我想设置运行映射器的机器的系统环境变量(特别是LD_LIBRARY_PATH)。

我试过了:

Runtime run = Runtime.getRuntime();
Process pr=run.exec("export LD_LIBRARY_PATH=/usr/local/:$LD_LIBRARY_PATH");

但它会抛出IOException。

我也知道

JobConf.MAPRED_MAP_TASK_ENV

但是我使用的是hadoop版本0.20.2,它有Job&amp;配置而不是JobConf。

我无法找到任何此类变量,这也不是Hadoop特定的环境变量,而是系统环境变量。

任何解决方案/建议? 提前谢谢..

1 个答案:

答案 0 :(得分:3)

为什么不在集群的所有节点上导出此变量?

无论如何,在提交作业时使用如下Configuration课程

Configuration conf = new Configuration();
conf.set("mapred.map.child.env",<string value>);
Job job = new Job(conf);

值的格式为k1 = v1,k2 = v2