DeduplicateRecord

文档中心 › 组件索引 › DeduplicateRecord

DeduplicateRecord Processor

类型全限定名:cn.org.acal.lynxus.processors.standard.DeduplicateRecord

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

描述

该处理器对记录集中的各个记录进行重复数据删除。 它可以使用内存中的哈希集或布隆过滤器在每个文件的基础上进行操作。 当配置分布式地图缓存时,它可以消除多个文件中的重复记录。

标签

textrecordupdatechangereplacemodifydistinctuniquefilterhashdupeduplicatededupe

属性

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

名称默认值可选值描述
去重策略single
  • 单文件
  • 多文件
用于检测和路由重复记录的策略。在单个 FlowFile 内检测重复的选项在内存中运行,而跨多个 FlowFile 的检测则使用分布式映射缓存。
Distributed Map Cache Client控制器服务 API:
DistributedMapCacheClient
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
当去重策略设置为'多文件'时,此属性是必需的。映射缓存将对每条记录原子性地检查缓存键是否存在,如果不存在则设置它。
缓存标识符可选的表达式语言字段,用于覆盖记录的计算缓存键。此字段有一个额外的可用属性:${record.hash.value},其中包含从动态属性(如果设置)或记录字段派生的缓存键。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Cache Entry Identifierfalse
  • true
  • false
对于每条记录,检查缓存标识符是否存在于分布式映射缓存中。如果不存在且此属性为 true,则将标识符放入缓存。
Record Reader控制器服务 API:
RecordReaderFactory
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定用于读取传入数据的 Controller Service
Record Writer控制器服务 API:
RecordSetWriterFactory
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定用于写出记录的 Controller Service
Include Zero Record FlowFilestrue
  • true
  • false
如果发送到重复或非重复关系的 FlowFile 不包含任何记录,将此属性设置为 `false` 会导致该 FlowFile 被丢弃。否则,空的 FlowFile 将被输出。
Record Hashing AlgorithmSHA-256
  • 无 — 不使用哈希算法。已解析的 RecordPath 的值将与分隔符 (~) 组合以形成唯一的缓存键。根据数据的大小和形状,这可能会使用显著更多的存储空间。
  • SHA-256 — SHA-256 密码学哈希算法。
  • SHA-512 — SHA-512 密码学哈希算法。
用于散列缓存键的算法。
过滤器类型hash-set
  • HashSet — 以 100% 的准确度精确匹配之前见过的记录,但需要更多存储空间。将过滤数据存储在分布式缓存的单个缓存条目中,并在重复检测期间完全加载到内存中。此过滤器适用于小到中型数据集,并提供高性能,在此处理器运行时加载到内存中。
  • BloomFilter — 适合大型数据集的空间高效数据结构,使用概率来判断记录是否之前被见过。可能出现假阳性匹配,但不会出现假阴性——换句话说,查询返回“可能在集合中”或“肯定不在集合中”。如果 FlowFile 内容较大且可以容忍一些重复数据,则应使用此选项。无论记录集大小如何,都使用恒定存储空间。
用于根据匹配的 RecordPath 条件确定记录是否已被见过的过滤器。如果选择哈希集,将使用 Java HashSet 对象对所有遇到的记录进行去重。如果选择布隆过滤器选项,将使用布隆过滤器。布隆过滤器选项内存占用较少,但有可能出现假阳性。
Filter Capacity Hint25000要处理的唯一记录总数的估计值。此数字越准确,BloomFilter 的假阴性就越少。
布隆过滤器确定性0.10使用布隆过滤器类型时所需的假阳性概率。例如,使用 0.05 的值可保证有 5% 的概率结果为假阳性。此值越接近 1,结果越精确,但会占用更多存储空间。

动态属性

动态属性允许用户自定义属性的名称与值。

名称值描述
属性的名称。指向记录字段的有效 RecordPath,该字段将包含在用于去重的缓存键中。记录的缓存键通过组合每个动态属性的名称与其评估的记录值(由相应的 RecordPath 指定)生成。

关系 (Relationships)

名称描述自动终止
duplicate检测为重复的记录将路由到此关系。否
failure如果无法与缓存通信,FlowFile将受到惩罚并路由到此关系否
non-duplicate在缓存中找不到的记录将路由到此关系。否
original除非发生致命错误,否则原始输入 FlowFile 将发送到此关系。否

写入的 FlowFile 属性

名称描述
record.count写入目标 FlowFile 的记录数。

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

输入要求

该组件要求有传入连接。

系统资源考量

资源描述
MEMORYHashSet 过滤器类型的内存空间与处理的唯一记录数成正比。BloomFilter 类型无论处理多少记录都使用固定内存。
CPU如果选择了更高级的哈希算法,对任何特定记录进行哈希处理所需的时间可能会大幅增加。

详细说明

DeduplicateRecord

概述

此 Processor 既可以在单个记录集文件内去重,也可以跨多个文件去重,甚至可以利用 DistributedMapCacheClient Controller Service 在整个数据湖范围内去重。对于前者,它使用 HashSet 或布隆过滤器(bloom filter)在内存中进行极快且高精度的计算。对于后一种用例,它使用 该 Controller Service,将生成的哈希值与存储在 ACAL Lynxus 所支持的某种缓存中的 Map 缓存进行比对。

配置单文件去重

在名为 "Deduplication Strategy" 的配置属性下选择 "single file" 选项,然后选择使用布隆过滤器 还是 hash set。请注意设置与你所处理记录集的平均大小相匹配的大小上限。

配置多文件去重

在 "Deduplication Strategy" 下选择 "Multiple Files" 选项,然后配置一个 DistributedMapCacheClient 服务。缓存标识符(cache identifier)有以下几种配置方式:

  1. 不指定任何动态属性,对整条记录生成哈希。
  2. 通过动态属性指定参与计算的特定字段来生成哈希。
  3. 在 cache identifier 属性中手动指定单个 Record Path 语句。注意:
    • 这种方式可以与 #1 和 #2 组合使用,因为它支持表达式语言,并且会把 #1 或 #2 计算出的哈希 以 EL 变量 record.hash.value 的形式暴露出来。示例: concat('${some.var}', -, '${record.hash.value}')

动态属性的作用

动态属性的属性名应当可读,取值应当是一个 Record Path 操作。这些 Record Path 操作用于从记录中 提取值,以组装出唯一标识符。示例如下:

  • firstName => /FirstName
  • lastName => /LastName

记录:

{
  "firstName": "John",
  "lastName": "Smith"
}

会先生成一个包含 "John" 和 "Smith" 的标识符,然后再基于最终值生成哈希。

如果任何一个 Record Path 缺失,会抛出异常,该 FlowFile 会被发送到 failure Relationship。