热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

迄今为止最好用的FlinkSQL教程:FlinkSQLCookbookonZeppelin

对于初学者来说,学习Flink可能不是一件容易的事情。看文档是一种学习,更重要的是实践起来。但对于一个初学者来说要把一个FlinkSQL跑起来还真不容易

对于初学者来说,学习 Flink 可能不是一件容易的事情。看文档是一种学习,更重要的是实践起来。但对于一个初学者来说要把一个 Flink SQL 跑起来还真不容易,要搭各种环境,真心累。很幸运的是,Flink 生态圈里有这样一款工具可以帮助你更有效率地学习 Flink:Zeppelin。本文不讲 Flink on Zeppelin 相关的内容,更关注于如何用 Zeppelin 来学习 Flink。

给大家介绍一个可能是迄今为止用户体验最好的 Flink SQL 教程:Flink Sql Cookbook on Zeppelin。你无需写任何代码,只要照着这篇文章轻松几步就能跑各种类型的 Flink SQL 语句。废话不多说,我们开始吧。

这个教程其实就是 ververica 的 flink-sql-cookbook (https://github.com/ververica/flink-sql-cookbook/ )的改进版。这里所有的例子你都可以在 Zeppelin 里跑起来,而且不用写任何代码。我已经把里面的例子都移植到了 Zeppelin。

准备环境


Step 1

git clone https://github.com/zjffdu/flink-sql-cookbook-on-zeppelin.git

这个 repo 里是一些 Zeppelin notebook,里面都是 flink-sql-cookbook 里的例子。

Step 2

下载 Flink 1.12.1 (我没有试过其他版本的 Flink,有兴趣的同学可以试下),并解压。

Step 3

编译 Flink faker,地址:https://github.com/knaufk/flink-faker/。

把编译出来的 flink-faker-0.2.0.jar 拷贝到 Flink 的 lib 目录下。这个 Flink faker 是一个特制的 table source,用来生成测试数据。我们的很多例子里都会用到这个  Flink faker。

Step 4

运行下面的命令启动最新版本的 Zeppelin。

docker run -p 8081:8081 -p 8080:8080 --rm -v $PWD/logs:/logs -v /Users/jzhang/github/flink-sql-cookbook-on-zeppelin:/notebook -v /Users/jzhang/Java/lib/flink-1.12.1:/flink -e ZEPPELIN_LOG_DIR='/logs' -e ZEPPELIN_NOTEBOOK_DIR='/notebook' --name zeppelin apache/zeppelin:0.9.0

需要注意的是这里的 2 个目录:

  1. /Users/jzhang/github/flink-sql-cookbook-on-zeppelin(这是Step 1 里clone 下来的 repo 目录)

  2. /Users/jzhang/Java/lib/flink-1.12.1 (这是 Step 2 下载下来并解压之后的 Flink 目录)

这两个目录是我自己本地目录,请替换成你自己的目录。

体验 Flink Sql Cookbook 教程

好了,现在教程环境已经 ready 了,浏览器打开 http://localhost:8080 开始你的  Flink Sql 学习之旅吧。

这是 Zeppelin 的 UI,里面已经有了一个文件夹 Flink Sql Cookbook,内含所有  Flink Sql 教程。首先我们需要配置下 Flink 解释器,点击右上角的菜单,选择 interpreter,找到 Flink interpreter,修改其中的 FLINK_HOME 为 /flink (也就是上面 docker 命令里我们挂载的 flink),然后点击重启 interpreter。

如果你碰到如下的错误的话,请往下拉,看 Depenendies 里是不是有个用户名在那里,如果是的话,把它删掉再 save(这是 Zeppelin 的一个前端 bug,社区正在  fix)

例子1:Filtering Data

接下来我们就选择其中里的 Foundations/04 Filtering Data 来体验下。

这里有 2 个段落(Paragraph),第一个段落是创建一个 server_logs 表,第二个段落是用 select where 语句去过滤这张表里的数据,并按时间排序取最新的 10 条数据。下图就是执行完 select 语句的效果,大家可以看到里面的数据每隔 3 秒钟会更新下,并且 status_code 的确永远都是 401 或者 403,验证了我们的 SQL 逻辑。右上角还有一个 FLINK JOB 的链接,点进去之后你还能看个这个 Job 的详细信息。

例子2:Lateral Table Join

接下来我们来看一个 Lateral Table Join 的例子,这是 Flink SQL 里的其中一种  Join 类型。初学者看到这个名词第一感觉会有点懵逼,上网查完资料之后也是似懂非懂的感觉,如果这时候有个比较直观的例子给你,应该会对你的理解非常有帮助。这个教程里就自带了这么一个例子,打开 Joins/06 Lateral Table Join,运行之后,你就能看到如下的效果。

这里我就举这 2 个例子,里面还有很多很多有用的例子(如下图所示),大家可以自己去学习,可以尝试修改下 SQL 再运行看看结果有什么不一样。

以上是我花了周末 2 天时间整理出来的学习资料,希望对大家学习 Flink 有所帮助,共同进步。不过这个教程还有改进的空间,有兴趣的同学可以一起来改进,目前还有如下 3 个点可以改进:

  • 每个Note里的说明文档都是英文的,可以翻译成中文,让更多人学习起来方便些。

  • 现在每个教程都是文字形式,如果有谁能为每个教程都做个小视频,配合讲解的话,我觉得效果会更好。

  • 增加更多案例教程,现在虽然内容很多,但还有空间增加更多教程。

有兴趣想为这个教程做贡献的同学请发邮件到这个地址联系我:jeffzhang.zjf@alibaba-inc.com,  对 Flink on Zeppelin 感兴趣的可以加入钉钉群:32803524

Flink on Zeppelin 这个项目是从 Flink 1.10 开始,目前为止已经支持了 3 个 Flink  的大版本。接下来我们还有很多有挑战的事情要去做,比如 Application Mode 的支持、K8s 的支持、调度的支持等等。Flink on Zeppelin 是我们做的工作的其中一部分,其他开源引擎的支持我们也会去做,我们的目标是做一个用户体验最好的基于开源组件的数据开发平台,有兴趣的同学可以看看下面的招聘详情,欢迎加入我们的数据开发团队。

我们的主要职责是为阿里云上的各大中小企业客户提供大数据和 AI 的基础服务。你的工作将是围绕  Spark、Flink、Hadoop、Tensorflow、PyTorch 等开源组件构建一个易用的,企业级的大数据和 AI 开放平台。不仅有技术的挑战,也需要做产品的激情。我们采用大量的开源技术(Hadoop、Flink、Spark、Zeppelin、 Kubernetes、Tensorflow、Pytorch 等等),并且致力于回馈到开源社区。

如果你对开源,大数据或者 AI 感兴趣,这里有最好的土壤。拥有在 Apache Flink、 Apache Kafka、Apache Zeppelin、Apache Beam、Apache Druid、Apache HBase 等诸多开源领域的 Committer & PMC。感兴趣的同学请发简历到:jeffzhang.zjf@alibaba-inc.com。


▼ 关注「Flink 中文社区」,获取更多技术干货 ▼

????  你也「在看」吗?



推荐阅读
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
author-avatar
洗吉精洗白菜_773
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有