Apache Flink

如何在 Flink 1.9 中使用 Hive?

谁说我不能喝 提交于 2019-11-28 22:22:07
Apache Flink 从 1.9.0 版本开始增加了与 Hive 集成的功能,用户可以通过 Flink 来访问 Hive 的元数据,以及读写 Hive 中的表。本文将主要从项目的设计架构、最新进展、使用说明等方面来介绍这一功能。 Flink on Hive 介绍 SQL 是大数据领域中的重要应用场景,为了完善 Flink 的生态,发掘 Flink 在批处理方面的潜力,我们决定增强 FlinkSQL 的功能,从而让用户能够通过 Flink 完成更多的任务。 Hive 是大数据领域最早出现的 SQL 引擎,发展至今有着丰富的功能和广泛的用户基础。之后出现的 SQL 引擎,如 Spark SQL、Impala 等,都在一定程度上提供了与 Hive 集成的功能,从而方便用户使用现有的数据仓库、进行作业迁移等。因此我们认为提供与 Hive 交互的能力对于 FlinkSQL 也是非常重要的。 设计架构 与 Hive 集成主要包含了元数据和实际表数据的访问,因此我们会从这两方面介绍一下该项目的架构。 1.元数据 为了访问外部系统的元数据,Flink 提供了 ExternalCatalog 的概念。但是目前 ExternalCatalog 的定义非常不完整,基本处于不可用的状态。因此,我们提出了一套全新的 Catalog 接口来取代现有的 ExternalCatalog。新的 Catalog

修改代码150万行!与 Blink 合并后的 Apache Flink 1.9.0 究竟有哪些重大变更?

岁酱吖の 提交于 2019-11-28 22:21:21
8月22日,Apache Flink 1.9.0 正式发布,早在今年1月,阿里便宣布将内部过去几年打磨的大数据处理引擎Blink进行开源并向 Apache Flink 贡献代码。当前 Flink 1.9.0是阿里内部版本 Blink 合并入 Flink 后的首次发版,修改代码150万行,此次发版不仅在结构上有重大变更,在功能特性上也更加强大与完善。本文将为大家介绍 Flink 1.9.0 有哪些重大变更与新增功能特性。 在此先简单回顾一下阿里巴巴 Blink 开源的部分要点: Blink 开源的内容主要是阿里巴巴基于开源 Flink 引擎,依托集团内部业务,在流计算和批处理上积累的大量新功能、性能优化、稳定性提升等核心代码 Blink 以分支的形式开源,即开源后会成为 Apache Flink 项目下的一个分支。 Blink 开源的目标不是希望成为另一个活跃的项目,而是将 Flink 做的更好。通过开源的方式让大家了解所有 Blink 的实现细节,提高 Blink 功能merge进入 Flink 的效率,与社区协作更高效。 半年的时间过去了,随着 Flink 1.9.0 版本的发布,在此我们可以骄傲的宣布:Blink 团队已经实现了之前的诺言!尽管不是所有功能都顺利 merge 回了社区,但是在我们和社区的共同努力下,Flink 正在朝着它最初的梦想大踏步的迈进。 先和大家分享几个

Apache Flink 1.9重磅发布!首次合并阿里内部版本Blink重要功能

半城伤御伤魂 提交于 2019-11-28 22:20:47
8月22日,Apache Flink 1.9.0 版本正式发布,这也是阿里内部版本 Blink 合并入 Flink 后的首次版本发布。此次版本更新带来的重大功能包括批处理作业的批式恢复,以及 Table API 和 SQL 的基于 Blink 的新查询引擎(预览版)。同时,这一版本还推出了 State Processor API,这是社区最迫切需求的功能之一,该 API 使用户能够用 Flink DataSet 作业灵活地读写保存点。此外,Flink 1.9 还包括一个重新设计的 WebUI 和新的 Python Table API (预览版)以及与 Apache Hive 生态系统的集成(预览版)。 Apache Flink 项目的目标是开发一个流式处理系统,以统一和支持多种形式的实时和离线数据处理应用程序以及事件驱动的应用程序。在此版本中,我们在这方面取得了巨大的进步,将 Flink 的流处理和批处理能力集成在了统一的运行时之上。 本文将描述所有主要的新功能、改进、重要变化、以及未来的发展计划。有关更多详细信息,请查看 完整版变更日志 。 Flink 1.9 版本的二进制分发和源文件可以通过 Flink 项目的 下载页面 以及 文档页面 获得。 Flink 1.9 与之前 1.x 版本的 @Public API 是兼容的。 你也可以通过 Flink 邮件列表 或 JIRA

Apache Flink 1.8.0 中的状态生存时间特性:如何自动清理应用程序的状态

六月ゝ 毕业季﹏ 提交于 2019-11-28 20:29:14
原文链接: https://flink.apache.org/2019/05/19/state-ttl.html 对于许多状态流式计算程序来说,一个常见的需求是自动清理应用程序的状态(state),以便有效地控制状态大小,或者控制程序访问状态的有效时间(例如受限于诸如GDPR等法律条规)。Apache Flink 自 1.6.0 版本引入了状态的生存时间(time-to-live,TTL)功能,使得应用程序的状态清理和有效的状态大小管理成为可能。 在本文中,我们将讨论引入状态生存时间特性的动机并讨论其相关用例。此外,我们还将演示如何使用和配置该特性。同时,我们将会解释 Flink 如何借用状态生存时间特性在内部管理状态,并对 Flink 1.8.0 中该功能引入的相关新特性进行一些展示。本文章最后对未来的改进和扩展作了展望。 状态的暂时性 有两个主要原因可以解释为什么状态只应该维持有限的时间。先设想一个 Flink 应用程序,它接收用户登录事件流,并为每个用户存储上一次登录时的相关事件信息和时间戳,以改善高频访问用户的体验。 控制状态的大小。 状态生存时间特性的主要使用场景,就是能够有效地管理不断增长的状态大小。通常情况下,数据只需要暂时保存,例如用户处在一次网络连接会话中。当用户访问事件结束时,我们实际上就没有必要保存该用户的状态,来减少无谓的状态存储空间占用。Flink 1.8

Apache Flink 零基础入门(五)Flink开发实时处理应用程序

时光毁灭记忆、已成空白 提交于 2019-11-28 19:59:19
使用Flink + java实现需求 环境 JDK:1.8 Maven:3.6.1(最低 Maven 3.0.4 ) 使用上一节中的springboot-flink-train项目 开发步骤 第一步:创建流处理上下文环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); 第二步:读取数据,使用socket流方式读取数据 DataStreamSource<String> text = env.socketTextStream("192.168.152.45", 9999); 第三步:transform text.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() { @Override public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception { String[] tokens = value.toLowerCase().split(","); for(String token: tokens) { if(token.length() > 0) { out

Flink快速入门--安装与示例运行

孤街醉人 提交于 2019-11-28 19:45:46
flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性、高吞吐、低延迟等优势,本文简述flink在windows和linux中安装步骤,和示例程序的运行。 首先要想运行Flink,我们需要下载并解压Flink的二进制包,下载地址如下: https://flink.apache.org/downloads.html 我们可以选择Flink与Scala结合版本,这里我们选择最新的1.9版本 Apache Flink 1.9.0 for Scala 2.12 进行下载。 下载成功后,在windows系统中可以通过Windows的bat文件或者Cygwin来运行Flink。 在linux系统中分为单机,集群和Hadoop等多种情况。 通过Windows的bat文件运行 首先启动cmd命令行窗口,进入flink文件夹,运行bin目录下的 start-cluster.bat 注意:运行flink需要java环境,请确保系统已经配置java环境变量。 $ cd flink $ cd bin $ start-cluster.bat Starting a local cluster with one JobManager process and one TaskManager process. You can terminate the processes via CTRL

小白学习如何打日志

眉间皱痕 提交于 2019-11-28 19:19:31
前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star: https://github.com/ZhongFuCheng3y/3y 记得之前写过一篇: 《阿里巴巴 Java开发手册》读后感 ,之前自学时由于没怎么接触过打“日志”,所以《手册》中的“日志规约”我就先放一边去了。 而之前写了一篇: 在公司做的项目和自己在学校做的有什么区别? 中就有提到:公司的项目不会有 e.printStackTrace(); 这种代码的存在。因为这打印出来的错误信息 没有日期、等级 等等,分析起来不方便。 在工作中去服务器上查日志又是一个非常非常常见的操作,所以当初我又写了一篇 工作中常用到的Linux命令 ,里边就谈到了查日志时常用的Linux命令。 想着,既然接触日志也有一段时间了,不妨在回看《手册》,看看有什么要注意的地方,于是就有了这篇笔记。 一、Java打日志的基础 以前自己自学的时候,排查问题只会写下面的代码: try { // doSomething } catch (Exception e) { e.printStackTrace(); } ---------- // 查看某个数据的值时: System.out.println(xxxx); 去到公司就发现上面的代码全不见了,剩下的是: LOGGER.info("begin to run Java3y:{}", id

《从0到1学习Flink》—— Flink JobManager 高可用性配置

天大地大妈咪最大 提交于 2019-11-28 10:23:56
前言 之前在 《从0到1学习Flink》—— Flink 配置文件详解 讲过 Flink 的配置,但是后面陆续有人来问我一些配置相关的东西,在加上我现在对 Flink 也更熟悉了些,这里我就再写下 Flink JobManager 的配置相关信息。 在 《从0到1学习Flink》—— Apache Flink 介绍 一文中介绍过了 Flink Job 的运行架构图: JobManager 协调每个 Flink 作业的部署。它负责调度和资源管理。 默认情况下,每个 Flink 集群都有一个 JobManager 实例。这会产生单点故障(SPOF):如果 JobManager 崩溃,则无法提交新作业且运行中的作业也会失败。 如果我们使用 JobManager 高可用模式,可以避免这个问题。您可以为 standalone 集群和 YARN 集群配置高可用模式。 standalone 集群高可用性 standalone 集群的 JobManager 高可用性的概念是,任何时候都有一个主 JobManager 和 多个备 JobManagers,以便在主节点失败时有新的 JobNamager 接管集群。这样就保证了没有单点故障,一旦备 JobManager 接管集群,作业就可以依旧正常运行。主备 JobManager 实例之间没有明确的区别。每个 JobManager 都可以充当主备节点。

Apache Flink 零基础入门(一):基础概念解析

不打扰是莪最后的温柔 提交于 2019-11-28 03:42:49
Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速计算。 Flink Application 了解 Flink 应用开发需要先理解 Flink 的 Streams、State、Time 等基础处理语义以及 Flink 兼顾灵活性和方便性的多层次 API。 Streams,流,分为有限数据流与无限数据流,unbounded stream 是有始无终的数据流,即无限数据流;而 bounded stream 是限定大小的有始有终的数据集合,即有限数据流,二者的区别在于无限数据流的数据会随时间的推演而持续增加,计算持续进行且不存在结束的状态,相对的有限数据流数据大小固定,计算最终会完成并处于结束的状态。 State,状态是计算过程中的数据信息,在容错恢复和 Checkpoint 中有重要的作用,流计算在本质上是 Incremental Processing,因此需要不断查询保持状态;另外,为了确保 Exactly- once 语义,需要数据能够写入到状态中;而持久化存储,能够保证在整个分布式系统运行失败或者挂掉的情况下做到 Exactly- once,这是状态的另外一个价值。 Time,分为 Event time、Ingestion

精通Apache Flink必读系列文章

强颜欢笑 提交于 2019-11-27 19:14:07
Flink是最接近于谷歌Dataflow大数据分析平台的设计的开源分布式计算引擎,其核心设计理念与Spark有很大的不同。 从设计出发点,Flink是一个流计算处理计算引擎,把批处理视为无限流计算的一种特例,Spark是批处理计算引擎,把流处理视为迷你批处理,因为设计上的差异,导致在对处理时延要求高的场景中,Flink更加合适。 从生态上来说,二者都有SQL、机器学习、图计算等基本的组件,但是Spark在丰富程度、成熟度方面比Flink有优势。 关于Flink的资料已经相当多了,笔者就不做画蛇添足写了,要掌握Flink的精妙,必须要了解其底层的基本原理,以下是必读的资料: 理解Flink的设计原则 Google Stream 101越了批处理的流处理世界 Google Stream 102超越了批处理的流处理世界 Flink原理和实现 Flink的架构和拓扑概览 理解 Flink 中的计算资源 Flink如何生成ExecutionGraph及物理执行图 Flink 生成StreamGraph Flink Window的实现原理 Flink中的状态管理 Flink中的反压Back-Pressure Flink Operator Chain原理 Flink内存管理 Flink异步快照机制-Failover 数据流的类型和操作 Flink Async IO(异步IO) Flink SQL