EMRFSCLI命令参考 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

EMRFSCLI命令参考

默认情况下,EMRFSCLI使用 Amazon EMR 发行版 3.2.1 或更高版本创建的所有集群主节点上都安装了。您可以使用来管理元数据EMRFSCLI以获得一致的视图。

注意

只有 VT1 00 终端仿真支持该emrfs命令。但是,它可能适用于其它终端仿真器模式。

emrfs 顶级命令

emrfs 顶级命令支持以下结构。

emrfs [describe-metadata | set-metadata-capacity | delete-metadata | create-metadata | \ list-metadata-stores | diff | delete | sync | import ] [options] [arguments]

指定 [选项],根据需要使用或不使用下表中描述的 [参数]。有关特定于子命令 (describe-metadataset-metadata-capacity 等) 的 [选项],请参阅下面的每个子命令。

emrfs 的 [选项]
选项 描述 必填

-a AWS_ACCESS_KEY_ID | --access-key AWS_ACCESS_KEY_ID

用于向 Amazon S3 写入对象以及在 DynamoDB 中创建或访问元数据存储的访问密钥。 Amazon 默认情况下,AWS_ACCESS_KEY_ID 设置为用于创建集群的访问密钥。

-s AWS_SECRET_ACCESS_KEY | --secret-key AWS_SECRET_ACCESS_KEY

与您用于向 Amazon S3 写入对象以及在 DynamoDB 中创建或访问元数据存储的访问 Amazon 密钥关联的密钥。默认情况下,AWS_SECRET_ACCESS_KEY 设置为与用于创建集群的访问密钥关联的密钥。

-v | --verbose

使输出为详细模式。

-h | --help

通过用法语句显示 emrfs 命令的帮助消息。

emrfs describe-metadata 子命令

emrfs describe-metadata 的 [选项]
选项 描述 必填

-m METADATA_NAME | --metadata-name METADATA_NAME

METADATA_NAME 是 DynamoDB 元数据表的名称。如果 METADATA_NAME 未提供参数,默认值为EmrFSMetadata

例 emrfs describe-metadata 示例

以下示例描述默认元数据表。

$ emrfs describe-metadata EmrFSMetadata read-capacity: 400 write-capacity: 100 status: ACTIVE approximate-item-count (6 hour delay): 12

emrfs set-metadata-capacity 子命令

emrfs 的 [选项] set-metadata-capacity
选项 描述 必填

-m METADATA_NAME | --metadata-name METADATA_NAME

METADATA_NAME 是 DynamoDB 元数据表的名称。如果 METADATA_NAME 未提供参数,默认值为EmrFSMetadata

-r READ_CAPACITY | --read-capacity READ_CAPACITY

对元数据表请求的读取吞吐容量。如果 READ_CAPACITY 未提供参数,默认值为400

-w WRITE_CAPACITY | --write-capacity WRITE_CAPACITY

对元数据表请求的写入吞吐容量。如果 WRITE_CAPACITY 未提供参数,默认值为100

例 emrfs 示例 set-metadata-capacity

以下示例将名为 600 的元数据表的读取吞吐容量设置为 150,将写入容量设置为 EmrMetadataAlt

$ emrfs set-metadata-capacity --metadata-name EmrMetadataAlt --read-capacity 600 --write-capacity 150 read-capacity: 400 write-capacity: 100 status: UPDATING approximate-item-count (6 hour delay): 0

emrfs delete-metadata 子命令

emrfs delete-metadata 的 [选项]
选项 描述 必填

-m METADATA_NAME | --metadata-name METADATA_NAME

METADATA_NAME 是 DynamoDB 元数据表的名称。如果 METADATA_NAME 未提供参数,默认值为EmrFSMetadata

例 emrfs delete-metadata 示例

以下示例删除默认元数据表。

$ emrfs delete-metadata

emrfs create-metadata 子命令

emrfs create-metadata 的 [选项]
选项 描述 必填

-m METADATA_NAME | --metadata-name METADATA_NAME

METADATA_NAME 是 DynamoDB 元数据表的名称。如果 METADATA_NAME 未提供参数,默认值为EmrFSMetadata

-r READ_CAPACITY | --read-capacity READ_CAPACITY

对元数据表请求的读取吞吐容量。如果 READ_CAPACITY 未提供参数,默认值为400

-w WRITE_CAPACITY | --write-capacity WRITE_CAPACITY

对元数据表请求的写入吞吐容量。如果 WRITE_CAPACITY 未提供参数,默认值为100

例 emrfs create-metadata 示例

以下示例创建一个名为 EmrFSMetadataAlt 的元数据表。

$ emrfs create-metadata -m EmrFSMetadataAlt Creating metadata: EmrFSMetadataAlt EmrFSMetadataAlt read-capacity: 400 write-capacity: 100 status: ACTIVE approximate-item-count (6 hour delay): 0

emrfs list-metadata-stores 子命令

emrfs list-metadata-stores 子命令没有任何 [选项]。

例 List-metadata-stores 示例

以下示例列出您的元数据表。

$ emrfs list-metadata-stores EmrFSMetadata

emrfs diff 子命令

emrfs diff 的 [选项]
选项 描述 必填

-m METADATA_NAME | --metadata-name METADATA_NAME

METADATA_NAME 是 DynamoDB 元数据表的名称。如果 METADATA_NAME 未提供参数,默认值为EmrFSMetadata

s3://s3Path

与元数据表进行比较的 Amazon S3 存储桶的路径。存储桶以递归方式同步。

例 emrfs diff 示例

以下示例将默认元数据表与 Amazon S3 存储桶进行比较。

$ emrfs diff s3://elasticmapreduce/samples/cloudfront BOTH | MANIFEST ONLY | S3 ONLY DIR elasticmapreduce/samples/cloudfront DIR elasticmapreduce/samples/cloudfront/code/ DIR elasticmapreduce/samples/cloudfront/input/ DIR elasticmapreduce/samples/cloudfront/logprocessor.jar DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-14.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-15.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-16.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-17.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-18.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-19.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-20.WxYz1234 DIR elasticmapreduce/samples/cloudfront/code/cloudfront-loganalyzer.tgz

emrfs delete 子命令

emrfs delete 的 [选项]

选项

描述

必填

-m METADATA_NAME | --metadata-name METADATA_NAME

METADATA_NAME 是 DynamoDB 元数据表的名称。如果 METADATA_NAME 未提供参数,默认值为EmrFSMetadata

s3://s3Path

为实现一致视图而跟踪的 Amazon S3 存储桶的路径。存储桶以递归方式同步。

-t TIME | --time TIME

过期时间 (使用时间单位参数进行解释)。所有早于 TIME 已删除指定存储桶的参数。

-u UNIT | --time-unit UNIT

用于解释时间参数的度量值 (纳秒、微秒、毫秒、秒、分钟、小时或天)。如果未指定参数,则默认值为 days

--read-consumption READ_CONSUMPTION

请求用于 delete 操作的可用读取吞吐量。如果 READ_CONSUMPTION 未指定参数,默认值为400

--write-consumption WRITE_CONSUMPTION

请求用于 delete 操作的可用写入吞吐量。如果 WRITE_CONSUMPTION 未指定参数,默认值为100

例 emrfs delete 示例

以下示例从一致视图的跟踪元数据中删除一个 Amazon S3 存储桶中的所有对象。

$ emrfs delete s3://elasticmapreduce/samples/cloudfront entries deleted: 11

emrfs import 子命令

for emrfs import 的 [选项]
选项 描述 必填

-m METADATA_NAME | --metadata-name METADATA_NAME

METADATA_NAME 是 DynamoDB 元数据表的名称。如果 METADATA_NAME 未提供参数,默认值为EmrFSMetadata

s3://s3Path

为实现一致视图而跟踪的 Amazon S3 存储桶的路径。存储桶以递归方式同步。

--read-consumption READ_CONSUMPTION

请求用于 delete 操作的可用读取吞吐量。如果 READ_CONSUMPTION 未指定参数,默认值为400

--write-consumption WRITE_CONSUMPTION

请求用于 delete 操作的可用写入吞吐量。如果 WRITE_CONSUMPTION 未指定参数,默认值为100

例 emrfs import 示例

以下示例随一致视图的跟踪元数据导入一个 Amazon S3 存储桶中的所有对象。忽略所有未知键。

$ emrfs import s3://elasticmapreduce/samples/cloudfront

emrfs sync 子命令

emrfs sync 的 [选项]
选项 描述 必填

-m METADATA_NAME | --metadata-name METADATA_NAME

METADATA_NAME 是 DynamoDB 元数据表的名称。如果 METADATA_NAME 未提供参数,默认值为EmrFSMetadata

s3://s3Path

为实现一致视图而跟踪的 Amazon S3 存储桶的路径。存储桶以递归方式同步。

--read-consumption READ_CONSUMPTION

请求用于 delete 操作的可用读取吞吐量。如果 READ_CONSUMPTION 未指定参数,默认值为400

--write-consumption WRITE_CONSUMPTION

请求用于 delete 操作的可用写入吞吐量。如果 WRITE_CONSUMPTION 未指定参数,默认值为100

例 emrfs sync 命令示例

以下示例随一致视图的跟踪元数据导入一个 Amazon S3 存储桶中的所有对象。删除所有未知键。

$ emrfs sync s3://elasticmapreduce/samples/cloudfront Synching samples/cloudfront 0 added | 0 updated | 0 removed | 0 unchanged Synching samples/cloudfront/code/ 1 added | 0 updated | 0 removed | 0 unchanged Synching samples/cloudfront/ 2 added | 0 updated | 0 removed | 0 unchanged Synching samples/cloudfront/input/ 9 added | 0 updated | 0 removed | 0 unchanged Done synching s3://elasticmapreduce/samples/cloudfront 9 added | 0 updated | 1 removed | 0 unchanged creating 3 folder key(s) folders written: 3

emrfs read-sqs 子命令

emrfs read-sqs 的 [选项]
选项 描述 必填

-q QUEUE_NAME | --queue-name QUEUE_NAME

QUEUE_NAME 是在中配置的 Amazon SQS 队列的名称emrfs-site.xml。默认值为 EMRFS-Inconsistency-<jobFlowId>

-o OUTPUT_FILE | --output-file OUTPUT_FILE

OUTPUT_FILE 是主节点本地文件系统上输出文件的路径。从队列读取的消息会写入此文件。

emrfs delete-sqs 子命令

emrfs delete-sqs 的 [选项]
选项 描述 必填

-q QUEUE_NAME | --queue-name QUEUE_NAME

QUEUE_NAME 是在中配置的 Amazon SQS 队列的名称emrfs-site.xml。默认值为 EMRFS-Inconsistency-<jobFlowId>

将EMRFSCLI命令作为步骤提交

以下示例说明如何在主节点上使用该emrfs实用程序,方法是利用 Amazon CLI 或API和作为步骤运行emrfs命令。command-runner.jar该示例使用 Amazon SDK for Python (Boto3) 向集群添加一个步骤,该步骤将 Amazon S3 存储桶中的对象添加到默认EMRFS元数据表。

import boto3 from botocore.exceptions import ClientError def add_emrfs_step(command, bucket_url, cluster_id, emr_client): """ Add an EMRFS command as a job flow step to an existing cluster. :param command: The EMRFS command to run. :param bucket_url: The URL of a bucket that contains tracking metadata. :param cluster_id: The ID of the cluster to update. :param emr_client: The Boto3 Amazon EMR client object. :return: The ID of the added job flow step. Status can be tracked by calling the emr_client.describe_step() function. """ job_flow_step = { "Name": "Example EMRFS Command Step", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": ["/usr/bin/emrfs", command, bucket_url], }, } try: response = emr_client.add_job_flow_steps( JobFlowId=cluster_id, Steps=[job_flow_step] ) step_id = response["StepIds"][0] print(f"Added step {step_id} to cluster {cluster_id}.") except ClientError: print(f"Couldn't add a step to cluster {cluster_id}.") raise else: return step_id def usage_demo(): emr_client = boto3.client("emr") # Assumes the first waiting cluster has EMRFS enabled and has created metadata # with the default name of 'EmrFSMetadata'. cluster = emr_client.list_clusters(ClusterStates=["WAITING"])["Clusters"][0] add_emrfs_step( "sync", "s3://elasticmapreduce/samples/cloudfront", cluster["Id"], emr_client ) if __name__ == "__main__": usage_demo()

可以使用返回的 step_id 值检查日志以了解操作结果。