flink

初学大数据不知从何入手?总结十章大数据学习指南(建议收藏)

醉酒当歌 提交于 2020-02-04 00:24:43
近三年,大数据这个词出现的频次非常高,不仅纳入各大互联网巨头公司的战略规划中,同时也在国家的政府报告中多次提及,大数据已无疑成为当今时代的新宠。大数据给大多数人的感觉是,专业性强,门槛高,完全属于“高大上”的技术。好奇的人或许会通过网络了解一些概念,而有一些人则看到了大数据带来的机遇,投入大数据学习的洪流当中,投身大数据行业为自己带来利益。经历“坎坷”的学习大数据历程后,在求学之路上有哪些具体 容易掉入的“坑”? 让我们一一盘点下。 ​ 1 在这里相信有许多想要学习大数据的同学,大家可以+下大数据学习裙:740041381,即可免费领取套系统的大数据学习教程 我们一起经历的那些坑 大多的初学者在入门初期,基本是在网上各种社区“大海捞针”的到处 知乎、百度: “大数据学习路径是怎么样的?” “学生党,会java,只有一台电脑!!如何学习大数据开发?” “ 语言是学R还是Python?” “我没时间有没钱,自学能学的会吗?” “现在大数据开发挺火的,谁知道大数据开发学习机构哪家靠谱?” “零基础学习大数据,想成为大数据开发工程师,请问该如何入门,有没有推荐网络教程,书籍或者大牛博客?” 自学过程中走过很多弯路,比如环境搭建,总会遇到各种奇葩问题,找不到答案;比如网上扑来各种资料不知道怎么分辨质量,也不知道如何科学利用,很痛苦又很困惑,毫无一点成就感,走了许多冤枉路,踩坑无数…… 第一

Flink入门-应用

心已入冬 提交于 2020-02-02 10:53:38
Apache Flink 是一个针对无界和有界数据流进行有状态计算的框架。Flink自低向上在不同的抽象级别提供API,并且针对常见的使用场景开发了专门的扩展库。 在本篇博客中主要Flink中提供的简单易用的,易于表达的API和库 流处理应用的基本组件 可以由流处理框架构建和执行的应用程序类型是由框架对流、状态、时间的支持程度来决定的。在下文中我们将对上述这些流处理应用的节本组件逐一进行细致剖析。 流 显而易见(数据)流是流处理的基本要素。然而,流也拥有这多中特性。这些特性决定了流如何及合适被处理。Flink是一个能够处理任何类型流的强大处理框架。 – 有界和无界 的数据流:流可以是无界的;也可以是有界的。例如固定大小的数据集。Flink在无界的数据流处理上拥有诸多功能强大的特点,同时也针对有界数据流开发了专门的高效算子。 – 实时和历史记录 的数据流:所有的数据都是以流的方式产生,但用户通常会使用两种截然不同的方法处理数据。或是在数据生成时进行实时的处理。亦或是先将数据流持久化到存储系统中–例如文件系统或对象存储,然后再进行批处理。Flink的应用能能够同时支持处理实时以及历史记录数据流。 状态 只有在每一个单独的事件上进行转换操作的应用才不需要状态,换言之,每个具有一定复杂度的流处理应用都是有状态的。任何运行基本业务逻辑的流处理应用都需要在一定时间内存储所接收的事件或中间结果

Flink的CheckPoint

你离开我真会死。 提交于 2020-02-02 09:52:50
Checkpoint Flink容错机制的核心就是持续创建分布式数据流及其状态的一致快照。Flink的checkpoint是通过分布式快照实现的, 所以在flink中这两个词是一个意思。 checkpoint用来保证任务的错误恢复。任务失败可以从最新的checkpoint恢复。 checkpoint机制需要一个可靠的可以回放数据的数据源(kafka,RabbitMQ,HDFS...)和一个存放state的持久存储(hdfs,S3) 1、checkpointConfig 通过调用StreamExecutionEnvironment.enableCheckpointing(internal,mode) 启用checkpoint 。 internal 默认是 -1,表示checkpoint不开启,mode默认是EXACTLY_ONCE模式。 可设置checkpoint timeout,超过这个时间 checkpoint 没有成功,checkpoint 终止。默认 10分钟。 可设置 chekpoint 失败任务是否任务也失败,默认是true 可设置同时进行的checkpoint数量,默认是1. 2、barrier 将barrier插入到数据流中,作为数据流的一部分和数据一起向下流动。Barrier不会干扰正常数据,数据流严格有序。 一个barrier把数据流分割成两部分

Flink之ProcessFunction API(底层API)

浪尽此生 提交于 2020-02-02 00:30:44
一、产生背景 转换算子是无法访问事件的时间戳信息和水位线信息的。而这在一些应用场景下,极为重要。例如MapFunction这样的map转换算子就无法访问时间戳或者当前事件的事件时间。 基于此,DataStream API提供了一系列的Low-Level转换算子。可以访问时间戳、watermark以及注册定时事件。还可以输出特定的一些事件,例如超时事件等。Process Function用来构建事件驱动的应用以及实现自定义的业务逻辑(使用之前的window函数和转换算子无法实现)。例如,Flink SQL就是使用Process Function实现的。 Flink提供了8个Process Function: ProcessFunction dataStream KeyedProcessFunction 用于KeyedStream,keyBy之后的流处理 CoProcessFunction 用于connect连接的流 ProcessJoinFunction 用于join流操作 BroadcastProcessFunction 用于广播 KeyedBroadcastProcessFunction keyBy之后的广播 ProcessWindowFunction 窗口增量聚合 ProcessAllWindowFunction 全窗口聚合 二、KeyedProcessFunction 2.1

「Flink」使用Managed Keyed State实现计数窗口功能

流过昼夜 提交于 2020-02-01 00:56:42
先上代码: public class WordCountKeyedState { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 初始化测试单词数据流 DataStreamSource<String> lineDS = env.addSource(new RichSourceFunction<String>() { private boolean isCanaled = false; @Override public void run(SourceContext<String> ctx) throws Exception { while(!isCanaled) { ctx.collect("hadoop flink spark"); Thread.sleep(1000); } } @Override public void cancel() { isCanaled = true; } }); // 切割单词,并转换为元组 SingleOutputStreamOperator<Tuple2<String, Integer>>

Flink 1.9 Table API & SQL 2

橙三吉。 提交于 2020-01-31 22:49:05
Flink 1.9 Table API & SQL 2 Table API是用于流和批处理的统一关系的API,以下为对同一种需求的三种简单的不同使用形式 需求:求每个用户的订单总额 1.使用tableEnv.registerTableSource()进行表的注册 import org.apache.flink.api.common.typeinfo.{TypeInformation, Types} import org.apache.flink.table.api.scala._ import org.apache.flink.streaming.api.scala.{ StreamExecutionEnvironment} import org.apache.flink.table.api.{EnvironmentSettings} import org.apache.flink.table.descriptors.{FileSystem, OldCsv, Schema} import org.apache.flink.types.Row object FlinkTableSQL { def main(args: Array[String]): Unit = { val fsSettings = EnvironmentSettings.newInstance()

Flink之流处理API之Transform

醉酒当歌 提交于 2020-01-31 11:14:26
Transform 转换算子 1、 m ap val streamMap = stream.map { x => x * 2 } 2、f latMap val streamFlatMap = stream.flatMap{ x => x.split(" ") } 3、Filter val streamFilter = stream.filter{ x => x != null } 4、KeyBy DataStream - -> KeyedStream :输入必须是Tuple类型,逻辑地将一个流拆分成不相交的分区,每个分区包含具有相同key的元素,在内部以hash的形式实现的。 5、Reduce KeyedStream --> DataStream :一个分组数据流的聚合操作,合并当前的元素和上次聚合的结果,产生一个新的值,返回的流中包含每一次聚合的结果,而不是只返回最后一次聚合的最终结果。 package com.lxk.service import com.alibaba.fastjson.JSON import com.lxk.bean.UserLog import com.lxk.util.FlinkKafkaUtil import org.apache.flink.api.java.tuple.Tuple import org.apache.flink.api.scala.

Apache 流框架Flink简介

烈酒焚心 提交于 2020-01-29 10:57:11
1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意。Flink是原生的流处理系统,提供high level的API。Flink也提供 API来像Spark一样进行批处理,但两者处理的基础是完全不同的。Flink把批处理当作流处理中的一种特殊情况。在Flink中,所有 的数据都看作流,是一种很好的抽象,因为这更接近于现实世界。 在国外一些社区,有很多人将大数据的计算引擎分成了 4 代,当然,也有很多人不会认同。首先第一代的计算引擎,无疑就是 Hadoop 承载的 MapReduce。这里大家应该都不会对 MapReduce 陌生,它将计算分为两个阶段,分别为 Map 和 Reduce。对于上层应用来说,就不得不想方设法去拆分算法,甚至于不得不在上层应用实现多个 Job 的串联,以完成一个完整的算法,例如迭代计算。由于这样的弊端,催生了支持 DAG 框架的产生。因此,支持 DAG 的框架被划分为第二代计算引擎。如 Tez 以及更上层的 Oozie。这里我们不去细究各种 DAG 实现之间的区别,不过对于当时的 Tez 和 Oozie 来说,大多还是批处理的任务。接下来就是以 Spark 为代表的第三代的计算引擎。第三代计算引擎的特点主要是 Job 内部的 DAG 支持(不跨越Job),以及强调的实时计算。在这里

(三)flink的DataSet:分布式缓存

南笙酒味 提交于 2020-01-29 03:27:18
Flink提供了类似于Apache Hadoop的分布式缓存,可以让并行用户函数实例本地化的访问文件。此功能可用 于共享包含静态外部数据(如字典或机器学习的回归模型)的文件 工作方式如下:程序将本地或远程文件系统(如HDFS或S3)的文件或目录作为缓存文件注册到 ExecutionEnvironment中的特定名称下。当程序执行时,Flink自动将文件或目录复制到所有worker的本地文 件系统。用户函数可以查找指定名称下的文件或目录,并从worker的本地文件系统访问它 package batch ; import org.apache.commons.io.FileUtils ; import org.apache.flink.api.common.functions.RichMapFunction ; import org.apache.flink.api.java.DataSet ; import org.apache.flink.api.java.ExecutionEnvironment ; import org.apache.flink.api.java.tuple.Tuple2 ; import org.apache.flink.configuration.Configuration ; import java.io.File ; import java.util

flink源码解读--1 命令行提交

丶灬走出姿态 提交于 2020-01-28 21:32:01
1 提交自己打包的流job ./bin/flink run -c com.tclking.ai.PVUVDayMain -m yarn-cluster examples/batch/WordCount.jar 2 flink 脚本内容: target="$0" iteration=0 # 判断脚本名合法性 while [ -L "$target" ]; do if [ "$iteration" -gt 100 ]; then echo "Cannot resolve path: You have a cyclic symlink in $target." break fi ls=`ls -ld -- "$target"` target=`expr "$ls" : '.* -> \(.*\)$'` iteration=$((iteration + 1)) done # 获取当前脚本的上一层路径 bin=`dirname "$target"` # get flink config . "$bin"/config.sh if [ "$FLINK_IDENT_STRING" = "" ]; then FLINK_IDENT_STRING="$USER" fi CC_CLASSPATH=`constructFlinkClassPath` log=$FLINK_LOG_DIR/flink-