当前位置: 首页 > article >正文

FlinkSql读取外部Mysql和HBase数据库的方法(scala)

我的Flink版本为1.13.6

<flink.version>1.13.6</flink.version>

FlinkSql读取外部的MySQL是走的JDBC所以需要以下两个依赖:

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-jdbc_${scala.binary.version}</artifactId>
            <version>1.13.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>

读取HBase需要如下依赖:

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-hbase-2.2_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>

我们首先在虚拟机的MySQL中随意找一张表,我以我这边的ebs库的customer表为例:

表内容如下:

在scala工程中建立一个类,内容如下:

import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.table.api.EnvironmentSettings
import org.apache.flink.table.api.bridge.scala.StreamTableEnvironment

object MysqlJdbc {
  def main(args: Array[String]): Unit = {
    val settings = EnvironmentSettings.newInstance()
      .inStreamingMode()
      .build()
    val see: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    val tabEnv: StreamTableEnvironment = StreamTableEnvironment.create(see)

    tabEnv.executeSql(
      """
         |CREATE TABLE person(
         |gender string,
         |country string,
         |job string,
         |credit_type string,
         |customer_id int ,
         |first_name string,
         |last_name string,
         |email string,
         |address string,
         |`language` string,
         |credit_no string
         |)
         |WITH (
         |'connector' = 'jdbc',
         |'url' = 'jdbc:mysql://single01:3306/ebs',
         |'driver' = 'com.mysql.cj.jdbc.Driver',
         |'username' = 'root',
         |'password' = 'sakura20031204',
         |'table-name' = 'customer'
         |)
         |""".stripMargin)


    tabEnv.sqlQuery(
      """
        |SELECT * FROM person
        |
        |""".stripMargin)
      .execute().print()
  }
}

在flinkSQL中,我建立一张虚拟表person,然后在字段列表中,每一个字段名的数据类型都必须和MySQL中源数据的数据类型相匹配,否则会报错。

其中一些参数解释如下:

'connector' = 'jdbc'

指定连接器类型为jdbc。

'url' = 'jdbc:mysql://single01:3306/ebs'

指定所要连接的MySQL服务器地址以及库名。

'driver' = 'com.mysql.cj.jdbc.Driver'

指定MySQL驱动包。

'username' = 'root'

'password' = 'sakura20031204'

指定登录MySQL用户的账号和密码,我这边为了方便使用的是root用户,实际使用时不能使用root。要保证该用户有读取你指定的那张表的权限。

'table-name' = 'customer'

指定表的名字。

结果如下(截图只有部分内容,因为字段列表长):

同样的,在HBase中先找一张表,我这里以我这边的hbase_test:tranfer_from_mysql为例:

HBase shell中看表内容比较费劲,这张表大致内容有一个列族baseinfo 内容是:

<age INT, gender STRING,name STRING,phone STRING>

在scala工程中建立一个类,内容如下:

import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.table.api.EnvironmentSettings
import org.apache.flink.table.api.bridge.scala.StreamTableEnvironment

object HBase {
  def main(args: Array[String]): Unit = {
    val settings = EnvironmentSettings.newInstance()
      .inStreamingMode()
      .build()
    val see: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    val tabEnv: StreamTableEnvironment = StreamTableEnvironment.create(see)

    tabEnv.executeSql(
      """
         |CREATE TABLE person(
         |id INT,
         |baseinfo ROW<age INT, gender STRING,name STRING,phone STRING>
         |) WITH (
         |'connector' = 'hbase-2.2',
         |'table-name' = 'hbase_test:tranfer_from_mysql',
         |'zookeeper.quorum' = 'single01:2181',
         |'zookeeper.znode.parent' = '/hbase'
         |)
         |""".stripMargin)

    tabEnv.sqlQuery(
      """
        |SELECT id, baseinfo.age, baseinfo.gender, baseinfo.name, baseinfo.phone
        |FROM person
        |WHERE baseinfo.gender = 'female'
        |and baseinfo.age > 20
        |""".stripMargin)
      .execute().print()

  }
}

其中一些参数内容解释如下:

'connector' = 'hbase-2.2'

指定使用的连接器类型,这里是 HBase 的版本 2.2。

'table-name' = 'hbase_test:tranfer_from_mysql'

指定在 HBase 中要访问的表的名称。

'zookeeper.quorum' = 'single01:2181'

指定 HBase 使用的 ZooKeeper 集群的地址和端口。

'zookeeper.znode.parent' = '/hbase'

指定 ZooKeeper 中的父节点(znode)。

最终结果如下:


http://www.kler.cn/a/382803.html

相关文章:

  • 【基于Zynq FPGA对雷龙SD NAND的测试】
  • 微服务架构面试内容整理-服务拆分的原则
  • 释放专利力量:Patently 如何利用向量搜索和 NLP 简化协作
  • JavaScript 读取及写入本地文件
  • Vue.js 组件开发:构建高效、可重用的用户界面
  • Kubernetes——part9-2 kubernetes集群java项目上云部署
  • AI笔筒操作说明及应用场景
  • Rust 图形界面开发——使用 GTK 创建跨平台 GUI
  • .NET 8 中 Entity Framework Core 的使用
  • 无人机无线电频谱侦测运行方式!
  • hf_transformers
  • 五、Java并发 Java Google Guava 实现
  • 解决CORS (跨源资源共享) 错误
  • RabbitMQ 实现消息队列负载均衡
  • 光纤定向耦合器
  • 基于vue框架的的冷链食品物流信息管理系统v81wb(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • postman入参file的接口测试
  • 初识CSS
  • CSS综合练习
  • 使用 GitHub Actions 部署到开发服务器的详细指南
  • 如何学习Python编程?
  • Qt桌面应用开发 第二天(信号和槽 Lambda表达式)
  • 中级图像处理工具
  • web——warmup——攻防世界
  • csrf令牌
  • 计算机视觉读书系列(1)——基本知识与深度学习基础