通过Flink-Sql将Kafka数据写入HDFS

本文介绍了如何通过Flink SQL创建Hive Catalog,建立Kafka和Hive表,并执行同步语句,将Kafka数据稳定地写入到Hive中。关键在于开启checkpoint以确保文件状态从inprogress转为正式。
摘要由CSDN通过智能技术生成

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

近期,公司有需求将Kafka的数据写入到Hive表中,当时看到Flink有一个File Connector可以将文件写入到HDFS,所以开始了解Flink-Sql写入到HDFS的使用。


一、创建Hive Catalog

将Flink-Sql的元数据通过hive catalog保存起来。这样通过Flink Sql创建的表都会保存到Hive中。

CREATE CATALOG myhive_default WITH (
    'type' = 'hive',
    'default-database' = 'default',
    'hive-conf-dir' = '/etc/hive/conf'
);
use catalog myhive_default;

二、创建表

1.创建Kafka表


                
Flink SQL是Apache Flink的一种查询语言,用于在Flink中进行实时数据处理和分析。要实现将Kafka中的数据落盘到HDFS,可以使用Flink SQL的相关功能。 首先,我们需要在Flink的配置文件中设置KafkaHDFS的连接信息。在Flink的conf/flink-conf.yaml文件中,配置以下属性: ``` state.backend: filesystem state.checkpoints.dir: hdfs://<HDFS_HOST>:<HDFS_PORT>/checkpoints state.savepoints.dir: hdfs://<HDFS_HOST>:<HDFS_PORT>/savepoints ``` 其中,<HDFS_HOST>是HDFS的主机地址,<HDFS_PORT>是HDFS的端口号。这样配置后,Flink将会将检查点和保存点存储到HDFS中。 接下来,在Flink SQL中创建一个表来读取Kafka中的数据,并将数据写入HDFS中。可以使用以下SQL语句实现: ```sql CREATE TABLE kafka_source ( key STRING, value STRING ) WITH ( 'connector' = 'kafka', 'topic' = '<KAFKA_TOPIC>', 'properties.bootstrap.servers' = '<KAFKA_BOOTSTRAP_SERVERS>', 'properties.group.id' = '<KAFKA_GROUP_ID>', 'format' = 'json' ); CREATE TABLE hdfs_sink ( key STRING, value STRING ) WITH ( 'connector' = 'filesystem', 'path' = 'hdfs://<HDFS_HOST>:<HDFS_PORT>/output', 'format' = 'csv', 'csv.field-delimiter' = ',' ); INSERT INTO hdfs_sink SELECT key, value FROM kafka_source; ``` 这里,'<KAFKA_TOPIC>'是Kafka中的主题名称,'<KAFKA_BOOTSTRAP_SERVERS>'是Kafka的启动服务器地址,'<KAFKA_GROUP_ID>'是Kafka消费者组的ID。'json'和'csv'是数据的格式,可以根据实际情况进行调整。 以上SQL语句创建了一个名为kafka_source的输入表,将Kafka中的数据源与之关联。同时,创建了一个名为hdfs_sink的输出表,将数据写入HDFS中。最后,通过INSERT INTO语句,将kafka_source中的数据写入hdfs_sink中。 通过以上的配置和操作,Flink SQL就可以实现将Kafka中的数据落盘到HDFS
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值