在引导操作中找不到Hadoop命令

在引导操作中找不到Hadoop命令,hadoop,emr,amazon-emr,Hadoop,Emr,Amazon Emr,我有一个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

我有一个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,关闭集群


谢谢

虽然传统的Hadoop集群将数据存储在HDFS(Hadoop分布式文件系统)中,但建议Amazon EMR集群将其源数据和最终输出存储在Amazon S3中

将Amazon S3用于存储提供了几个好处:

  • 无限存储(而HDFS在集群中是固定大小的)
  • 持久数据存储(而当Amazon EMR集群终止时,HDFS中的数据将丢失)
  • 与其他知道如何读/写AmazonS3的系统更容易集成
许多Hadoop服务可以与AmazonS3进行本机交互,而不是通过引导操作从AmazonS3加载数据。例如,下面是一个Hive命令,该命令基于Amazon S3中已存储的数据创建一个表:

CREATE EXTERNAL TABLE orders_s3_export 
( order_id string, customer_id string, order_date int, total double ) 
PARTITIONED BY (year string, month string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
LOCATION 's3://us-west-2-aws-training/awsu-ilt/big-data/v2.0/data/lab1/data/ddb-orders';
当在此表上运行
SELECT
命令时,Hive将自动在AmazonS3中查找数据文件。类似地,当数据插入到表中时,它将存储在AmazonS3上的文件中(这对于配置单元作业的最终输出很有好处)

见:

Spark还可以直接从AmazonS3访问数据


请参阅:

虽然传统的Hadoop集群将数据存储在HDFS(Hadoop分布式文件系统)中,但建议Amazon EMR集群将其源数据和最终输出存储在Amazon S3

将Amazon S3用于存储提供了几个好处:

  • 无限存储(而HDFS在集群中是固定大小的)
  • 持久数据存储(而当Amazon EMR集群终止时,HDFS中的数据将丢失)
  • 与其他知道如何读/写AmazonS3的系统更容易集成
许多Hadoop服务可以与AmazonS3进行本机交互,而不是通过引导操作从AmazonS3加载数据。例如,下面是一个Hive命令,该命令基于Amazon S3中已存储的数据创建一个表:

CREATE EXTERNAL TABLE orders_s3_export 
( order_id string, customer_id string, order_date int, total double ) 
PARTITIONED BY (year string, month string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
LOCATION 's3://us-west-2-aws-training/awsu-ilt/big-data/v2.0/data/lab1/data/ddb-orders';
当在此表上运行
SELECT
命令时,Hive将自动在AmazonS3中查找数据文件。类似地,当数据插入到表中时,它将存储在AmazonS3上的文件中(这对于配置单元作业的最终输出很有好处)

见:

Spark还可以直接从AmazonS3访问数据


请参阅:

没错,在执行引导操作时,hadoop可执行文件尚未加载

如本文所述:引导操作是在AmazonEMR集群被配置并从启动集群状态转换到引导集群状态后运行的第一件事


要执行命令,您需要使用步骤。

没错,在执行引导操作时,hadoop可执行文件尚未加载

如本文所述:引导操作是在AmazonEMR集群被配置并从启动集群状态转换到引导集群状态后运行的第一件事


要执行命令,您需要使用step。

在Hadoop下运行哪些应用程序?蜂巢、黑斑羚、普雷斯托?这些系统知道如何直接与S3对话,因此如果您告诉我们您在使用什么,我们将提供建议。您好。这是一个公平的观点。我想最好的办法是用更直接的方式解释我想做的事情。我正在尝试使用EMR中的
引导操作
,自动获取一些数据,对其进行处理,并关闭集群。我是如何通过CLI中的
hadoop
命令调用来实现这一点的。在第一步中,这是Python和Scikit学习使用S3中的数据,但我想扩展到Spark和HiveHadoop下运行的是什么应用程序?蜂巢、黑斑羚、普雷斯托?这些系统知道如何直接与S3对话,因此如果您告诉我们您在使用什么,我们将提供建议。您好。这是一个公平的观点。我想最好的办法是用更直接的方式解释我想做的事情。我正在尝试使用EMR中的
引导操作
,自动获取一些数据,对其进行处理,并关闭集群。我是如何通过CLI中的
hadoop
命令调用来实现这一点的。在第一步中,这是Python和Scikit学习使用S3中的数据,但我想扩展到Spark和HiveSo。在上面的示例中,我想处理一些数据并自动终止集群,我将使用
自定义步骤创建配置单元表(例如),然后使用另一个
自定义步骤运行Spark作业?是的,但EMR并不使用自定义步骤,而是专门了解一些应用程序(如Hive)的步骤。请参阅:在我上面的示例中,我想处理一些数据并自动终止集群,我会使用
自定义步骤
来创建配置单元表(例如),然后使用另一个
自定义步骤
在其上运行Spark作业?是的,但不是使用自定义步骤,EMR特别了解某些应用程序(如配置单元)的步骤。见: