Flink HiveCatalog使用

Flink采用HiveCatalog作为表元数据持久化的介质。对于同时部署了Hive和Flink的公司来说,可以方便管理元数据,而对于只部署了Flink的公司来说,HiveCatalog也是Flink唯一支持的元数据持久化的介质。不将元数据持久化的时候,开发过程中的每个地方都需要使用DDL重新将Kafka等数据源的数据注册到临时的Catalog中,浪费了很多精力和时间。

HiveCatalog可用于处理两种类型的表:Hive兼容表和通用表。 就存储层中的元数据和数据而言,兼容Hive的表是以兼容Hive的方式存储的表。 因此,通过Flink创建的Hive兼容表可以从Hive端查询。

另一方面,通用表特定于Flink。 使用HiveCatalog创建通用表时,我们只是使用HMS来保留元数据。 虽然这些表格对Hive可见,但Hive不太可能能够理解元数据。 因此,在Hive中使用此类表会导致未定义的行为。

下面将通过一个简单的例子,演示将Kafa作为数据源,并将元数据保存到Hive metastore中,使用flink sql直接读取kafka。测试环境和代码工程与Flink访问Kerberos环境下的Hive一致,此处不再重复。

在maven工程的pom文件中添加以下依赖

<dependency>
	<groupId>org.apache.flink</groupId>
	<artifactId>flink-connector-kafka_2.11</artifactId>
	<version>${flink.version}</version>
</dependency>

<dependency>
	<groupId>org.apache.flink</groupId>
	<artifactId>flink-csv</artifactId>
	<version>${flink.version}</version>
</dependency>

注册并使用当前Catalog 

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        EnvironmentSettings settings = EnvironmentSettings.newInstance()
                .useBlinkPlanner()
                .inStreamingMode()
                .build();StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env, settings);

new KerberosAuth().kerberosAuth(false);  //认证
HiveCatalog hive = getHiveCatalog();  //获取hivecatalog

tableEnv.registerCatalog("myhive", hive);
tableEnv.useCatalog("myhive");
tableEnv.useDatabase("test01");

注册kafka数据源

tableEnv.sqlUpdate("create table mytable(name STRING,cTime STRING,url STRING) WITH (\n" +
                "   'connector.type' = 'kafka',\n" +
                "   'connector.version' = 'universal',\n" +
                "   'connector.topic' = 'flink-in',\n" +
                "   'connector.properties.zookeeper.connect' = '10.5.13.99:2181',\n" +
                "   'connector.properties.bootstrap.servers' = 'kafka1.pc.com:9092,kafka2.pc.com:9092,kafka3.pc.com:9092',\n" +
                "   'connector.properties.group.id' = 'testGroup', \n" +
                "   'connector.startup-mode' = 'earliest-offset', \n" +
                "   'format.type' = 'csv',\n" +
                "   'update-mode' = 'append'\n" +
                ")");

读取kafka数据

注册之后,可以直接读取,不需要再次定义。

Table table = tableEnv.sqlQuery("select name from mytable");
tableEnv.toRetractStream(table,Row.class).print();

参考:

HiveCatalog

 

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值