北京赛车棋牌网站连接超时_Flink SQL 知其是以然:在 Flink 中还能使用 Hive Udf?(附源码)
鬼话未几说太平洋在线色碟,我们先径直上本文的目次和论断,小伙伴不错先看论断快速了解博主生机本文能给小伙伴们带来什么匡助:
布景及应用场景先容:博主生机你能了解到,其实许多场景下及时数仓的树立皆是跟着离线数仓而树立的(疏导的逻辑在及时数仓中从头竣事一遍),因此大略在 flink sql 中复用 hive udf 是大略大大提能手效的。 flink 膨胀救援 hive 内置 udf:flink sql 提供了膨胀 udf 的本领,即 module,况且 flink sql 也内置了 HiveModule(需要你主动加载进环境),来救援一些 hive 内置的 udf (比如 get_json_object)给小伙伴们使用。 flink 膨胀救援用户自界说的 hive udf:主要先容 flink sql 流任务中,不可使用 create temporary function 去引入一个用户自界说的 hive udf。因此博主只可通过 flink sql 提供的 module 插件本领,自界说了 module,来救援引入用户自界说的 hive udf。 2.布景及应用场景先容其实大多量公司皆是从离线数仓脱手树立的。信服各人势必在我方的坐褥环境中征战了很是多的 hive udf。跟着需求对于时效性条件的增高,越来越多的公司也脱手树立起及时数仓。许多场景下及时数仓的树立皆是跟着离线数仓而树立的。及时数据使用 flink 产出,离线数据使用 hive\spark 产出。
皇冠比分那么回到我们著作标题的问题:为什么需要 flink 救援 hive udf 呢?
博主分析了下,论断如下:
站在数据需求的角度来说,一般会有以下两种情况:
过去也曾有了离线数据链路,需求方也想要及时数据。若是径直能用也曾征战好的 hive udf,则无须将疏导的逻辑迁徙到 flink udf 中,况且后续无需费时忙活珍贵两个 udf 的逻辑一致性。 及时和离线的需求皆是新的,需要新征战。若是只征战一套 udf,则渔人之利。因此在 flink 中救援 hive udf 这件事对征战东谈主员提效来说诟谇常有克己的。
3.在膨胀前,你需要知谈一些基本主意 flink 救援 hive udf 这件事分为两个部分。 flink 膨胀救援 hive 内置 udfflink 膨胀救援用户自界说 hive udf
第一部分:flink 膨胀救援 hive 内置 udf,比如 get_json_object,rlike 等等。
有同常识了,这样基本的 udf,flink 皆莫得吗?
如实莫得。对于 flink sql 内置的 udf 见如下连气儿,各人不错望望 flink 救援了哪些 udf:https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/
那么若是我若是强诓骗用 get_json_object 这个 udf,会发生啥呢?服从如下图。
径直报错找不到 udf。
第二部分:flink 膨胀救援用户自界说 hive udf。
内置函数措置不了用户的复杂需求,用户就需要我方写 hive udf,况且这部分自界说 udf 也想在 flink sql 中使用。
底下望望奈何在 flink sql 中进行这两种膨胀。
实时统计 4.hive udf 膨胀救援 4.1.flink sql module波及到膨胀 udf 就不得不提到 flink 提供的 module。见官网下图。
从第一句话就不错看到,module 的作用等于让用户去膨胀 udf 的。
flink 自己也曾内置了一个 module,名字叫 CoreModule,其中也曾包含了一些 udf。
那我们要奈何使用 module 这玩意去膨胀我们的 hive udf 呢?
4.2.flink 膨胀救援 hive 内置 udf挨次如下:
引入 hive 的 connector。其中包含了 flink 官方提供的一个 HiveModule。在 HiveModule 中包含了 hive 内置的 udf。
在球场上,C罗是当之无愧的王者,生杀予夺,无可争议。但在感情生活中,欧博代理注册C罗却算得上是个花心的浪荡公子。各种绯闻缠身,身旁的超模、演员、名媛一个接一个的换,一直没有断过。光是公开承认的就有葡萄牙超模卡琳娜、名气女模乔丹娜、演员伊莉娜、足球宝贝吉玛·阿特金森等。女友虽多,但游戏人间的C罗,到底对她们付出了多少感情,却是不可知的。
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-hive_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency>
在 StreamTableEnvironment 中加载 HiveModule。
String name = "default"; String version = "3.1.2"; tEnv.loadModule(name, new HiveModule(version));
然后在戒指台打印一下目下有的 module。
String[] modules = tEnv.listModules(); Arrays.stream(modules).forEach(System.out::println);
然后不错看到除了 core module,还有我们刚刚加载进去的 default module。
皇冠车门打不开default core
搜检统统 module 的统统 udf。在戒指台打印一下。
String[] functions = tEnv.listFunctions(); Arrays.stream(functions).forEach(System.out::println);
就会将 default 和 core module 中的统统包含的 udf 给列举出来,天然也就包含了 hive module 中的 get_json_object。
然后我们再去在 flink sql 中使用 get_json_object 这个 udf,就莫得报错,能平素输出服从了。
使用 flink hive connector 自带的 HiveModule,也曾大略措置很大一部分常见 udf 使用的问题了。
网站连接超时 4.2.flink 膨胀救援用户自界说 hive udf原来博主是径直想要使用 flink sql 中的 create temporary function 去扩充引入自界说 hive udf 的。
全迅网皇冠会员例如如下:
CREATE TEMPORARY FUNCTION test_hive_udf as 'flink.examples.sql._09.udf._02_stream_hive_udf.TestGenericUDF';
发目下扩充这句 sql 时,是不错扩充得手,将 udf 注册进去的。
然则在后续 udf 脱手化时就报错了。具体造作如下图。径直报错 ClassCastException。
看了下源码,flink 流环境下(未邻接 hive catalog 时)在创建 udf 时会以为这个 udf 是 flink 生态体系中的 udf。
是以在脱手化我们引入的 TestGenericUDF 时,默许会按照 flink 的 UserDefinedFunction 强转,因此才会报强转造作。
那么我们就不可使用 hive udf 了吗?
造作,小伙伴萌岂敢有这种主见。博主皆把这个标题列出来了(得力皆吹出去了),还能给不出措置决策嘛。
![金沙娱乐城](/images/img/hg86a457.jpg)
想路见下一章节。
北京赛车棋牌 4.3.flink 膨胀救援用户自界说 hive udf 的增强 module其实想路很简便。
使用 flink sql 中的 create temporary function 天然不可扩充,然则 flink 提供了插件化的自界说 module。
我们不错膨胀一个救援用户自界说 hive udf 的 module,使用这个 module 来救援自界说的 hive udf。
竣事的代码也很是简便。简便的把 flink hive connector 提供的 HiveModule 作念一个增强即可,即下图中的 HiveModuleV2。
皇冠体育搭建使用容貌如下图所示:
皇冠体育
然后表率就平素跑起来了。
肥肠滴好用!
5.追念与瞻望本文主要先容了若是在 flink sql 使用 hive 内置 udf 及用户自界说 hive udf,追念如下:
布景及应用场景先容:博主生机你能了解到,其实许多场景下及时数仓的树立皆是跟着离线数仓而树立的(疏导的逻辑在及时数仓中从头竣事一遍),因此大略在 flink sql 中复用 hive udf 是大略大大提能手效的。 flink 膨胀救援 hive 内置 udf:flink sql 提供了膨胀 udf 的本领,即 module,况且 flink sql 也内置了 HiveModule(需要你主动加载进环境),来救援一些 hive 内置的 udf (比如 get_json_object)给小伙伴们使用。 flink 膨胀救援用户自界说的 hive udf:主要先容 flink sql 流任务中,不可使用 create temporary function 去引入一个用户自界说的 hive udf。因此博主只可通过 flink sql 提供的 module 插件本领,自界说了 module,来救援引入用户自界说的 hive udf。
下一篇:亚博体育博彩平台奖金_乘风冬运 辽宁冰雪畅通赛事活动缤纷多彩