【问题标题】:How to set system environment variable from Mapper Hadoop?如何从 Mapper Hadoop 设置系统环境变量?
【发布时间】:2012-04-20 12:32:03
【问题描述】:

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

我正在这样做:

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/ 但仍然无法正常工作:(

请问有什么建议/解决方案吗?

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

我想设置运行映射器的机器的系统环境变量(特别是 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 特定的环境变量,而是系统环境变量。

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

【问题讨论】:

  • 这似乎是一个新问题,所以提出一个新问题,否则它会失去焦点

标签: hadoop mapreduce


【解决方案1】:

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

无论如何,在提交作业时使用如下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 好像在 0.20.1 被移除了。
猜你喜欢
  • 1970-01-01
  • 2017-07-02
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 2011-04-17
相关资源
最近更新 更多