mysql同步数据到hive---binlog方式

不写入到hive表的原因在于,binlog的数据结构是不固定的,而hive的结构相对是比较固定的。如果要写入到hive的话,就需要将不同的表的binlog写入到不同的hive表中,这个维护成本太高了。而且spark其实可以直接读取hdfs的json文件,因此直接放hdfs就好了。写入到hdfs的话,考虑到后续读这个数据是要按照表去...
mysql同步数据到hive---binlog方式
mysql同步数据到hive大部分公司目前都是走的jdbc的方式。

这种方式有两个好处:

也有不好的地方:

这一步最主要的细节是将mysql库的所有binlog数据全部打入一个kafka topic,格式使用json。格式如下:

这一步的主要的细节在于写入到hdfs的结构,以及为什么不直接写入hive。
不写入到hive表的原因在于,binlog的数据结构是不固定的,而hive的结构相对是比较固定的。如果要写入到hive的话,就需要将不同的表的binlog写入到不同的hive表中,这个维护成本太高了。而且spark其实可以直接读取hdfs的json文件,因此直接放hdfs就好了。

写入到hdfs的话,考虑到后续读这个数据是要按照表去读增量数据,所以写入的目录一定是要带日期和表名称的。我这边用的目录结构是这样的:

也就是说要在flink根据数据所属的db、table_name、和日期将数据写入到不同的目录里。

在这一步的处理的过程中遇到了一些比较重要的参数问题。

2.如上所述checkpoint的时间间隔。不仅仅会影响checkpoint的频率,而且会影响hdfs文件的大小,而hdfs文件的大小可能会对hdfs的性能有很大影响。这个值如果太大,就会造成数据延迟太高,如果太小就会造成小文件过多。我这边设置的是5分钟。
细心的看官,这个时候会问了,既然你的目录是分table的,那么每个table每5分钟的binlog数据量是不一样的。对于某些大的mysql表,我们可能每5分钟生成一个文件还能接受。对于一些比较小的表,每五分钟生成一个文件那么文件就会非常小。所以我这边又做了一层的筛选,我把mysql的大的表筛选出来,只同步大的表到hdfs,用以binlog的数据同步。因为本身binlog的方式同步mysql数据为的就是节约mysql的读取压力,而小的表对于不会有太大压力,这些表可以直接通过jdbc的方式去同步。

这个是整个环节里面最复杂的一部分,涉及的细节也比较多。
首先,我们要明确一下总体的思路是什么。总体的思路就是要读取hdfs上的老的历史数据,然后和新的binlog数据合并生成新的快照。

其实这中间还涉及到一些其他的细节,比如mysql表结构变更,或者mysql和hive的数据结构不一致的情况。
另外我们这边还存在多个db的相同的表导入到hive的一张表中的其他问题,我就不赘述了。2022-07-24
mengvlog 阅读 7 次 更新于 2025-07-19 23:52:31 我来答关注问题0
  •  翡希信息咨询 大数据NiFi(二十):实时同步MySQL数据到Hive

    实时同步MySQL数据到Hive的方案如下:核心组件: CaptureChangeMySQL:用于捕获MySQL数据库的变更数据。 RouteOnAttribute:根据属性路由数据到不同的处理路径。 EvaluateJsonPath:解析JSON数据并将其映射为FlowFile属性。 ReplaceText:替换文本内容,此处用于组成SQL语句。 PutHiveQL:执行HiveQL命令,将数据插入...

  •  文暄生活科普 大数据NiFi(二十):实时同步MySQL数据到Hive

    步骤6: 配置“ReplaceText”处理器,替换属性组成SQL语句。步骤7: 配置Hive支持HiveServer2,确保NiFi集群连接Hive。步骤8: 配置“PutHiveQL”处理器,执行HiveQL命令,插入数据到Hive表。测试与验证:在Hive中创建表“test2”,启动数据同步流程,向MySQL中写入数据,验证Hive表数据实时更新。关键点:配置...

  •  文暄生活科普 8、NIFI综合应用场景-NiFi监控MySQL binlog进行实时同步到hive

    PutHiveQL:执行HiveQL命令,插入数据到Hive表。操作与验证开启MySQL binlog,配置CaptureChangeMySQL处理器。设置RouteOnAttribute处理器的条件,确保数据处理效率。检查并确认Hive表中是否成功写入数据,注意配置事务表语句。通过以上步骤,实现了MySQL binlog的实时监控和数据同步到Hive,尽管在实际生产环境中可...

  •  折柳成萌 求助,sqoop从Mysql导入数据到Hive,为何有两行数据换行了

    sqoop导入mysql中表不需要手动创建。连接到hive的默认数据库后会自动创建的。Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中

  • 注:其他关系型数据库如:oracle 可以通过相同的思路,读取元数据,修改脚本语法实现。使用:在mysql元数据库:information_schema 中执行以下语句SELECT CONCAT('alter table ', TABLE_NAME, ' CHANGE COLUMN ', COLUMN_NAME, ' ', COLUMN_NAME, ' ', DATA_TYPE, ' comment ', '"', COLUMN_...

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部