日本第一个cba球员

admin · 2009-12-01

1.序篇

  空话不众说,我们先直接上本文的目次和论断,小搭档能够先看论断疾速领会博主盼愿本文能给小搭档们带来甚么助助:

   布景及运用处景先容:博主盼愿你能领会到,原本良众场景下及时数仓的树立都是跟着离线数仓而树立的(好像的逻辑正在及时数仓中从新达成一遍),因而或许正在 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 产出,离线数据行使 hivespark 产出。

  那末回到咱们作品题目的成绩:为甚么必要 flink 支柱 hive udf 呢?

  博主剖释了下,论断如下:

  站正在数据需要的角度来讲,凡是会有如下两种状况:

   从前仍旧有了离线数据链途,需要方也思要及时数据。即使直接能用仍旧开拓好的 hive udf,则无须将好像的逻辑转移到 flink udf 中,而且后续无需费时吃力爱护两个 udf 的逻辑划一性。 及时和离线的需要都是新的,必要新开拓。即使只开拓一套 udf,则事半功倍。

  因而正在 flink 中支柱 hive udf 这件事对开拓职员提效来讲瑕瑜常有利益的。

   3.正在扩大前,你必要了解少少基础观点 flink 支柱 hive udf 这件事分为两个个别。 flink 扩大支柱 hive 内置 udf

  flink 扩大支柱用户自界说 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。

  

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

 

  正在 StreamTableEnvironment 中加载 HiveModule。

  

Stringname="default";Stringversion="3.1.2";tEnv.loadModule(name,newHiveModule(version));

 

  而后正在驾驭台打印一下现在有的 module。

  

String[]modules=tEnv.listModules();Arrays.stream(modules).forEach(System.out::println);

 

  而后能够看到除了 core module,另有咱们刚才加载出来的 default module。

  

defaultcore

 

  检查整个 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 的。

  举比方下:

  

CREATETEMPORARYFUNCTIONtest_hive_udfasflink.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 了吗?

  差错,小搭档萌岂敢有这类设法主意。博主都把这个题目列出来了(牛逼都吹出去了),还能给不禁来理计划嘛。

  思绪睹下一章节。

   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。

文章推荐:

2022 年中国人工智能行业发展现状与市场规模分析 市场规模超 3000 亿元

该来的总要来! 切尔西老板将彻底退出英国市场

雷神黑武士四代开售:i7搭RTX3060不到9千元

智慧城市中 5G 和物联网的未来