flinksql kafka写数据进hudi,数据写不进hudi

flinksql kafka写数据进hudi,数据写不进hudi。以下是测试的代码

CREATE TABLE IF NOT EXISTS dwd_dm_day_kafka (

`day_id` int,

`month_id` int,

`qn_id` int,

`year_id` int,

`phycial_delete` int

) WITH (

'connector' = 'kafka',

'topic' = 'dwd_dm_day_hudi_01',

'properties.bootstrap.servers' = 'master1.betacdh.com:9092,work1.betacdh.com:9092,work2.betacdh.com:9092',

'scan.startup.mode' = 'earliest-offset',

'format' = 'json'

);

CREATE TABLE dwd_dm_day_hudi(

`day_id` int,

`month_id` int,

`qn_id` int,

`year_id` int,

`phycial_delete` int,

PRIMARY KEY (`day_id`) NOT ENFORCED

) COMMENT '订单表'

WITH (

'connector' = 'hudi'

, 'path' = 'hdfs://work1.betacdh.com:8020/test_sdc/dwd_dm_day_hudi'

, 'table.type' = 'MERGE_ON_READ'

, 'write.option' = 'insert'

, 'hive_sync.enable' = 'true'

, 'hive_sync.mode' = 'hms'

, 'hive_sync.metastore.uris' = 'thrift://work1.betacdh.com:9083'

, 'hive_sync.table' = 'dwd_dm_day_hudi'

, 'hive_sync.db' = 'test_sdc'

,'write.tasks' = '1'

,'compaction.tasks' = '1'

,'compaction.async.enable' = 'true'

,'compaction.trigger.strategy' = 'num_commits'

,'compaction.delta_commits' = '1'

);

insert into dwd_dm_day_hudi select day_id,month_id,qn_id,year_id,phycial_delete from dwd_dm_day_kafka;

以上情况数据并不能写进hudi。

但是用insert into可以

CREATE TABLE dwd_dm_day_hudi(

`day_id` int,

`month_id` int,

`qn_id` int,

`year_id` int,

`phycial_delete` int,

PRIMARY KEY (`day_id`) NOT ENFORCED

) COMMENT '订单表'

WITH (

'connector' = 'hudi'

, 'path' = 'hdfs://work1.betacdh.com:8020/test_sdc/dwd_dm_day_hudi'

, 'table.type' = 'MERGE_ON_READ'

, 'write.option' = 'insert'

, 'hive_sync.enable' = 'true'

, 'hive_sync.mode' = 'hms'

, 'hive_sync.metastore.uris' = 'thrift://work1.betacdh.com:9083'

, 'hive_sync.table' = 'dwd_dm_day_hudi'

, 'hive_sync.db' = 'test_sdc'

,'write.tasks' = '1'

,'compaction.tasks' = '1'

,'compaction.async.enable' = 'true'

,'compaction.trigger.strategy' = 'num_commits'

,'compaction.delta_commits' = '1'

);

insert into dwd_dm_day_hudi values(3333,3333,3333,3333,3333);

直接将值insert into 是可以将数据写入hudi。

这个问题困扰了我一天了。今早无意中发现开启checkpoint后数据成功写入hudi。代码示例如下:

set execution.checkpointing.interval=20000;

-- 保存checkpoint文件的目录

set state.checkpoints.dir=hdfs:///flink/flink-checkpoints;

-- 任务取消后保留checkpoint,默认值NO_EXTERNALIZED_CHECKPOINTS,

-- 可选值NO_EXTERNALIZED_CHECKPOINTS、DELETE_ON_CANCELLATION、RETAIN_ON_CANCELLATION

set execution.checkpointing.externalized-checkpoint-retention=RETAIN_ON_CANCELLATION;

-- checkpoint模式,默认值EXACTLY_ONCE,可选值:EXACTLY_ONCE、AT_LEAST_ONCE

-- 要想支持EXACTLY_ONCE,需要sink端支持事务

set execution.checkpointing.mode=EXACTLY_ONCE;

-- checkpoint超时时间,默认10分钟

set execution.checkpointing.timeout=600000;

-- checkpoint文件保留数,默认1

set state.checkpoints.num-retained=3;

CREATE TABLE IF NOT EXISTS dwd_dm_day_kafka (

`day_id` int,

`month_id` int,

`qn_id` int,

`year_id` int,

`phycial_delete` int

) WITH (

'connector' = 'kafka',

'topic' = 'dwd_dm_day_hudi_01',

'properties.bootstrap.servers' = 'master1.betacdh.com:9092,work1.betacdh.com:9092,work2.betacdh.com:9092',

'scan.startup.mode' = 'earliest-offset',

'format' = 'json'

);

CREATE TABLE dwd_dm_day_hudi(

`day_id` int,

`month_id` int,

`qn_id` int,

`year_id` int,

`phycial_delete` int,

PRIMARY KEY (`day_id`) NOT ENFORCED

) COMMENT '订单表'

WITH (

'connector' = 'hudi'

, 'path' = 'hdfs://work1.betacdh.com:8020/test_sdc/dwd_dm_day_hudi'

, 'table.type' = 'MERGE_ON_READ'

, 'write.option' = 'insert'

, 'hive_sync.enable' = 'true'

, 'hive_sync.mode' = 'hms'

, 'hive_sync.metastore.uris' = 'thrift://work1.betacdh.com:9083'

, 'hive_sync.table' = 'dwd_dm_day_hudi'

, 'hive_sync.db' = 'test_sdc'

,'write.tasks' = '1'

,'compaction.tasks' = '1'

,'compaction.async.enable' = 'true'

,'compaction.trigger.strategy' = 'num_commits'

,'compaction.delta_commits' = '1'

);

insert into dwd_dm_day_hudi select day_id,month_id,qn_id,year_id,phycial_delete from dwd_dm_day_kafka;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着互联网的发展,数据的不断膨胀,从刚开始的关系型数据库到非关系型数据库,再到大数据技术,技术的不断演最终是随着数据膨胀而不断改变,最初的数据仓库能解决我们的问题,但是随着时代发展,企业已经不满足于数据仓库,希望有更强大的技术来支撑数据的存储,包括结构化,非结构化的数据等,希望能够积累企业的数据,从中挖掘出更大的价值。基于这个背景,数据湖的技术应运而生。本课程基于真实的企业数据湖案例行讲解,结合业务实现数据湖平台,让大家在实践中理解和掌握数据湖技术,未来数据湖的需求也会不断加大,希望同学们抓住这个机遇。项目中将以热门的互联网电商业务场景为案例讲解,具体分析指标包含:流量分析,订单分析,用户行为分析,营销分析,广告分析等,能承载海量数据的实时分析,数据分析涵盖全端(PC、移动、小程序)应用。Apache Hudi代表Hadoop Upserts anD Incrementals,管理大型分析数据集在HDFS上的存储。Hudi的主要目的是高效减少摄取过程中的数据延迟。Hudi的出现解决了现有hadoop体系的几个问题:1、HDFS的可伸缩性限制 2、需要在Hadoop中更快地呈现数据 3、没有直接支持对现有数据的更新和删除 4、快速的ETL和建模 5、要检索所有更新的记录,无论这些更新是添加到最近日期分区的新记录还是对旧数据的更新,Hudi都允许用户使用最后一个检查点时间戳,此过程不用执行扫描整个源表的查询。 本课程包含的技术: 开发工具为:IDEA、WebStorm Flink1.9.0、HudiClickHouseHadoop2.7.5 Hbase2.2.6Kafka2.1.0 Hive2.2.0HDFS、MapReduceSpark、ZookeeperBinlog、Canal、MySQLSpringBoot2.0.2.RELEASE SpringCloud Finchley.RELEASEVue.js、Nodejs、HighchartsLinux Shell编程课程亮点: 1.与企业接轨、真实工业界产品 2.ClickHouse高性能列式存储数据库 3.大数据热门技术Flink4.Flink join 实战 5.Hudi数据湖技术6.集成指标明细查询 7.主流微服务后端系统 8.数据库实时同步解决方案 9.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS 10.集成SpringCloud实现统一整合方案 11.互联网大数据企业热门技术栈 12.支持海量数据的实时分析 13.支持全端实时数据分析 14.全程代码实操,提供全部代码和资料 15.提供答疑和提供企业技术方案咨询企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将行法律维权。  
Hudi(Hadoop Upsert Delete and Incremental)是一个构建在Hadoop上的开源数据湖架构,它提供了类似于数据库的upsert、delete、incremental等操作,同时支持流处理和批处理。Hudi与Flink的集成可以实现数据湖的实时计算和增量处理。 在Hudi和Flink的集成案例中,我们可以使用Flink作为流处理引擎,实现实时数据的读取和入。具体步骤如下: 首先,我们需要将输入数据源和输出数据源与Flink行集成。Flink可以读取来自不同数据源的数据,例如Kafka、Hive、HBase等。在我们的案例中,我们需要将Hudi作为输出数据源,因此需要实现一个自定义的Flink Sink函数,用于将Flink的输出数据Hudi。 其次,我们需要在Flink中编业务逻辑,用于对输入数据行实时计算和增量处理。Flink提供了丰富的API和算子,可以方便地数据转换、聚合、过滤等操作。在我们的案例中,我们可以使用Flink的Map和Filter算子,对输入数据行转换和筛选,然后将结果数据Hudi。 最后,我们需要在Flink中配置和管理Hudi的相关参数。Hudi需要使用一些配置信息,例如数据存储路径、数据表的主键、分区字段等。我们可以通过Flink的配置文件或命令行参数,将这些配置信息传递给Hudi。 通过以上步骤,我们可以实现Hudi和Flink的集成。当输入数据入Flink时,Flink可以对数据行实时计算和增量处理,并将结果数据Hudi。这样就可以实现对数据湖中的数据行实时查询和分析。 通过Hudi和Flink的集成,我们可以充分发挥两者的优势,实现高效、实时的数据处理和分析。使用Hudi可以保证数据湖的数据一致性和可更新性,而使用Flink可以实现实时计算和增量处理。这样的集成方案可以在企业中广泛应用,为数据团队提供更好的数据湖架构解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值