【深度好文】Flink1.14.3 Table读取Hive数据仓库

摘要:

  1. 案例使用最新稳定版本Flink1.14.3。
  2. Flink Table和SQL从Flink1.12版本已经成熟,可以在生产上放心使用。
  3. Flink Table和SQL从Flink1.12实现了流批统一的所有特性。
  4. Flink Table和SQL与Hive集成需要特别注意版本的兼容性。

1 需求

需求:Flink Table API从Hive数据仓库读取表数据。

2 添加Maven依赖

FlinkTable集成Hive需引⼊如下依赖:

<dependency>

  <groupId>org.apache.flink</groupId>

  <artifactId>flink-connector-hive_2.11</artifactId>

  <version>${flink.version}</version>

</dependency>

<dependency>

  <groupId>org.apache.hive</groupId>

  <artifactId>hive-exec</artifactId>

  <version>${hive.version}</version>

  <exclusions>

<exclusion>

  <artifactId>hadoop-hdfs</artifactId>

  <groupId>org.apache.hadoop</groupId>

</exclusion>

  </exclusions>

</dependency>

3 准备Hive数据源

#创建本地文件click.txt

vi click.txt

Mary,./home,2022-02-02 12:00:00

Bob,./cart,2022-02-02 12:00:00

Mary,./prod?id=1,2022-02-02 12:00:05

Liz,./home,2022-02-02 12:01:00

Bob,./prod?id=3,2022-02-02 12:01:30

Mary,./prod?id=7,2022-02-02 12:01:45

#click.txt上传至hdfs

bin/hdfs dfs -put click.txt /data/clicklog/input

#创建Hive数据库

create database if not exists test location "/user/hive/warehouse/test";

use test;

#创建Hive表

drop table clicklog;

create  table if not exists  clicklog

(userName string,

url string,

cTime string)

row format delimited fields terminated by ","

stored as textfile;

#加载hdfs中的click.txt至Hive表

load data inpath '/data/clicklog/input/click.txt' into table clicklog;

#查询Hive

select * from clicklog;

4 代码实现

Flink Table API读取Hive的完整代码如下所示。

package com.bigdata.chap02;

import org.apache.flink.table.api.*;

import org.apache.flink.table.catalog.hive.HiveCatalog;

import org.apache.flink.table.module.hive.HiveModule;

public class FlinkTableAPIFromHive {

    public static void main(String[] args) {

        //1、创建TableEnvironment

        EnvironmentSettings settings = EnvironmentSettings

                .newInstance()

                .build();

        TableEnvironment tEnv = TableEnvironment.create(settings);

        //2、创建HiveCatalog

//hive连接实例

        String name = "myCatalog";

//hive中的数据库名称

        String defaultDatabase = "test";

//配置文件hive-site.xml存放在项目中的data/etc/目录

        String hiveConfDir     = "data/etc/";

        //加载Hive Module(可以使用hive的UDF)

        tEnv.loadModule(name, new HiveModule("2.3.6"));

        //使用hive方言(hivesql特有的语法)

        tEnv.getConfig().setSqlDialect(SqlDialect.HIVE);

        HiveCatalog hive = new HiveCatalog(name, defaultDatabase, hiveConfDir);

        //3、注册myCatalog

        tEnv.registerCatalog(name, hive);

        //4、设置当前sesion使用的catalog和database

        tEnv.useCatalog(name);

        tEnv.useDatabase(defaultDatabase);

        //5、查询hive中的表

        tEnv.executeSql("select * from clicklog")

                .print();

    }

}

5 导入Hive配置文件

Flink Table API创建HiveCatalog通过如下代码:

HiveCatalog hive = new HiveCatalog(name, defaultDatabase, hiveConfDir);

备注:hiveConfDir参数表示hive-site.xml配置文件路径(data/etc/),Flink Table API通过读取该配置实例化HiveCatalog。

6 测试运行

在idea工具中,右键项目选择Run运行Flink Table,如果能在控制台看到打印如下结果,说明Flink Table API能成功读取Hive数据仓库中的数据。

+----+--------------------------------+--------------------------------+--------------------------------+

| op |                       username |                            url |                          ctime |

+----+--------------------------------+--------------------------------+--------------------------------+

| +I |                           Mary |                         ./home |            2022-02-02 12:00:00 |

| +I |                            Bob |                         ./cart |            2022-02-02 12:00:00 |

| +I |                           Mary |                    ./prod?id=1 |            2022-02-02 12:00:05 |

| +I |                            Liz |                         ./home |            2022-02-02 12:01:00 |

| +I |                            Bob |                    ./prod?id=3 |            2022-02-02 12:01:30 |

| +I |                           Mary |                    ./prod?id=7 |            2022-02-02 12:01:45 |

+----+--------------------------------+--------------------------------+--------------------------------+

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据研习社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值