Flink1.10从0到1:(三)WordCount

一、开发环境

        语言:Scala_2.11.12

       Apache Flink:1.10

二、开发工具

        官方建议使用 IntelliJ IDEA,因为它默认集成了 Scala和 Maven 环境,使用更加方便,当然使用 Eclipse 也是可以的。开发 Flink 程序时,可以使用 Java、Python 或者 Scala 语言,本人使用 Scala,因为使用 Scala 实现函数式编程会比较简洁。

三、配置依赖

        开发 Flink 应用程序需要最低限度的 API 依赖。最低的依赖库包括:flink-scala 和flink-streaming-scala。大多数应用需要依赖特定的连接器或其他类库,例如 Kafka 的连接器、TableAPI、CEP 库等。这些不是 Flink 核心依赖的一部分,因此必须作为依赖项手动添加到应用程序中。
 
        依赖中有一些spark及其他依赖,可根据自己情况自行选择
  
    UTF-8
    1.8
    1.8
    2.11
    2.4.5
    1.10.0
    2.11
  

  
    
    
      org.apache.spark
      spark-core_${scala.version}
      ${spark.version}
    
    
    
      org.apache.spark
      spark-sql_2.11
      ${spark.version}
    

    
    
      org.apache.spark
      spark-hive_2.11
      ${spark.version}
    
    
    
      mysql
      mysql-connector-java
      5.1.47
    
    
    
      org.apache.spark
      spark-streaming_2.11
      ${spark.version}
    
    
    
      org.apache.spark
      spark-streaming-kafka-0-10_2.11
      ${spark.version}
    
    
      org.apache.kafka
      kafka_2.12
      2.1.0
    
    
      org.apache.kafka
      kafka-clients
      2.1.0
    
    
      org.apache.kafka
      kafka-streams
      2.1.0
    
    
      org.apache.kafka
      kafka-streams-scala_2.11
      2.1.0
    


    
    
      org.apache.flink
      flink-scala_2.11
      ${flink.version}
    

    
    
      org.apache.flink
      flink-core
      ${flink.version}
    
    
      org.apache.flink
      flink-streaming-scala_${scala.binary.version}
      ${flink.version}
    
    
      org.apache.flink
      flink-clients_${scala.binary.version}
      ${flink.version}
    
    
      org.apache.flink
      flink-connector-kafka-0.10_${scala.binary.version}
      ${flink.version}
    
    
      org.apache.flink
      flink-connector-kafka_${scala.binary.version}
      ${flink.version}
    
    
      org.apache.flink
      flink-walkthrough-common_${scala.binary.version}
      ${flink.version}
    



    
    
      redis.clients
      jedis
      3.0.1
    

    
    
      org.scala-lang
      scala-library
      2.11.8
    
    
      org.scala-lang
      scala-compiler
      2.11.8
    
    
      org.scala-lang
      scala-reflect
      2.11.8
    


    
      org.slf4j
      slf4j-log4j12
      1.7.7
      runtime
    
    
      log4j
      log4j
      1.2.17
      runtime
    
    
      net.sf.json-lib
      json-lib
      2.2.2
      jdk15
    
  

  
    
      
      
        org.apache.maven.plugins
        maven-compiler-plugin
        2.0.2
        
          
            compile
            
              compile
            
          
        
      
      
      
        net.alchim31.maven
        scala-maven-plugin
        3.3.2
        
          
            scala-compile-first
            process-resources
            
              add-source
              compile
            
          
          
            scala-test-compile
            process-test-resources
            
              testCompile
            
          
        
      

    
  

四、案例

案例一:基于Flink1.10的流处理WordCount(实时)

Demo:

import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}

/**
 * 测试教程:
 * 在hadoop04上运行 nc -lk 8888 然后打单词即可
 */
object FlinkStreamWordCount {
  def main(args: Array[String]): Unit = {

    //1、初始化流计算环境
    val streamEnv: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    //设置并行度
    streamEnv.setParallelism(12)
    //2、导入隐式转换
    import org.apache.flink.streaming.api.scala._

    //3、读取数据
    val stream: DataStream[String] = streamEnv.socketTextStream("hadoop003", 8888)

    //4、聚会累加算子
    val result: DataStream[(String,Int)] = stream.flatMap(_.split(" "))
      .map((_, 1))
      .keyBy(0) //分组算子 0或者1 代表下标,前面DateStream[String,Int]的下标 0代表单词 1代表出现的次数
      .sum(1) //聚合算子
    //5、打印结果
    result.print("结果")//结果后面的数子表示线程编号
    //6、启动流计算程序
    streamEnv.execute("WordCount")
  }
}

运行结果:Flink1.10从0到1:(三)WordCount_第1张图片

注:

1、服务器要安装软件:yum install nc

2、结果后面的数子为线程编号。

        例如:结果:10> (apache,1) 其中10为线程编号。

案例二:基于Flink1.10的批处理WordCount(离线)

Demo:

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

object FlinkBatchWordCount {
  def main(args: Array[String]): Unit = {
    //初始化flink批处理环境
    val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment

    //使用相对路径获得完整的文件路径
    val datePath: URL= getClass.getResource("/WordCount.txt")

    //flink的DateSet可以类比spark的RDD
    val date: DataSet[String] = env.readTextFile(datePath.getPath)

    date.flatMap(_.split(" "))
      .map((_,1))
      .groupBy(0)
      .sum(1)
      .print()

  }
}

结果:

Flink1.10从0到1:(三)WordCount_第2张图片

 

感悟:

        劳动一日,可得一夜的安眠;勤劳一生,可得幸福的长眠。

 

 

 

 

 

你可能感兴趣的:(Flink)