本机环境
在集成之前首先你的服务器必须具有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在提交任务时可能需要比较的资源