二、基本操作

1、入门案例

(1)批处理wordcount--DataSet

val env = ExecutionEnvironment.getExecutionEnvironment

// 从文件中读取数据

val inputPath = "D:\\Projects\\BigData\\TestWC1\\src\\main\\resources\\hello.txt"

val inputDS: DataSet[String] = env.readTextFile(inputPath)

// 分词之后,对单词进行groupby分组,然后用sum进行聚合

val wordCountDS: AggregateDataSet[(String, Int)] = inputDS.flatMap(_.split(" ")).map((_, 1)).groupBy(0).sum(1)

// 打印输出

wordCountDS.print()

(2)流处理wordcount--DataStream

object StreamWordCount {

def main(args: Array[String]): Unit = {

// 从外部命令中获取参数

val params: ParameterTool =  ParameterTool.fromArgs(args)

val host: String = params.get("host")

val port: Int = params.getInt("port")

// 创建流处理环境

val env = StreamExecutionEnvironment.getExecutionEnvironment

// 接收socket文本流

val textDstream: DataStream[String] = env.socketTextStream(host, port)

// flatMap和Map需要引用的隐式转换

import org.apache.flink.api.scala._

val dataStream: DataStream[(String, Int)] = textDstream.flatMap(_.split("\\s")).filter(_.nonEmpty).map((_, 1)).keyBy(0).sum(1)

dataStream.print().setParallelism(1)

// 启动executor,执行任务

env.execute("Socket stream word count")

}

}

2、Environment创建

getExecutionEnvironment,客户端,当前执行程序的上下文

createLocalEnvironment:返回本地执行环境

createRemoteEnvironment:集群执行环境,需要指定ip、端口及jar包

3、Source读取

(1)从集合读取数据:env.fromCollection(List(SensorReading("sensor_1 ",15477181 99,35.8),SensorReading("sensor_6",1547718201,15.4))

(2)从文件读取数据:valstream2=env.readTextFile("YOUR_FILE_PATH")

(3)以kafka消息队列的数据作为来源:valstream3=env.addSource(newFlinkKafkaConsumer 011[String]("sensor",newSimpleStringSchema(),properties))

(4)自定义Source:valstream4=env.addSource(newMySensorSource()

4、Transform算子

Map:DataStream → DataStream,输入一个参数产生一个参数,map的功能是对输入的参数进行转换操作。

flatMap:flatMap(List(1,2,3))(i⇒List(i,i))变成112233自动加逗号

Filter:过滤掉指定条件的数据。

KeyBy:按照指定的key进行分组,流拆分成不相交的分区。

Reduce:合并当前的元素和上次聚合的结果,用来进行结果汇总合并。

Window:窗口函数,根据某些特性将每个key的数据进行分组(例如:在5s内到达的数据)

滚动聚合算子(RollingAggregation):sum()、min()、max()、minBy()、maxBy()针对每个支流聚合Split和Select:拆分和获取指定的流

Connect(放在同一个流中)和CoMap(组合成一个流)

Union:产生一个包含所有DataStream元素的新DataStream

Connect只能操作两个流,Union可以操作多个。

5、常见的数据类型

env.fromElements(XXXX)

(1)基础数据类型

(2)Java和Scala元组(Tuples)

(3)Scala样例类(caseclasses)

(4)Java简单对象(POJOs)

(5)其它(Arrays,Lists,Maps,Enums,等等)

6、UDF-更细粒度的控制流

函数类(Function Classes):实现MapFunction,FilterFunction,ProcessFunction接口

匿名函数(Lambda Functions)

富函数(Rich Functions):函数类的接口,所有Flink函数类都有其Rich版本,自带一系列生命周期方法(开关、得到上下文),可以实现复杂功能

7、sink操作

(1)使用

没有spark中的forEach方法,需要通过stream.addSink(newMySink(xxxx))完成任务最终输出

(2)举例

kafka:union.addSink(new FlinkKafkaProducer011[String]("localhost:9092", "test", new Simple StringSchema()))

redis:dataStream.addSink(newRedisSink[SensorReading](conf,newMyRedisMapper))

Elasticsearch:dataStream.addSink( esSinkBuilder.build() )

自定义sink:dataStream.addSink(newMyJdbcSink())

【大数据面试】Flink 02 基本操作:入门案例、Env、Source、Transform、数据类型、UDF、Sink的更多相关文章

  1. 03 Mybatis:01.Mybatis课程介绍及环境搭建&&02.Mybatis入门案例

    mybatis框架共四天第一天:mybatis入门 mybatis的概述 mybatis的环境搭建 mybatis入门案例 -------------------------------------- ...

  2. 面试系列二:精选大数据面试真题JVM专项-附答案详细解析

    公众号(五分钟学大数据)已推出大数据面试系列文章-五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂! 大数据笔面试系列文章分为两种类型: ...

  3. 大数据学习(02)——HDFS入门

    Hadoop模块 提到大数据,Hadoop是一个绕不开的话题,我们来看看Hadoop本身包含哪些模块. Common是基础模块,这个是必须用的.剩下常用的就是HDFS和YARN. MapReduce现 ...

  4. 大数据学习之Hadoop快速入门

    1.Hadoop生态概况 Hadoop是一个由Apache基金会所开发的分布式系统集成架构,用户可以在不了解分布式底层细节情况下,开发分布式程序,充分利用集群的威力来进行高速运算与存储,具有可靠.高效 ...

  5. 大数据入门第二十天——scala入门(一)入门与配置

    一.概述 1.什么是scala  Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性.Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序. ...

  6. hadoop大数据平台安全基础知识入门

    概述 以 Hortonworks Data Platform (HDP) 平台为例 ,hadoop大数据平台的安全机制包括以下两个方面: 身份认证 即核实一个使用者的真实身份,一个使用者来使用大数据引 ...

  7. 大数据入门第二十天——scala入门(二)scala基础02

    一. 类.对象.继承.特质 1.类 Scala的类与Java.C++的类比起来更简洁 定义: package com.jiangbei //在Scala中,类并不用声明为public. //Scala ...

  8. [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.

    给定一个数组,求和为定值的所有组合, 这道算法题在leetcode应该算是中等偏下难度, 对三到五年工作经验主要做业务开发的同学来说, 一般较难的也就是这种程度了. 简述经过: 不算hr面,总计四面, ...

  9. Hadoop大数据面试--Hadoop篇

    本篇大部分内容參考网上,当中性能部分參考:http://blog.cloudera.com/blog/2009/12/7-tips-for-improving-mapreduce-performanc ...

  10. 大数据基础Hadoop 2.x入门

    hadoop概述 存储和分析网络数据 三大组件 MapReduce 对海量数据的处理 思想: 分而治之 每个数据集进行逻辑业务处理map 合并统计数据结果reduce HDFS 储存海量数据 分布式存 ...

随机推荐

  1. 使用pip的方式安装docker-compose

    # 国内开启pip 下载加速:http://mirrors.aliyun.com/help/pypi mkdir ~/.pip/ cat > ~/.pip/pip.conf <<'E ...

  2. iOS Social和Accounts简单使用

    ACAccountStore *account = [[ACAccountStore alloc] init]; ACAccountType *type = [account accountTypeW ...

  3. 糟了,线上服务出现OOM了

    前言 前一段时间,公司同事的一个线上服务OOM的问题,我觉得挺有意思的,在这里跟大家一起分享一下. 我当时其实也参与了一部分问题的定位. 1 案发现场 他们有个mq消费者服务,在某一天下午,出现OOM ...

  4. 浅谈MySQL、Hadoop、BigTable、Clickhouse数据读写机制

    个人理解,欢迎指正 数据库 引擎 写数据 读数据 补充 MySql InnoDB:支持事务,高速读写性能一般 Myisam:不支持事务,高速读写性能好 以InnoDB更新一条记录为例 1.B+Tree ...

  5. vulnhub靶场之RED: 1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:RED: 1,地址我这里设置的桥接,,下载地址:https://download.vulnhub.com/red/Red.ova,下载后直接Vi ...

  6. MYSQL创建分区时候报错

    第一种:ERROR 1064 (42000): Partitioning can not be used stand-alone in query near  不能单独创建分区.创建分区时要创建分区表 ...

  7. 第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号

    文章目录 1.注册微信小程序账号 1.1 小程序的注册流程 1.2 登录小程序账号 2.下载微信小程序开发者平台 3.新建一个小程序 3.1 点击加号 3.2 填写项目目录和小程序ID 3.3 点击确 ...

  8. python视频与帧图片的相互转化,以及查看视频分辨率

    1.拆分视频为帧图片 import cv2 def video2frame(videos_path,frames_save_path,time_interval): vidcap = cv2.Vide ...

  9. MySQL 索引失效-模糊查询,最左匹配原则,OR条件等。

    索引失效 介绍 索引失效就是我们明明在查询时的条件为索引列(包括自己新建的索引),但是索引不能起效,走的是全表扫描.explain 后可查看type=ALL. 这是为什么呢? 首先介绍有以下几种情况索 ...

  10. 每日算法3:随机生成五个不同整数,将数字转换为RMB格式

    随机生成五个不同整数 点击查看代码 /* 题目解析: 1.采用Math对象的random()方法, 2.将每次生成的数跟之前的数判断相等则此次生成无效i-- */ function randomNum ...