行下的问题解决了,但我面临着另一个问题。
我正在这样做:
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/但仍然无法正常工作:(
请问有什么建议/解决方案吗?
三三
我想设置运行映射器的机器的系统环境变量(特别是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&Configuration而不是JobConf。
我找不到任何这样的变量,这也不是特定于Hadoop的环境变量,而是系统环境变量。
任何解决方案/建议?提前谢谢..
为什么不在群集的所有节点上导出此变量?
无论如何,在提交作业时使用如下所示的配置类
Configuration conf = new Configuration();
conf.set("mapred.map.child.env",<string value>);
Job job = new Job(conf);
值的格式为 k1=v1,k2=v2