在引导程序中设置的环境变量在AWS EMR中不起作用

时间:2014-04-16 16:59:00

标签: hadoop amazon-web-services environment-variables bootstrapping emr

我在我的引导代码中设置了一个环境变量

export HADOOP_HOME=/home/hadoop
export HADOOP_CMD=/home/hadoop/bin/hadoop
export HADOOP_STREAMING=/home/hadoop/contrib/streaming/hadoop_streaming.jar
export JAVA_HOME=/usr/lib64/jvm/java-7-oracle/

然后使用上面定义的一个变量 -

$HADOOP_CMD fs -mkdir /home/hadoop/contents
$HADOOP_CMD fs -put /home/hadoop/contents/* /home/hadoop/contents/

执行失败并显示错误消息 -

/mnt/var/lib/bootstrap-actions/2/cycle0_unix.sh: line 3: fs: command not found
/mnt/var/lib/bootstrap-actions/2/cycle0_unix.sh: line 4: fs: command not found

cycle0.sh是我的bootstrap脚本的名称。

关于这里发生了什么的任何评论?

4 个答案:

答案 0 :(得分:1)

我找到了解决问题的正确方法。我尝试使用hadoop fs命令将数据文件从S3复制到EMR是徒劳的。我刚刚了解了EMR中可用于文件传输的S3DistCp命令,因此我正在跳过$HADOOP_CMD方法。对于那些关心S3DistCp如何工作的人Link to AWS EMR Docs。我仍然不明白为什么bootstrap脚本在后续语句中不接受环境变量。

答案 1 :(得分:1)

回到问题的主题,似乎不能从任何引导代码设置环境变量,只能从必须命名的脚本设置或更新它们

hadoop-user-env.sh

此处有更多详情: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hadoop-config_hadoop-user-env.sh.html

答案 2 :(得分:0)

我认为你不需要环境变量。只是改变

fs

hadoopfs

答案 3 :(得分:0)

您可以使用分类配置此类Spark专用(和其他)环境变量,请参见https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html

另一个(相当肮脏的)选项是在引导操作中用一些bashrc来丰富export FOO=bar