如何从Mapper Hadoop设置系统环境变量?
线下的问题已解决,但我面临另一个问题。如何从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特定的环境变量,而是一个系统环境变量。
任何解决方案/建议? 在此先感谢..
你为什么不导出群集的所有节点上这个变量?
不管怎么说,使用Configuration类,如下,同时提交工作
Configuration conf = new Configuration();
conf.set("mapred.map.child.env",<string value>);
Job job = new Job(conf);
值的格式为K1 = V1,K2 = V2
我试过这个,但似乎它不适用于我。我grepped hadoop源代码,并没有找到'mapred.map.child.env'。我正在使用hadoop 0.20.1 – DeepNightTwo 2012-12-03 13:10:08
@DeepNightTwo似乎它已在0.20.1中删除。 – 2012-12-04 01:37:12
这看起来一个新的问题,所以提出一个新问题否则它会失去焦点 – 2012-04-20 16:51:38