数据漂移,即数据结构和语义不断的计划外改变,是数据工程师长期面临的问题。模式更改可能会破坏集成,在最坏的情况下,会无声地在系统中传播坏数据,并导致基于错误分析做出决策。
在过去,数据工程师必须手动对漂移做出反应——在输入的模式中寻找变化,手动修改Hive表,并重新提交修改过的数据接入作业。StreamSets数据收集器漂移同步特性通过近乎实时地自动创建和修改表来解决模式漂移问题,使数据立即准备好供终端用户使用。本教程将带领您为一个简单的用例设置漂移同步。
场景是这样的:我们想要从关系数据库中的一个表中获取发货记录到Hadoop环境中,在那里可以用Apache Hive或Apache Impala查询它们。我们将创建源表,填充一些初始数据,使用漂移同步创建一个管道,然后看到数据流入自动创建的Hive表。然后,我们将通过向表中添加一些列来注入一些数据漂移,以支持新的业务需求,并查看此更改如何在系统中传播,从而在Hadoop端更新表结构。
本教程使用Avro数据格式写入数据。
先决条件
漂移同步是一个高级特性,因此本教程跳过了安装StreamSets Data Collector (SDC)、配置JDBC驱动程序等基础知识。如果您是SDC新手,您应该先学习基本教程。
你将需要访问Hive-可以使用任何一个Cloudera, MapR或Hortonworks发行版,或者一个普通的Apache发行版。
SDC需要写入Hive和HDFS,所以应该配置一个代理用户来允许SDC用户模拟一个具有适当访问权限的用户。
还需要一个关系数据库,并且必须配置SDC来使用数据库的JDBC驱动程序。本教程使用MySQL作为源数据库;您应该能够使用任何通过JDBC驱动程序访问的数据库。
Streamsets漂移同步简介
漂移同步包括三个SDC阶段:Hive Metadata processor,Hive Metastore destination,以及Hadoop FS destinations
Hive Metadata processor和Hive Metastore destination协同工作,以协调传入的记录结构和Hive中对应的表模式之间的任何差异。如果表还不存在,则创建该表。如果传入的记录中有字段在Hive表中不存在,那么Hive模式就会更新,以匹配新的记录结构。
为什么要分三个阶段而不是一个阶段?灵活性和可伸缩性。如您所见,我们可以通过交换数据目的地将数据写入Hadoop FS或者MapR FS。此外,数据量的增长速度往往比元数据快得多,因此我们可以将数据路径扩展到许多独立于元数据流的管道。我们甚至可以将多个元数据路径引入到单个Hive Metastore目的地,以控制SDC对Hive Metastore的加载量。