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

【从零开始的大数据学习】Flink官方教程学习笔记(一)

Flink官方教程学习笔记学习资源Scala相关FlinkExercises(强推)配置FlinkTutorial所需的环境FlinkTutorial学



Flink官方教程学习笔记


  • 学习资源
      • Scala相关
      • Flink Exercises (强推)


  • 配置Flink Tutorial所需的环境
  • Flink Tutorial学习笔记
      • 流式处理
      • 并行的数据流
      • 有状态的流处理
      • 数据流API
      • 执行环境
      • Basic Stream functions
      • ETL




学习资源

Scala相关

Scala Basics:https://docs.scala-lang.org/tour/basics.html // 已学习

Flink Exercises (强推)

教程:

  • EG: https://github.com/apache/flink-training/blob/release-1.15/README.md
  • CN: https://github.com/apache/flink-training/blob/release-1.15/README_zh.md
  • Flink Chinese:https://flink.apachecn.org/#/
  • Flink English: https://flink.apache.org/

数据集

  • Data: https://github.com/apache/flink-training/blob/release-1.15/README.md#using-the-taxi-data-streams
  • 数据介绍:
    taxi event

rideId : Long // a unique id for each ride
taxiId : Long // a unique id for each taxi
driverId : Long // a unique id for each driver
isStart : Boolean // TRUE for ride start events, FALSE for ride end events
eventTime : Instant // the timestamp for this event
startLon : Float // the longitude of the ride start location
startLat : Float // the latitude of the ride start location
endLon : Float // the longitude of the ride end location
endLat : Float // the latitude of the ride end location
passengerCnt : Short // number of passengers on the ride

fare event

rideId : Long // a unique id for each ride
taxiId : Long // a unique id for each taxi
driverId : Long // a unique id for each driver
startTime : Instant // the start time for this ride
paymentType : String // CASH or CARD
tip : Float // tip for this ride
tolls : Float // tolls for this ride
totalFare : Float // total fare collected

配置Flink Tutorial所需的环境

  1. 安装Flink:

  • 注意Java版本:必须在11以上
  • 注意Flink版本:没有Web UI可能是Flink的版本太低(1.4没有,1.9实测可用)
  • Windows下推荐使用cygdrive命令行环境
    安装后界面:
    在这里插入图片描述

2.下载Flink Tutorial:
https://github.com/apache/flink-training/tree/release-1.15/

在Win界面下可能会报错【# \r‘:command not found】
在这里插入图片描述
修改换行方式:
https://blog.csdn.net/fangye945a/article/details/120660824
在这里插入图片描述
3. 完善Exercise.scala文件,运行test文件,即可看到结果。
Scala中也可以调用Java的函数:https://docs.scala-lang.org/scala3/book/interacting-with-java.html

Flink Tutorial学习笔记

流式处理

教程链接: https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/learn-flink/overview/

  • Streams are data’s natural habitat.
  • 批处理: ingest the entire dataset before producing any results
  • 流处理:the input may never end, and so you are forced to continuously process the data as it arrives.
    在Flink中,数据流从source中读入,被operator转换,最终流入sink.
  • 一次转换可能包含多个operator.

流可以从消息队列或分布式日志系统中读入,例如:Apache Kafka or Kinesis.但是Flink也可以读入bounded的数据来源。输出同理。
在这里插入图片描述

并行的数据流

Flink程序内在本身就是并行且分布式的。

  • 每一个数据流都有多个stream partition.

  • 每一个operator都有多个operator subtasks,不同操作符的并行级别不一样.

    • The number of operator subtasks is the parallelism of that particular operator. Different operators of the same program may have different levels of parallelism.
    • 在这里插入图片描述
  • One-to-one streams:例如source和map

  • Redistributing streams:

    • 改变了数据流的划分
    • introduce non-determinism regarding the order in which the aggregated results for different keys arrive at the Sink
  • 实时流:可以通过在数据中加入时间戳


有状态的流处理


  • Flink’s operations can be stateful. This means that how one event is handled can depend on the accumulated effect of all the events that came before it.

  • A Flink application is run in parallel on a distributed cluster. The various parallel instances of a given operator will execute independently,in separate threads, and in general will be running on different machines.
    在这里插入图片描述

  • The 3rd operator is stateful.

  • A fully-connected network shuffle is occurring between the second and third operators.

  • This is being done to partition the stream by some key, so that all of the events that need to be processed together, will be.


数据流API

教程链接:https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/learn-flink/datastream_api/

  • 可以流式处理的:
  • basic types, i.e., String, Long, Integer, Boolean, Array
  • composite types: Tuples, POJOs, and Scala case classes

执行环境


  • Streaming applications need to use a StreamExecutionEnvironment.
  • When env.execute() is called the job graph is packaged up and sent to the JobManager, which parallelizes the job and distributes slices of it to the Task Managers for execution.
  • Each parallel slice of your job will be executed in a task slot.
    在这里插入图片描述

Basic Stream functions

1.env.fromCollections:从列表创建

List people = new ArrayList();
people.add(new Person("Fred", 35));
people.add(new Person("Wilma", 35));
people.add(new Person("Pebbles", 2));
DataStream flintstones = env.fromCollection(people);

2.env.socketTextStream/readTextfile 从远程/文件读取

DataStream lines = env.socketTextStream("localhost", 9999);

DataStream lines = env.readTextFile("file:///path");

小结:流主要通过env中的函数读取。

Streams could also be debugged by inserting local breakpoints,etc.

ETL

教程链接:https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/learn-flink/etl/
Flink’s table API:https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/dev/table/overview/

  • map(): only suitable for one-to-one corespondence (全射)
    • for each and every stream element coming in, map() will emit one transformed element.
  • flatmap(): otherwise cases






推荐阅读
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 深入解析JavaScript柯里化的实现机制及其应用场景
    本文深入探讨了JavaScript中柯里化的实现机制及其应用场景。通过详细的示例代码,文章全面解析了柯里化的工作原理和实际应用,为读者提供了宝贵的学习资源,有助于提升编程技能和解决实际开发中的问题。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
author-avatar
手机用户2602901497
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有