Flink 1.12 (六)table API

一 :POM导入 这里搭建flink1.12.0-scala2-12版本的时候出现不少问题 这个也一直更新
1)首先是导入pom 文件后jar 包 引入问题识别不了 按照官网上的 步骤来做
解决: 重新导入pom文件 但是首先我这里是由导入的顺序的 如果 streaming pom文件如果 最后导入 会出现 发现不了 StreamExecutionEnvironment 这个类但是没有任务报错 jar包 也没有冲突将中央仓库全部删除 之后重新下载也解决不了 最后 将库清除之后把下面的引用放到第一个 后解决

<dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-scala_2.12</artifactId>
            <version>1.12.0</version>
        </dependency>
  1. 找不到 TableException 类 将 jar 引用的范围限制全部去掉 解决
<dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-scala_2.12</artifactId>
            <version>1.12.0</version>

        </dependency>
        <!--No ExecutorFactory found to execute the application. 因为高版本这个clients 集成移除了需要手动安装-->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_2.12</artifactId>
            <version>1.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-api-scala-bridge_2.12</artifactId>
            <version>1.12.0</version>

        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-planner-blink_2.12</artifactId>
            <version>1.12.0</version>

        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-common</artifactId>
            <version>1.12.0</version>

        </dependency>
    </dependencies>

3 会出现找不到 启动软件的问题因为高版本 的 flink 将client 文件 提出需要用户自己引用是上面的的 flink-clients_2.12 pom 文件但是小伙伴注意的是 在引用的时候 一定要把这个文件 放到 第二位 因为 如果引用顺序不对也会出现找不到程序虽然已经 正确引用 所以 当发现出现问题的时候 可以清除库然后重新引用顺序不要搞错了 、

二 tableApi的使用
特别提醒可以增加

		<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.0</version>
            <scope>compile</scope
        </dependency>
         <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
            <scope>compile</scope>
        </dependency>
增加这两个jar可以 显示日志 这个可以方便 调试

一 .flink to elasticsearch
最近研究了好久 这个东西启动不起来还不报错这点真的就很恶心人了 通过验证发现以下几点注意事项
1)如果使用的是高版本的 flink 那么在使用table.executeInsert("estable")的时候注意一定不要再添加
table.execute("testss") 了要不报错大概的意思上面的执行之后已经包含下面的操作了如果使用会找不到
2)也不能使用 env.execute("sss") 也会报错
3)如果这两个问题都没有 但是启动后直接退出可能的原因是 http 相关jar包 这个可以使用insertsql 的时候报错显示出来的 添加一个jar 包

		<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.10</version>
        </dependency>
4)忘es里面写入的方式还没有研究不过我这里的肯定不是同步 因为我忘kafka 里面写的时候 不会直接存入es 当我kafka 退出的时候才push 进去这个有明白的可以在评论区指点下
6)在kafak中version 一定要加上 如果 高于0.11 版本 那么久是universal 就行 如果不写会报错或者退出
7)上示例代码:
package asd
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.table.api.bridge.scala.StreamTableEnvironment
import org.apache.flink.table.api.{DataTypes, EnvironmentSettings}
import org.apache.flink.table.descriptors._

object test {
  def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val bsSettings = EnvironmentSettings.newInstance().useBlinkPlanner().inStreamingMode().build()
    val bsTableEnv = StreamTableEnvironment.create(env, bsSettings)
  
    bsTableEnv.connect(new Kafka()
      .version("universal")
      .startFromLatest().topic("test")
      .property("zookeeper.connect", "localhost:2181")
      .property("bootstrap.servers", "localhost:9092")
      .property("group.id", "awd").startFromLatest())
      .withFormat(new Csv())
      //一个字段还不让用
      .withSchema(new Schema()
        .field("id", DataTypes.STRING()).
        field("ok", DataTypes.BIGINT()))
      .createTemporaryTable("swd")
    val table = bsTableEnv.from("swd")  
    bsTableEnv.connect(new Elasticsearch()
      .version("7")
      .host("localhost", 9200, "http")
      .index("tingyi")
      .documentType("_doc")
    )
      .inUpsertMode()
      .withFormat(new Json())
      .withSchema(new Schema()
        .field("id", DataTypes.STRING())
        .field("ok", DataTypes.BIGINT())
      )
      .createTemporaryTable("estable")
  	  table.executeInsert("estable")
    
  }
}

二 .flink to mysql
1) flink连接mysql的时候注意 这里需要导入的jar包需要两个 第一jar 需要根据您的安装mysql 的版本来匹配 建议 安装 5 版本 (com.mysql.jdbc.Driver 要不会找不到这个类)下面的jar 需要对应你的scala 和 flink 版本

 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-connector-jdbc -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-jdbc_2.12</artifactId>
            <version>1.12.0</version>
        </dependency>

2) 代码示例


import org.apache.flink.streaming.api.scala._
import org.apache.flink.table.api._
import org.apache.flink.table.api.bridge.scala._
import org.apache.flink.table.descriptors._
import org.apache.flink.api.common.restartstrategy.RestartStrategies
object sinkEs {
  def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val bsSettings = EnvironmentSettings.newInstance().useBlinkPlanner().inStreamingMode().build()
    val bsTableEnv = StreamTableEnvironment.create(env, bsSettings)
    env.getConfig.setRestartStrategy(RestartStrategies.noRestart)



     bsTableEnv.connect(
       new Kafka().version("universal")
         .topic("zhou")
         .property("zookeeper.connect", "localhost:2181")
         .property("bootstrap.servers", "localhost:9092").startFromLatest())
          .withFormat(new Csv())
          .withSchema(new Schema()
            .field("id", DataTypes.BIGINT())
            .field("name", DataTypes.STRING())
            .field("age", DataTypes.BIGINT())
            .field("status", DataTypes.BOOLEAN()))
          .createTemporaryTable("kafkatable")

    val table = bsTableEnv.from("kafkatable")

       bsTableEnv.executeSql(
         """CREATE TABLE MyUserTable (
           |  id BIGINT,
           |  name STRING,
           |  age BIGINT,
           |  status BOOLEAN,
           |  PRIMARY KEY (id) NOT ENFORCED
           |) WITH (
           |   'connector' = 'jdbc',
           |   'url' = 'jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false',
           |   'table-name' = 'users',
           |   'driver' = 'com.mysql.jdbc.Driver',
           |   'username' = 'root',
           |   'password' = 'root'
           |)""".stripMargin)

    table.executeInsert("MyUserTable")

  }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值