我有一个EMR集群,它使用来自我的s3的script.sh
作为引导动作。在此,它包含一些hadoop dfs -distcp
和hadoop dfs -copyToLocal
命令。如果我登录到构建的EMR集群并运行命令,它绝对没问题,但是如果我尝试将其作为引导操作的一部分,则它会失败。记录文件:
You are using pip version 6.1.1, however version 8.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
/mnt/var/lib/bootstrap-actions/1/setup.sh: line 4: hadoop: command not found
/mnt/var/lib/bootstrap-actions/1/setup.sh: line 7: hdfs: command not found
/mnt/var/lib/bootstrap-actions/1/setup.sh: line 8: hadoop: command not found`
我认为这意味着hadoop
可执行文件尚未加载,但如果是这样,我该如何延迟?我试图做的一系列动作是启动EMR集群,自动从s3获取数据,执行分析,生成输出,将输出复制回s3,关闭集群
谢谢!
答案 0 :(得分:0)
虽然传统的Hadoop集群将数据存储在 HDFS (Hadoop分布式文件系统)中,但建议Amazon EMR集群将其源数据和最终输出存储在 Amazon S3 中。
使用Amazon S3进行存储可提供好处:
许多Hadoop服务可以与Amazon S3本地交互,而不是通过引导操作从Amazon S3加载数据。例如,这是一个 Hive 命令,它根据已存储在Amazon S3中的数据创建表:
master
当在此表上运行test.png
命令时,Hive将自动在Amazon S3中查找数据文件。同样,当数据插入表中时,它将存储在Amazon S3上的文件中(这对Hive作业的最终输出有利)。
请参阅:Additional Features of Hive in Amazon EMR
Spark还可以直接从Amazon S3访问数据。
答案 1 :(得分:0)
你说得对,hadoop可执行文件尚未在执行引导操作时加载。
如此处所述:https://aws.amazon.com/premiumsupport/knowledge-center/bootstrap-step-emr/引导操作是在配置Amazon EMR集群并从STARTING集群状态转换为BOOTSTRAPPING集群状态后首先运行的。
为了能够执行命令,您需要使用步骤。