0

我正在构建数据湖以集成多个数据源以进行高级分析。

一开始,我选择 HDFS 作为数据湖存储。但是我需要更新和删除数据源,我必须与数据湖同步。

为了理解 Data Lake 的不可变特性,我将考虑来自 Data source 的 LastModifiedDate 以检测此记录是否已更新,并将此记录与当前日期一起插入 Data Lake。这个想法是选择带有 max(date) 的记录。

但是,我无法理解如何

  1. 我将从源中检测已删除的记录,我将如何处理 Data Lake?
  2. 我应该使用 Cassandra 等其他数据存储并执行删除命令吗?恐怕它会失去不可变的属性。

你能建议我在这种情况下的好做法吗?

4

2 回答 2

0

1. 问题 - 从数据源中检测已删除的记录

从数据源中检测已删除的记录需要您的数据源支持这一点。最好的是删除只在逻辑上完成,例如使用更改标志。对于某些数据库,也可以跟踪已删除的行(例如,参见SQL-Server)。此外,一些 ETL 解决方案(如 Informatica)提供 CDC(更改数据捕获)功能。

2. 问题 - 改变大数据解决方案中的数据处理

有不同的方法。当然,您可以使用键值存储为整体解决方案增加某种复杂性。首先,您必须澄清是否也有兴趣跟踪更改和删除。您可以考虑将所有数据(新的/更改的/删除的)加载到日常分区中,最后构建一个实际的图像(数据源中的数据)。还可以考虑解决此主题的 Databricks Delta 等解决方案,而无需额外的存储。例如,您可以使用 delta 对 parquet 文件执行 upsert,如下所示:

    MERGE INTO events
      USING updates
      ON events.eventId = updates.eventId
    WHEN MATCHED THEN
       UPDATE SET
       events.data = updates.data
    WHEN NOT MATCHED
       THEN INSERT (date, eventId, data) VALUES (date, eventId, data)

如果您的解决方案还需要通过键进行低延迟访问(例如支持 API),那么 HBase、Cassandra 等键值存储会很有帮助。

于 2018-05-10T07:35:28.753 回答
0

通常,在 Hadoop 中创建数据湖时,这始终是一个约束,不能只更新或删除其中的记录。您可以尝试一种方法是

  1. 在添加 lastModifiedDate 时,还可以再添加一个列命名状态。如果记录被删除,则将状态标记为已删除。所以下一次,当你想查询最新的活动记录时,你就可以把它过滤掉。

  2. 如果您每天执行 ACID 操作,您还可以使用 cassandra 或 Hbase(任何 nosql 数据库)。如果没有,第一种方法将是您在 Hadoop 中创建数据湖的理想选择

于 2018-04-11T13:07:41.180 回答