我在我的引导代码中设置了一个环境变量
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脚本的名称。
关于这里发生了什么的任何评论?
答案 0 :(得分:1)
我找到了解决问题的正确方法。我尝试使用hadoop fs
命令将数据文件从S3复制到EMR是徒劳的。我刚刚了解了EMR中可用于文件传输的S3DistCp
命令,因此我正在跳过$HADOOP_CMD
方法。对于那些关心S3DistCp
如何工作的人Link to AWS EMR Docs。我仍然不明白为什么bootstrap脚本在后续语句中不接受环境变量。
答案 1 :(得分:1)
回到问题的主题,似乎不能从任何引导代码设置环境变量,只能从必须命名的脚本设置或更新它们
hadoop-user-env.sh
答案 2 :(得分:0)
我认为你不需要环境变量。只是改变
fs
到
hadoopfs
答案 3 :(得分:0)
您可以使用分类配置此类Spark专用(和其他)环境变量,请参见https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html
另一个(相当肮脏的)选项是在引导操作中用一些bashrc
来丰富export FOO=bar
。