mysql读取(读表,离线)
env {
execution.parallelism = 1
}
# 在source所属的块中配置数据源
source {
Jdbc {
driver = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://aaa:3306/bbb?serverTimezone=GMT%2b8&characterEncoding=utf-8"
user = "root"
password = "123456"
query = "select * from ddd"
}
}
# 在transform的块中声明转换插件
transform {
}
# 在sink块中声明要输出到哪
sink {
Console {}
}
解读
env
env里面是一些基本设置,比如
execution.parallelism = 1是指并行条数为1
其他也没什么,比如设置等待时间,设置连接的url等等,一般只要上面一个就行
source
source 里面大部分是读取,你要读取哪一个,比如redis,比如mysql等等,可以一次读取多个插件
上方mysql为例
driver,url,user,password都知道什么意思,就不多说
query 就是写sql语句的
ps1.aaa是ip地址,但是我如果用我的ip地址,会导致连接超时,只有用127.0.0.1的时候才能正常运行。
ps2.正常写完,配置全队也可能运行不起来,需要自己去下数据库驱动程序,复制到
$SEATNUNNEL_HOME/plugins/jdbc/lib/
下面才能正常工作,比如复制mysql-connector-java-xxx.jar,复制到$SEATNUNNEL_HOME/plugins/jdbc/lib/mysql-connector-java-xxx.jar 就可以了
redis读取
env {
execution.parallelism = 1
}
# 在source所属的块中配置数据源
source {
Redis {
host = aaa
port = 6379
keys = "bbb"
data_type = key
format = json
schema {
fields {
tname = string
tage = int
}
}
}
}
# 在transform的块中声明转换插件
transform {
}
# 在sink块中声明要输出到哪
sink {
Console {}
}
解读
keys后的内容就是redis的key值,可以用 * 模糊搜索
当format=json时,就必须要有 schema。
fields里的内容要和redis内容相匹配,等号后是类型,并不是值
redis传值到mysql
env {
execution.parallelism = 1
}
# 在source所属的块中配置数据源
source {
Redis {
host = xxx
port = 6379
keys = "xxx"
data_type = key
format = json
schema {
fields {
tname = string
tage = int
}
}
}
}
# 在transform的块中声明转换插件
transform {
}
# 在sink块中声明要输出到哪
sink {
jdbc {
driver = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://127.0.0.1:3306/seatunnel?serverTimezone=GMT%2b8&characterEncoding=utf-8"
user = "root"
password = "123456"
query = "insert into day_test values(?,?)"
}
}
解读
大致并没有多少变化,主要就是sql语句由查询变为了插入
-------------------------------------------------------------------------------------------------------------------------------
Hive
1.部署Hive,请看Hive部署
2.使用Flink提交作业的方式
ps1.错误
java.lang.NoClassDefFoundError: org/apache/hadoop/hive/metastore/api/MetaException
百度了很久的解决办法是,Flink启动hive的时候是有依赖包的,并不是直接就能启动
Flink 集成 Hive 需要额外添加一些依赖 jar 包,并将其放在 Flink 安装目录下的 lib 文件夹下,这样才能通过 Table API 或 SQL Client 与 Hive 进行交互。
使用 Flink 提供的 Hive jar
根据使用的 Hive 版本,下载对应的 jar 即可
Hive版本号 | 需要的依赖jar包版本 | 下载地址 |
1.0.0 ~ 1.2.2 | flink-sql-connector-hive-1.2.2 | 下载 |
2.0.0 ~2.2.0 | flink-sql-connector-hive-2.2.0 | 下载 |
2.3.0 ~2.3.6 | flink-sql-connector-hive-2.3.6 | 下载 |
3.0.0 ~ 3.1.2 | flink-sql-connector-hive-3.1.2 | 下载 |
用户定义的依赖项
以Hive 3.1.2为例,除了 flink-sql-connector-hive-3.1.2.jar 是我们使用 Flink SQL Cli 时所需要的 jar 外,还需要添加以下 jar
依赖的jar | 下载地址 |
flink-connector-hive_2.12-1.12.0.jar | 下载 |
flink-shaded-hadoop-3-uber-3.1.1.7.1.1.0-565-9.0.jar | 下载 |
hive-exec-3.1.2.jar | Hive的lib目录下 |
libfb303-0.9.3.jar | Hive的lib目录下 |
开始连接 ,配置文件
ps2.按官方给的案例去写的,但是保存拒绝连接
后来发现案例里面没有用上schema去设置,于是修改成(Hive字段就设置了两个,mysql也是两个)
env {
execution.parallelism = 1
}
# 在source所属的块中配置数据源
source {
Hive {
table_name = "mydemo.hive_mysql"
metastore_uri = "thrift://127.0.0.1:9083"
schema {
fields {
hname = string
hage= int
}
}
}
}
# 在transform的块中声明转换插件
transform {
}
# 在sink块中声明要输出到哪
sink {
Console {}
}
然后互传的没什么改变,就是sink(输出位置)里放你要输出的,soucr(获取位置)里放你要从哪获取。
下一个kafka获取mysql CDC,等我完成了在更新