前言:
近几年, KUDU 在大数据平台的应用越来越广泛,在 阿里、小米、网易 等公司的大数据架构中,KUDU 都有着不可替代的地位。作者在2016年开始了解KUDU,2017年正式在生产环境中使用,即使现如今ClickHouse、Doris、Hudi等优秀开源产品的出现,在技术架构选型的时候,实时数仓的部分场景我个人还是青睐使用:Kudu + Impala + Parquet 。
比较遗憾的是,到现在为止 Flink发布版本中还没有支持SQL读写Kudu,还好有第三方bahir可以编译 Flink Kudu Connector
后面提供已经编译好的包,恰好是相同版本的可以直接用了。
Bahir官站:
https://bahir.apache.org/docs/flink/current/flink-streaming-kudu/
一,环境准备
建议在Liunx环境下编译,有依赖包没找到windos版本:kudu-binary-1.10.0-linux-x86_64.jar
1.1 编译需要
git
jdk 1.8 (jdk自行安装)
maven 3
1.1.1 安装git
yum install git
1.1.2 Liunx安装Maven
1. Maven官网下载
2. 解压
tar -zxvf apache-maven-3.8.6-bin.tar.gz
3. 配置maven仓库,设置阿里镜像仓库
cd apache-maven-3.8.6
vim conf/settings.xml
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
设置仓库地址:/opt/mav
4. 配置环境变量
vim /etc/profile
export MAVEN_HOME=/root/apache-maven-3.8.6
export PATH=$MAVEN_HOME/bin:$PATH
5. 加载验证
source /etc/profile
mvn -version
1.2 软件版本 (官方目前支持到Flink 1.14.2)
具体根据自己版本修改后面代码pom
CDH 6.3.2
KUDU 1.10.0-cdh6.3.2
Flink 1.13.2
二,代码准备
1. 下载源码
2. 修改pom.xml
1 . cd bahir-flink-master
2 . 修改父pom
vim pom.xml
修改成自己的flink版本,scala版本注意修改,module只留flink-connector-kudu即可
<!-- Flink version -->
<flink.version>1.13.2</flink.version>
<scala.binary.version>2.11</scala.binary.version>
<scala.version>2.11.8</scala.version>
cdh的kudu 包下载不下来可以在父pom加一个CDH镜像
进入父Pom,在repositories添加CDH镜像
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
3. 修改flink-connector-kudu 子模块的 pom
添加guava依赖:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-shaded-guava</artifactId>
<version>30.1.1-jre-14.0</version>
</dependency>
修改kudu 版本:
<properties>
<kudu.version>1.10.0-cdh6.3.2</kudu.version>
</properties>
修改 kudu-binary 版本:
<dependency>
<groupId>org.apache.kudu</groupId>
<artifactId>kudu-binary</artifactId>
<version>1.10.0</version>
<classifier>${os.detected.classifier}</classifier>
<scope>test</scope>
</dependency>
三,执行编译
因为网络原因,中途可能下包会失败,重新执行几次
进入主目录:
/root/bahir-flink-master
执行编译:
mvn clean install -T 10 -DskipTests -Drat.skip=true
四,集群测试
1.将编译好的包放到 $FLINK_HOME/lib (每台机器)需要重启集群
cp flink-connector-kudu_2.11-1.2-SNAPSHOT.jar $FLINK_HOME/lib
2.如遇如下报错,将flink-shaded-guava-30.1.1-jre-14.0.jar包放入到 $FLINK_HOME/lib下
java.lang.ClassNotFoundException: org.apache.flink.shaded.guava30.com.google.common.collect.Lists
免费下载链接:Flinksql依赖kudu包-flink文档类资源-CSDN下载
[INFO] Submitting SQL update statement to the cluster...
[ERROR] Could not execute SQL statement. Reason:
java.lang.ClassNotFoundException: org.apache.flink.shaded.guava30.com.google.common.collect.Lists
3. 如遇到 java.lang.ClassNotFoundException:org.apache.kudu.client.CreateTableOptions
将kudu clinet 相关包拷贝到 $FLINK_HOME/lib下
cp /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/kudu/kudu-client* $FLINK_HOME/lib/
[ERROR] Could not execute SQL statement. Reason:
java.lang.ClassNotFoundException: org.apache.kudu.client.CreateTableOptions
4. 如果遇到如下链接拒绝异常,看我上篇文章:CSDN
[INFO] Submitting SQL update statement to the cluster...
[ERROR] Could not execute SQL statement. Reason:
java.net.ConnectException: 拒绝连接
5,问题解决好后,启动sql-client
Flink SQL> CREATE TABLE kudu_test (
> id string
> ,name string
> ) WITH (
> 'connector.type' = 'kudu',
> 'kudu.masters' = 'datacenter4:7051',
> 'kudu.table' = 'impala::oms.ods_test',
> 'kudu.hash-columns' = 'id',
> 'kudu.primary-key-columns' = 'id'
> );
[INFO] Execute statement succeed.
执行插入
Flink SQL> insert into kudu_test select
> '1' as id ,
> 'a' as name ;
[INFO] Submitting SQL update statement to the cluster...
[INFO] SQL update statement has been successfully submitted to the cluster:
Job ID: 23fd7ae0c26ba43d87308f0599c6db6b
查看数据:数据1,a插入成功