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

EMRFS CLI 命令参考

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

注意

emrfs 命令仅支持 VT100 终端仿真。但是,它可能适用于其它终端仿真器模式。

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

以步骤形式提交 EMRFS CLI 命令

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

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 值检查日志以了解操作结果。