2012-04-20 74 views
0

线下的问题已解决,但我面临另一个问题。如何从Mapper Hadoop设置系统环境变量?

我这样做:

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 

但我使用的具有工作&配置,而不是JobConf的Hadoop版本0.20.2。

我找不到任何这样的变量,这也不是一个Hadoop特定的环境变量,而是一个系统环境变量。

任何解决方案/建议? 在此先感谢..

+0

这看起来一个新的问题,所以提出一个新问题否则它会失去焦点 – 2012-04-20 16:51:38

回答

3

你为什么不导出群集的所有节点上这个变量?

不管怎么说,使用Configuration类,如下,同时提交工作

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

值的格式为K1 = V1,K2 = V2

+0

我试过这个,但似乎它不适用于我。我grepped hadoop源代码,并没有找到'mapred.map.child.env'。我正在使用hadoop 0.20.1 – DeepNightTwo 2012-12-03 13:10:08

+0

@DeepNightTwo似乎它已在0.20.1中删除。 – 2012-12-04 01:37:12