在 bootstrap 个操作中找不到 Hadoop 命令

Hadoop command not found in bootstrap actions

我有一个 EMR 集群,它使用来自我的 s3 的 script.sh 作为 bootstrap 操作。在此,它包括一些 hadoop dfs -distcphadoop dfs -copyToLocal 命令。如果我登录到构建的 EMR 集群并使用 运行 命令,那绝对没问题,但如果我尝试将其作为 bootstrap 操作的一部分进行操作,则会失败。此处的日志文件:

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 集群将其源数据和最终输出存储在 亚马逊 S3.

使用 Amazon S3 进行存储提供多项优势

  • 无限存储(而 HDFS 在集群中是固定大小)
  • 持久数据存储(而 HDFS 中的数据在 Amazon EMR 集群终止时丢失)
  • 更容易与其他知道如何 read/write 到 Amazon S3
  • 的系统集成

无需通过 bootstrap 操作 从 Amazon S3 加载数据,许多 Hadoop 服务可以在本地与 Amazon S3 交互。例如,下面是一个 Hive 命令,它根据已存储在 Amazon S3 中的数据创建 table:

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 命令在此 table 上 运行 时,Hive 将自动在 Amazon S3 中查找数据文件。同样,当数据插入 table 时,它将存储在 Amazon S3 上的文件中(这有利于 Hive 作业的最终输出)。

参见:Additional Features of Hive in Amazon EMR

Spark 还能够直接从 Amazon S3 访问数据。

参见:Reading and Writing S3 Data with Apache Spark

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

如此处所述:https://aws.amazon.com/premiumsupport/knowledge-center/bootstrap-step-emr/ bootstrap 操作是 运行 在配置 Amazon EMR 集群并从 STARTING 集群状态转换为 BOOTSTRAPPING 集群状态后的第一件事.

为了能够执行您的命令,您需要使用一个步骤。