Flink(二)Flink 快速入门案例

1. Flink  的开发环境

我们这里Flink 选择的是 Apache Flink 1.9.1 版本,是目前最新的稳定版本,并且兼容性比较好。下载地址:

https://flink.apache.org/zh/downloads.html

1) 开发工具

先说明一下开发工具的问题。官方建议使用 IntelliJ IDEA,因为它默认集成了 Scala和 Maven 环境,使用更加方便,当然使用 Eclipse 也是可以的。我们这门课使用 IDEA。开发 Flink 程序时,可以使用 Java、Python 或者 Scala 语言,本课程全部使用 Scala,因为使用 Scala 实现函数式编程会比较简洁。学生可以在课后自己补充 JAVA 代码。

2) 配置依赖

开发 Flink 应用程序需要最低限度的 API 依赖。最低的依赖库包括:flink-scala 和flink-streaming-scala。大多数应用需要依赖特定的连接器或其他类库,例如 Kafka 的连接器、TableAPI、CEP 库等。这些不是 Flink 核心依赖的一部分,因此必须作为依赖项手动添加到应用程序中。

<dependency>
	<groupId>org.apache.flink</groupId>
	<artifactId>flink-scala_2.11</artifactId>
	<version>1.9.1</version>
</dependency>
<dependency>
	<groupId>org.apache.flink</groupId>
	<artifactId>flink-streaming-scala_2.11</artifactId>
	<version>1.9.1</version>
</dependency>

<build>
	<plugins>
		<!-- 该插件用于将Scala代码编译成class文件 -->
		<plugin>
			<groupId>net.alchim31.maven</groupId>
			<artifactId>scala-maven-plugin</artifactId>
			<version>3.4.6</version>
			<executions>
				<execution>
					<!-- 声明绑定到maven的compile阶段 -->
					<goals>
						<goal>testCompile</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-assembly-plugin</artifactId>
			<version>3.0.0</version>
			<configuration>
				<descriptorRefs>
					<descriptorRef>jar-with-dependencies</descriptorRef>
				</descriptorRefs>
			</configuration>
			<executions>
				<execution>
					<id>make-assembly</id>
					<phase>package</phase>
					<goals>
						<goal>single</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

2.  第一个 Flink  流处理(Streaming )案例

创建项目,并且修改源代码目录为 scala

案例需求:采用 Netcat 数据源发送数据,使用 Flink 统计每个单词的数量。

package com.bjsxt.flink
import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}
//基于流计算的WordCount案例
object StreamWordCount {
	def main(args: Array[String]): Unit = {
		//初始化Flink的Streaming(流计算)上下文执行环境
		val streamEnv: StreamExecutionEnvironment =
		StreamExecutionEnvironment.getExecutionEnvironment
		//导入隐式转换,建议写在这里,可以防止IDEA代码提示出错的问题
		import org.apache.flink.streaming.api.scala._
		//读取数据
		val stream: DataStream[String] = streamEnv.socketTextStream("hadoop101",8888)
		//转换计算
		val result: DataStream[(String, Int)] = stream.flatMap(_.split(","))
			.map((_, 1))
			.keyBy(0)
			.sum(1)
		//打印结果到控制台
		result.print()
		//启动流式处理,如果没有该行代码上面的程序不会运行
		streamEnv.execute("wordcount")
	}
}

在 Linux 系统中使用 nc 命令发送数据测试

nc -lk 8888

3.  第一个 Flink  批处理(Batch )案例

需求:读取本地数据文件,统计文件中每个单词出现的次数。

根据需求,很明显是有界流(批计算),所以采用另外一个上下文环境:ExecutionEnvironment

package com.bjsxt.flink
import java.net.URL
import org.apache.flink.api.scala.ExecutionEnvironment
object BatchWordCount {
	def main(args: Array[String]): Unit = {
		//初始化flink的环境
		val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
		//导入隐式转换,建议写在这里,可以防止IDEA代码提示出错的问题
		import org.apache.flink.api.scala._
		//读取数据
		val dataURL = getClass.getResource("/wc.txt")//wc.txt文件在main目录下的resources中
		val data: DataSet[String] = env.readTextFile(dataURL.getPath)
		//计算
		val result: AggregateDataSet[(String, Int)] = data.flatMap(_.split(" "))
			.map((_, 1))
			.groupBy(0) //其中0代表元组中的下标,“0”下标代表:单词
			.sum(1) //其中1代表元组中的下标,“1”下标代表:单词出现的次数
		//打印结果
		result.print()
	}
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plenilune-望月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值