Flink入门(一)
Flink是标准得实时流计算框架,比起Spark Streaming得微批处理实现得流计算,Flink才是最原生最标准得实时处理,Flink得文档啊介绍啊啥的网上有的是我就不写了,简单得写一些大数据学习起点必学得项目《WordCount》
此外,既然讲到WordCount,就要说数据分为有界和无界,有界就是读一个确定的文本,wordcount之后程序结束;无界就是源源不断地word输入,没有边界
无界(流计算)
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment import org.apache.flink.api.scala._ object WordCount_Streaming { def main(args: Array[String]): Unit = { // 创建流处理环境 val env = StreamExecutionEnvironment.getExecutionEnvironment
// 设置并行度 env.setParallelism(8) // 接收 socket 文本流 val textDstream = env.socketTextStream("192.168.6.21", 8765) //wordcount val dataStream = textDstream .flatMap(_.split(" ")) .filter(_.nonEmpty) .map((_, 1)) .keyBy(0) .sum(1) dataStream.print() env.execute("Socket stream word count") } }
上述得无界是socket文本流实现得,启动程序之前先将指定机器得socket打开,然后启动程序,然后socket窗格输入文本内容即可(Linux下执行nc -lk 8765即可)
有界
import org.apache.flink.api.scala.{AggregateDataSet, DataSet, ExecutionEnvironment} import org.apache.flink.streaming.api.scala._ object WordCount_Batch { def main(args: Array[String]): Unit = { //创建执行环境 val env = ExecutionEnvironment.getExecutionEnvironment //从文件中读取 val inputPath = "C:\\Users\\IdeaProjects\\" + "flinktestlearn\\src\\main\\resources\\hello.txt" val inputDS: DataSet[String] = env.readTextFile(inputPath) val wordCountDS: AggregateDataSet[(String, Int)] = inputDS .flatMap(_.split(" ")) .map((_, 1)) .groupBy(0) .sum(1) wordCountDS.print() } }
入门得项目主要就是熟悉一下Scala语法,Flink得执行流程,并行度或者任务链等等后面慢慢都会涉及到