大数据学习(32)—— IDEA开发flink
我懒得去在linux虚机上搭建集群版了,这种网上一搜一大堆。直接弄个localhost的,在IDEA上跑一跑吧。
使用flink的场景,一般都是处理无界流,服务一旦启动,就不关闭了。我们来模拟一个接受无限输入单词的wordcount。
pom文件的主要内容如下,关注标红的部分就行。
2.11.0 2.11 1.6.1 scala-tools.org Scala-Tools Maven2 Repository http://scala-tools.org/repo-releases scala-tools.org Scala-Tools Maven2 Repository http://scala-tools.org/repo-releases org.scala-lang scala-library ${scala.version} junit junit 4.4 test org.specs specs 1.2.5 test org.apache.flink flink-scala_${scala.binary.version} ${flink.version} org.apache.flink flink-streaming-scala_${scala.binary.version} ${flink.version} org.apache.flink flink-table_${scala.binary.version} ${flink.version} org.apache.flink flink-clients_${scala.binary.version} ${flink.version}
来吧,scala整个wordcount,逻辑非常简单。跟spark的RDD API类似,这两个技术有很多语法是相近的。
步骤大概是这么几步:
- 创建evn,设置参数
- source
- transform
- sink
- 运行
object WordCount { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment import org.apache.flink.streaming.api.scala._ env.setParallelism(1) val ds = env.socketTextStream("localhost",6666) val rs = ds.flatMap(_.split(" ")).map((_,1)).keyBy(0).sum(1) rs.print().setParallelism(2) env.execute("wordcount") } }
用windows的cmd命令,打开一个监听端口,发送数据,再启动程序。
C:\Users\localhost>nc -L -t -p 6666
thank you
are you ok
hello
thank you
thank you very much
hello
thank you
thank you very much
how are you indian mi fans
来看看两个输出线程在控制台打印了啥。
2> (you,1) 1> (thank,1) 1> (are,1) 2> (you,2) 1> (ok,1) 2> (hello,1) 2> (you,3) 1> (thank,2) 2> (you,4) 2> (much,1) 1> (thank,3) 1> (very,1) 1> (hello,2) 2> (thank,4) 1> (you,5) 2> (thank,5) 2> (very,2) 1> (you,6) 1> (much,2) 2> (how,1) 1> (are,2) 1> (indian,1) 2> (you,7) 1> (fans,1) 2> (mi,1)
从打印结果来看,确实是来一条处理一条,每个切分出来的单词都有状态,知道上次是多少个。但一条记录之间的单词没有固定的输出顺序,是并行打印的。
这是flink基本应用,要学的东西还多着,官网有很不错的文档资料。如果确实需要用到flink,建议深入学习。