ListS3

文档中心 › 组件索引 › ListS3

ListS3 Processor

类型全限定名:cn.org.acal.lynxus.processors.aws.s3.ListS3

所属 Bundle:cn.org.acal.lynxus:lynxus-aws-nar:2.11.8

描述

从 S3 存储桶中检索对象列表。 对于列出的每个对象,创建一个表示该对象的 FlowFile,以便可以与 FetchS3Object 结合获取它。 该处理器设计为仅在集群中的主节点上运行。 如果主节点发生变化,新的主节点将继续前一个节点停止的位置,而不会复制所有数据。

标签

AmazonS3AWSlist

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
Bucket与之交互的 S3 存储桶
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Regionus-west-2
  • Africa (Cape Town) — AWS Region Code : af-south-1
  • Asia Pacific (Hong Kong) — AWS Region Code : ap-east-1
  • Asia Pacific (Hyderabad) — AWS Region Code : ap-south-2
  • Asia Pacific (Jakarta) — AWS Region Code : ap-southeast-3
  • Asia Pacific (Malaysia) — AWS Region Code : ap-southeast-5
  • Asia Pacific (Melbourne) — AWS Region Code : ap-southeast-4
  • Asia Pacific (Mumbai) — AWS Region Code : ap-south-1
  • Asia Pacific (New Zealand) — AWS Region Code : ap-southeast-6
  • Asia Pacific (Osaka) — AWS Region Code : ap-northeast-3
  • Asia Pacific (Seoul) — AWS Region Code : ap-northeast-2
  • Asia Pacific (Singapore) — AWS Region Code : ap-southeast-1
  • Asia Pacific (Sydney) — AWS Region Code : ap-southeast-2
  • Asia Pacific (Taipei) — AWS Region Code : ap-east-2
  • Asia Pacific (Thailand) — AWS Region Code : ap-southeast-7
  • Asia Pacific (Tokyo) — AWS Region Code : ap-northeast-1
  • AWS European Sovereign Cloud (Germany) — AWS Region Code : eusc-de-east-1
  • aws global region — AWS Region Code : aws-global
  • AWS GovCloud (US-East) — AWS Region Code : us-gov-east-1
  • AWS GovCloud (US-West) — AWS Region Code : us-gov-west-1
  • aws-cn global region — AWS Region Code : aws-cn-global
  • aws-iso global region — AWS Region Code : aws-iso-global
  • aws-iso-b global region — AWS Region Code : aws-iso-b-global
  • aws-iso-e global region — AWS Region Code : aws-iso-e-global
  • aws-iso-f global region — AWS Region Code : aws-iso-f-global
  • aws-us-gov global region — AWS Region Code : aws-us-gov-global
  • Canada (Central) — AWS Region Code : ca-central-1
  • Canada West (Calgary) — AWS Region Code : ca-west-1
  • China (Beijing) — AWS Region Code : cn-north-1
  • China (Ningxia) — AWS Region Code : cn-northwest-1
  • EU ISOE West — AWS Region Code : eu-isoe-west-1
  • Europe (Frankfurt) — AWS Region Code : eu-central-1
  • Europe (Ireland) — AWS Region Code : eu-west-1
  • Europe (London) — AWS Region Code : eu-west-2
  • Europe (Milan) — AWS Region Code : eu-south-1
  • Europe (Paris) — AWS Region Code : eu-west-3
  • Europe (Spain) — AWS Region Code : eu-south-2
  • Europe (Stockholm) — AWS Region Code : eu-north-1
  • Europe (Zurich) — AWS Region Code : eu-central-2
  • Israel (Tel Aviv) — AWS Region Code : il-central-1
  • Mexico (Central) — AWS Region Code : mx-central-1
  • Middle East (Bahrain) — AWS Region Code : me-south-1
  • Middle East (UAE) — AWS Region Code : me-central-1
  • South America (Sao Paulo) — AWS Region Code : sa-east-1
  • US East (N. Virginia) — AWS Region Code : us-east-1
  • US East (Ohio) — AWS Region Code : us-east-2
  • US ISO East — AWS Region Code : us-iso-east-1
  • US ISO WEST — AWS Region Code : us-iso-west-1
  • US ISOB East (Ohio) — AWS Region Code : us-isob-east-1
  • US ISOB West — AWS Region Code : us-isob-west-1
  • US ISOF EAST — AWS Region Code : us-isof-east-1
  • US ISOF SOUTH — AWS Region Code : us-isof-south-1
  • US West (N. California) — AWS Region Code : us-west-1
  • US West (Oregon) — AWS Region Code : us-west-2
  • Use Custom Region — 用户定义的区域,可以是非 AWS 区域,和/或来自表达式语言(Expression Language)
服务所在的 AWS 区域
Custom Region自定义区域,例如 AWS 兼容服务提供商的区域
支持表达式语言:是(仅使用环境/系统变量求值)
AWS Credentials Provider Service控制器服务 API:
AwsCredentialsProviderService
cn.org.acal.lynxus-lynxus-aws-service-api-nar-2.11.8
用于获取AWS凭证提供者的Controller Service
Listing Strategytimestamps
  • 跟踪时间戳 — 此策略跟踪已列取实体的最新时间戳以确定新/更新的实体。由于它只跟踪少量时间戳,因此可以高效管理列取状态。此策略不会拾取时间戳早于跟踪的最新时间戳的新添加或修改的实体。在列取运行时同时写入多个子目录时也可能遗漏文件。
  • 跟踪实体 — 此策略跟踪最新的 'Entity Tracking Time Window' 内所有已列取实体的信息以确定新/更新的实体。此策略可以拾取 'Tracing Timestamps' 可能遗漏的旧时间戳实体。即使在列取运行时同时写入多个子目录时也能工作。但是需要额外的 DistributedMapCache 控制器服务并且使用更多 JVM 堆内存。有关 'Entity Tracking Time Window' 属性如何工作的更多信息,请参阅说明。
  • 不跟踪 — 此策略不进行任何跟踪即列出所有实体。每次调度此处理器时都会列出相同的实体。建议更改默认的运行计划值。与持久化状态相关的任何属性将被忽略。
指定如何确定新的/更新的实体。 有关详细信息,请参阅每个策略的说明。
Entity Tracking State Cache控制器服务 API:
DistributedMapCacheClient
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
已列出的实体存储在指定的缓存中, 以便该处理器能够在 Lynxus 重启或主节点变更后恢复列举。 'Tracking Entities' 策略需要跟踪最近 'Tracking Time Window' 内所有已列出实体的信息。 为支持大量实体,该策略使用 DistributedMapCache 而非托管状态。 缓存键格式为 'ListedEntities::{processorId}(::{nodeId})'。 如果按节点跟踪已列出的实体,则会添加可选的 '::{nodeId}' 部分以分别管理状态。 例如,集群范围缓存键 = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', 单节点缓存键 = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::lynxus-node3'。 存储的缓存内容是经过 Gzip 压缩的 JSON 字符串。 当目标列举配置发生变化时,缓存键将被删除。 由 'Tracking Entities' 策略使用。
Entity Tracking Time Window3 hours指定该处理器应跟踪已列出实体的时长。 'Tracking Entities' 策略可以选取时间戳位于指定时间窗口内的任何实体。 例如,若设为 '30 minutes',则该处理器运行时,最近 30 分钟内带有时间戳的任何实体都将成为列举目标。 当满足以下任一条件时,已列出的实体被视为 'new/updated' 并发出一个 FlowFile: 1. 不存在于已列出的实体中, 2. 时间戳比缓存的实体更新, 3. 大小与缓存的实体不同。 如果某个缓存实体的时间戳早于指定的时间窗口,该实体将从缓存的已列出实体中移除。 由 'Tracking Entities' 策略使用。
支持表达式语言:是(仅使用环境/系统变量求值)
Entity Tracking Initial Listing Targetall
  • 跟踪时间窗口 — 在首次列取活动中忽略时间戳早于指定 '跟踪时间窗口' 的实体。
  • 所有可用 — 不考虑实体时间戳,在首次列取活动中将列取所有现有实体。
指定应如何处理初始列举。 由 'Tracking Entities' 策略使用。
Record Writer控制器服务 API:
RecordSetWriterFactory
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定用于创建列表的记录写入器。如果未指定,将为每个列出的实体创建一个 FlowFile。如果指定了记录写入器,所有实体将写入单个 FlowFile,而不是将属性添加到各个 FlowFile。
Minimum Object Age0 secS3 对象必须达到的最低年龄才能被考虑; 任何早于该时间(根据上次修改日期)的对象都将被忽略
Maximum Object AgeS3 对象可以被考虑的最大年龄; 任何早于该时间(根据上次修改日期)的对象都将被忽略
Listing Batch Size100如果不使用记录写入器,此属性决定单个批次中应列出多少 S3 对象。一旦达到此数量,已创建的 FlowFile 将被传出处理器。将此值设置得更低可能会通过在完成完整列表之前发送 FlowFile 来降低延迟。但是,它可能会显著降低性能。较大的值可能在发送 FlowFile 之前需要更多内存来存储所有信息。如果使用记录写入器,则忽略此属性,因为记录写入器的主要优点之一是能够将整个列表作为单个 FlowFile 发出。
Write Object Tagsfalse
  • true
  • false
如果设置为“True”,与 S3 对象关联的标签将被写入 FlowFile 属性
Write User Metadatafalse
  • true
  • false
如果设置为“True”,与 S3 对象关联的用户定义的元数据将添加到 FlowFile 属性/记录中
Communications Timeout30 secs
SSL Context Service控制器服务 API:
SSLContextProvider
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定可选的 SSL 上下文服务,如果提供,将用于创建连接
Endpoint Override URL用于替代 AWS 默认端点的端点 URL,包括协议、主机、端口和路径。AWS 库根据 AWS 区域选择端点 URL,但此属性会覆盖所选端点 URL,允许与其他 S3 兼容端点一起使用。
支持表达式语言:是(仅使用环境/系统变量求值)
Proxy Configuration Service控制器服务 API:
ProxyConfigurationService
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定代理配置 Controller Service 来代理网络请求。
Delimiter用于分隔存储桶内目录的字符串。请参阅 AWS 文档以了解此字段的正确用法。
Prefix用于过滤对象列表的前缀。 不要以正斜杠“/”开头。 在大多数情况下,它应该以正斜杠“/”结尾。
支持表达式语言:是(仅使用环境/系统变量求值)
Use Versionsfalse
  • true
  • false
指定是否使用 S3 版本(如适用)。如果为 false,则仅返回每个对象的最新版本。
List Type1
  • 列取对象 V1
  • 列取对象 V2
指定是使用原始列表对象还是较新的列表对象版本 2 端点。
Requester Paysfalse
  • true — 表示请求者同意支付与列出 S3 存储桶相关的任何费用。
  • false — 不同意向请求者支付列出 S3 存储桶的费用。
如果为 true,表示请求者同意支付与列出 S3 存储桶相关的任何费用。这将把 'x-amz-request-payer' 头设置为 'requester'。请注意,当「使用版本」为 'true' 时,此设置不适用。

关系 (Relationships)

名称描述自动终止
successFlowFiles被路由到成功关系否

写入的 FlowFile 属性

名称描述
s3.bucketS3 存储桶的名称
s3.regionS3存储桶的区域
filename文件名
s3.etag可用于查看文件是否发生更改的 ETag
s3.isLatest一个布尔值,指示这是否是该对象的最新版本
s3.lastModified自 UTC 时间纪元以来的最后修改时间(以毫秒为单位)
s3.length对象的大小(以字节为单位)
s3.storeClass对象的存储类别
s3.version对象的版本(如果适用)
s3.tag.___如果'写入对象标签'设置为'True',与正在列出的 S3 对象关联的标签将作为 FlowFile 属性的一部分写入
s3.user.metadata.___如果'写入用户元数据'设置为'True',与正在列出的 S3 对象关联的用户定义元数据将

状态管理

作用域描述
CLUSTER执行键列表后,存储最新键的时间戳以及共享相同时间戳的键。这允许处理器在下次运行时仅列出在此日期之后添加或修改的键。状态跨集群存储,以便此处理器可以仅在主节点上运行,如果选择了新的主节点,新节点可以从上一个节点停止的地方继续,而不会重复数据。

受限 (Restricted)

该组件不受限。

输入要求

该组件不允许有传入连接。

详细说明

ListS3

流式处理与批处理

ListS3 会对所配置 S3 桶中遇到的所有 S3 对象执行列表(listing)操作。 常见的用例大致分为两类。

流式用例

默认情况下,该 Processor 会为桶中的每个对象创建一个独立的 FlowFile,并添加 filename、bucket 等 Attribute。一个常见用法是把 ListS3 连接到 FetchS3 Processor。这两个 Processor 配合使用,可以 方便地监视桶,并在任何新对象到达 S3 时以高效的流式方式获取其内容。

批处理用例

另一个常见用例是:希望处理给定桶中所有新到达的对象,并且只有当所有 对象都处理完成之后才执行某些操作。上述流式数据的处理方式使这一点 变得困难,因为 Lynxus 本质上是一个流式平台,不存在有明确起点和终点 的"作业",数据只是在可用时被拾取。

为解决这个问题,ListS3 Processor 可以可选地配置 Record Writer。 配置后,只会创建单个 FlowFile,其中为桶中的每个对象包含一条记录, 而不是每个对象一个 FlowFile。关于如何构建"先处理完所有对象再进入 下一步"的数据流,可参考 ListFile 的文档示例。

不过,ListFile 与 ListS3 产生的数据有一个重要区别:两者输出的记录 结构不同。ListS3 输出的记录遵循以下 schema(Avro 格式):

{
  "type": "record",
  "name": "lynxusRecord",
  "namespace": "cn.org.acal.lynxus",
  "fields": [
    {
      "name": "key",
      "type": "string"
    },
    {
      "name": "bucket",
      "type": "string"
    },
    {
      "name": "owner",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "etag",
      "type": "string"
    },
    {
      "name": "lastModified",
      "type": {
        "type": "long",
        "logicalType": "timestamp-millis"
      }
    },
    {
      "name": "size",
      "type": "long"
    },
    {
      "name": "storageClass",
      "type": "string"
    },
    {
      "name": "latest",
      "type": "boolean"
    },
    {
      "name": "versionId",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "tags",
      "type": [
        "null",
        {
          "type": "map",
          "values": "string"
        }
      ]
    },
    {
      "name": "userMetadata",
      "type": [
        "null",
        {
          "type": "map",
          "values": "string"
        }
      ]
    }
  ]
}