一、简单测试环境
//测试flink的批处理环境
//1-> 引入环境
val env = ExecutionEnvironment.getExecutionEnvironment
//2-> 读文件
val value = env.readTextFile("data/text")
//3-> scala打印数据
value.println()
text文件内容:
二、以wordcount为例,测试flink批处理环境
import org.apache.flink.api.scala._ //导入隐式表达式
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
object wordcount_flink {
def main(args: Array[String]): Unit = {
//测试flink的批处理环境
//1-> 引入环境
val env = ExecutionEnvironment.getExecutionEnvironment
//2-> 读文件
val value = env.readTextFile("data/text")
//3-> 做wordcount
value
//拆分单词,以空格进行分割
.flatMap(_.split(" "))
//对拆分后的每个单词进行map操作,将其映射为一个元组。
//元组中第一个元素是单词,第二个元素是1(表示该单词出现一次)。
.map((_,1))
//按照元组的第一个元素(即单词)进行分组。
.groupBy(0)
//对每个组的第二个元素(即1,下标)进行求和,从而得到每个单词的总出现次数。
.sum(1)
//打印数据
.print()
}
}
三、以wordcount为例,测试flink流式处理环境
step1: IDEA中编写scala代码
//导入隐式表达式
import org.apache.flink.api.scala._
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
object wordcount_flink {
def main(args: Array[String]): Unit = {
//1-> 引入流环境
val env1 = StreamExecutionEnvironment.getExecutionEnvironment
//设置并行度为1
env1.setParallelism(1)
//2-> 读socket数据,模拟流式数据
val value1 = env1.socketTextStream("localhost", 1234) //1234为端口号
value1
.flatMap(_.split(","))
.map((_,1))
.keyBy(_._1) //流处理里面没有groupBy只有keyBy,效果一样,都是分组的意思
.sum(1)
.print()
//在这里设置并行度为1,只是最后打印的并行度为1,前面的计算依然是多核分布式的
// .setParallelism(1)
//多加一句启动流式环境代码
env1.execute()
}
}
step2: 下载安装netcat
netcat 1.11 for Win32/Win64
在网站下下载netcat 1.12。
*下载前先把病毒与威胁实时保护、防火墙等关闭(参见上篇帖子)
step3: 将压缩包解压至合适路径,在环境变量(系统变量Path)中添加该路径。
step4: 运行之前写的scala代码,打开cmd,输入:nc -l -p 1234,出现如下示例即为连接成功。
*若右下角出现安全提示,点击信任
step5: 在cmd中输入数据,以“,”分隔,如下图,数据传输成功。