Native Kubernetes集成(Beta)
对于希望在容器化环境上开始使用Flink的用户,在Kubernetes之上部署和管理独立集群需要一些有关容器、算子和特定于环境的工具(如“ kubectl”)的预备知识。
在 Flink 1.10 中,我们推出了主动 Kubernetes 集成 (FLINK-9953)的第一阶段,该阶段支持会话集群(以及计划的单job集群)。在这种情况下,“主动”表示Flink的ResourceManager( K8sResMngr)与Kubernetes进行本地通信以按需分配新的Pod,类似于Flink的Yarn和Mesos集成。用户还可以利用命名空间为聚合资源消耗有限的多租户环境启动Flink集群。事先配置具有足够权限的RBAC角色和服务帐户。
如作业提交的统一逻辑中所述,Flink 1.10中的所有命令行选项都映射到统一配置。因此,用户可以简单地参考Kubernetes配置选项,然后使用以下命令在CLI中将作业提交到Kubernetes上的现有Flink会话:
./bin/flink run -d -e kubernetes-session -Dkubernetes.cluster-id=<ClusterId> examples/streaming/WindowJoin.jar
如果您想试用此预览功能,我们建议您逐步浏览Native Kubernetes设置,并尝试使用并与社区分享反馈。
Hive集成在Flink 1.9中宣布为预览功能。此第一个实现允许用户使用SQL DDL将特定于Flink的元数据保留在Hive Metastore中,调用在Hive中定义的UDF,并使用Flink读取和写入Hive表。Flink 1.10通过进一步的开发使这项工作更加完善,这些开发使Flink可以进行生产就绪的Hive集成。
到目前为止,仅支持对未分区的Hive表进行写入。在Flink 1.10中,Flink SQL语法已通过 INSERT OVERWRITE和 PARTITION进行了扩展(FLIP-63),使用户可以在Hive中写入静态和动态分区。
静态分区写入
INSERT { INTO | OVERWRITE } TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
动态分区编写
INSERT { INTO | OVERWRITE } TABLE tablename1 select_statement1 FROM from_statement;
完全支持的分区表使用户可以利用读取时的分区修剪功能,通过减少需要扫描的数据量来显着提高这些操作的性能。
除分区修剪外,Flink 1.10还为Hive集成引入了更多的读取优化,例如:
Flink 1.10为Flink table core中的可插拔模块引入了一种通用机制,首先着眼于系统功能(FLIP-68[6])。使用模块,用户可以扩展Flink的系统对象,例如使用行为类似于Flink系统功能的Hive内置函数。此版本附带预先实现的“ HiveModule”,支持多个Hive版本,但用户也可以编写自己的可插拔模块。
Flink 1.10支持特定于流的语法扩展,以在Flink SQL DDL中定义时间属性和水印生成(FLIP-66[7])。这允许基于时间的操作(例如加窗)以及表上的水印策略的定义使用DDL语句创建的。
CREATE TABLE table_name ( WATERMARK FOR columnName AS <watermark_strategy_expression> ) WITH ( ... )
此版本还引入了对虚拟计算列的支持(FLIP-70[8])可以基于同一表中的其他列或确定性表达式(即字面值,UDF和内置函数)派生。在Flink中,计算列可用于定义创建表时的时间属性。
现在,temporary/persistent和system/catalog函数之间有明显的区别(FLIP-57[9])。这不仅消除了函数引用中的歧义,而且允许确定性的函数解析顺序(即,在命名冲突的情况下,系统函数将在目录函数之前,而临时函数在这两个维度上都将优先于持久函数)。
遵循FLIP-57的基础,我们扩展了SQL DDL语法,以支持创建目录功能,临时功能和临时系统功能(FLIP-79[10]):
CREATE [TEMPORARY|TEMPORARY SYSTEM] FUNCTION [IF NOT EXISTS] [catalog_name.][db_name.]function_name AS identifier [LANGUAGE JAVA|SCALA]
有关Flink SQL中DDL支持的当前状态的完整概述,请查看更新的文档。
注意: 为了将来在跨元对象(表,视图,函数)中正确处理和保证一致的行为,Table API中的某些对象声明方法具有不建议使用更接近标准SQL DDL的方法(FLIP-64[11])。
TPC-DS是一种广泛使用的行业标准决策支持基准,用于评估和衡量基于SQL的数据处理引擎的性能。在Flink 1.10中,端到端均支持所有TPC-DS查询(FLINK-11491),反映了其SQL引擎的就绪状态解决现代数据仓库式工作负载的需求。
在以前的版本中引入了PyFlink的预览版,朝着Flink中全面支持Python的目标迈进了一步。对于此版本,重点是使用户能够在Table API/SQL(FLIP-58[12])中注册和使用Python用户定义函数(UDF,已计划UDTF/UDAF)。
如果您对基础实现感兴趣(利用Apache Beam的Portability Framework),请参阅FLIP-58的“架构”部分,也请参阅FLIP- 78[13]。这些数据结构为Pandas支持和PyFlink最终到达DataStream API奠定了必要的基础。
从Flink 1.10开始,用户还可以使用以下命令通过 pip轻松安装PyFlink:
pip install apache-flink
有关PyFlink计划进行的其他改进的预览,请查看FLINK-14500并参与讨论以获取所需的用户功能。
英文原文:Apache Flink 1.10.0 Release Announcement
本博客文章除特别声明,全部都是原创!