实现flink集成hudi,将数据写入到hdfs中,并解决一些问题

本机环境
在这里插入图片描述
在集成之前首先你的服务器必须具有jdk,hadoop,scala,flink,maven环境。
其中jdk1.8以上,hadoop最好用3.0以上,至于scala和flink的版本受限于hudi的版本,我这里使用的是0.9版本,对应flink-1.12.2,scala-2.11.12。

首先从hudi官网下载hudi源码,上传到服务器上,进行编译
在这里插入图片描述

mvn clean package -DskipTests
注意:默认是用scala-2.11编译的
如果我们用的是flink1.12.2-2.12版本,可以自己编译成scala-2.12版本的
mvn clean package -DskipTests -Dscala-2.12
包的路径在packaging/hudi-flink-bundle/target/hudi-flink-bundle_2.12-*.*.*-SNAPSHOT.jar

编译成功如下图
在这里插入图片描述
此时编译成功会生成一个hudi和flink集成的jar包,如下图
在这里插入图片描述
将此jar包复制到flink下的lib目录下,后面的2.11表示使用scala-2.11版本编译的,并且hudi的版本为0.9.0。hudi对于版本要求比较严格,要格外注意版本不要错了。
在这里插入图片描述

这里默认本机已经配置好hadoop集群和flink集群,不过我都是单机模式,都在一台服务器。
启动hadoop
进入hadoop目录下

./bin/start-all.sh

输入jps查看是否启动成功,如下图,5个全部成功启动
在这里插入图片描述

启动flink集群
进入flink目录下

# HADOOP_HOME is your hadoop root directory after unpack the binary package.
export HADOOP_CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath`

# Start the Flink standalone cluster
./bin/start-cluster.sh

在这里插入图片描述
启动 Flink SQL 客户端

# HADOOP_HOME is your hadoop root directory after unpack the binary package.
export HADOOP_CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath`

./bin/sql-client.sh embedded

在这里插入图片描述
启动成功

插入数据

set execution.result-mode=tableau;

CREATE TABLE t1(
  uuid VARCHAR(20),
  name VARCHAR(10),
  age INT,
  ts TIMESTAMP(3),
  `partition` VARCHAR(20)
)
PARTITIONED BY (`partition`)
WITH (
  'connector' = 'hudi',
  'path' = 'hdfs://localhost:9000/t1',
  'table.type' = 'MERGE_ON_READ' -- this creates a MERGE_ON_READ table, by default is COPY_ON_WRITE
);

-- insert data using values
INSERT INTO t1 VALUES
  ('id1','Danny',23,TIMESTAMP '1970-01-01 00:00:01','par1'),
  ('id2','Stephen',33,TIMESTAMP '1970-01-01 00:00:02','par1'),
  ('id3','Julian',53,TIMESTAMP '1970-01-01 00:00:03','par2'),
  ('id4','Fabian',31,TIMESTAMP '1970-01-01 00:00:04','par2'),
  ('id5','Sophia',18,TIMESTAMP '1970-01-01 00:00:05','par3'),
  ('id6','Emma',20,TIMESTAMP '1970-01-01 00:00:06','par3'),
  ('id7','Bob',44,TIMESTAMP '1970-01-01 00:00:07','par4'),
  ('id8','Han',56,TIMESTAMP '1970-01-01 00:00:08','par4');

注意下面标红的部分,这是我自己服务器hdfs,在配置hadoop集群时已经配置过,改成自己的就行,如果忘记了可以在hadoop安装路径etc/hadoop下的core-site.xml下查看你自己的配置,我就只因为这个配置错了,造成一直报错,卡了好几天,真坑。
在这里插入图片描述

插入数据
在这里插入图片描述
此时可以看到任务提交成功,访问flink的ui界面查看提交的任务信息
服务器ip+端口号,flink默认端口号为8081.
在这里插入图片描述
查询数据

-- query from the Hudi table
select * from t1;

在这里插入图片描述
在这里插入图片描述

至此flink成功实现了对于hudi的集成,成功的将hudi表写入到hdfs中,当然这只是刚开始,后面还有很多需要继续研究

在这里插入图片描述
值得注意的是,在启动集群之前最好修改以下flink的配置文件
在这里插入图片描述
把taskmanager.numberOfTaskSlots尽量设置大一些,flink在提交任务时可能需要比较的资源
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
随着互联网的发展,数据的不断膨胀,从刚开始的关系型数据库到非关系型数据库,再到大数据技术,技术的不断演进最终是随着数据膨胀而不断改变,最初的数据仓库能解决我们的问题,但是随着时代发展,企业已经不满足于数据仓库,希望有更强大的技术来支撑数据的存储,包括结构化,非结构化的数据等,希望能够积累企业的数据,从挖掘出更大的价值。基于这个背景,数据湖的技术应运而生。本课程基于真实的企业数据湖案例进行讲解,结合业务实现数据湖平台,让大家在实践理解和掌握数据湖技术,未来数据湖的需求也会不断加大,希望同学们抓住这个机遇。项目将以热门的互联网电商业务场景为案例讲解,具体分析指标包含:流量分析,订单分析,用户行为分析,营销分析,广告分析等,能承载海量数据的实时分析,数据分析涵盖全端(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.提供答疑和提供企业技术方案咨询企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。  
Flink 使用 Hudi 同时写入多个表,可以按照以下步骤进行: 1. 引入依赖:在 Flink 项目的 pom.xml 文件,添加 Hudi 相关的依赖,例如 hudi-flinkhudi-client 等。 2. 创建 Flink 流式作业:使用 Flink 的 DataStream API 创建流式作业,处理输入数据并准备写入 Hudi 表。 3. 配置 Hudi 写入:为每个需要写入Hudi 表创建一个 HudiTableConfig 对象,配置相应的表名、Schema、主键等信息。 4. 转换数据写入 Hudi 表:根据需要写入的多个表,使用 Flink 的 DataStream API 进行数据转换操作,并将数据写入对应的 Hudi。可以使用 `hudiWrite()` 函数将转换后的数据写入 Hudi 表。 ```java dataStream .map(new MyMapper()) // 自定义数据转换逻辑 .addSink(HoodieFlinkSink.create(hudiTableConfig1, ...)) // 将数据写入第一个 Hudi 表 .name("Hudi Sink 1"); dataStream .map(new MyMapper()) // 自定义数据转换逻辑 .addSink(HoodieFlinkSink.create(hudiTableConfig2, ...)) // 将数据写入第二个 Hudi 表 .name("Hudi Sink 2"); // 可以根据需要继续添加更多的 Hudi写入操作 ``` 5. 配置并执行 Flink 作业:为 Flink 作业配置必要的参数,例如并行度、检查点等,并执行作业。 ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(1); // 设置并行度 env.enableCheckpointing(5000); // 开启检查点 // 创建流式作业,处理数据写入 Hudi 表 env.execute("Flink Hudi Multiple Tables Job"); ``` 需要注意的是,在配置 Hudi 表时,要确保每个表都有唯一的表名和主键,且 Schema 结构与输入数据一致。另外,为了保证数据一致性和容错能力,在 Flink 作业开启检查点功能是一个好的实践。 以上是一个简单的示例,具体的实现还需要根据你的实际需求和数据处理逻辑进行调整。同时,还需要根据 HudiFlink 的版本进行适配和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值