第二章 flink安装启动,完成批处理、流处理任务

2.1 搭建 maven 工程 FlinkTutorial
2.1.1 pom 文件


    4.0.0

    com.atguigu
    FlinkTutorial
    1.0-SNAPSHOT
    
        
            org.apache.flink
            flink-scala_2.12
            1.10.1
        
        
        
            org.apache.flink
            flink-streaming-scala_2.12
            1.10.1
        
        
            org.apache.flink
            flink-connector-kafka-0.11_2.12
            1.10.1
        
        
            org.apache.bahir
            flink-connector-redis_2.11
            1.0
            
                
                    org.apache.flink
                    flink-streaming-java_2.11
                
            
        
        
            org.apache.flink
            flink-connector-elasticsearch6_2.12
            1.10.1
        
        
            mysql
            mysql-connector-java
            5.1.44
        
        
            org.apache.flink
            flink-statebackend-rocksdb_2.12
            1.10.1
        
        
            org.apache.flink
            flink-table-planner_2.12
            1.10.1
        
        
            org.apache.flink
            flink-table-planner-blink_2.12
            1.10.1
        
        
            org.apache.flink
            flink-csv
            1.10.1
        
        
            org.apache.flink
            flink-json
            1.10.1
        
    

    
        
            
            
                net.alchim31.maven
                scala-maven-plugin
                4.4.0
                
                    
                        
                        
                            compile
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-assembly-plugin
                3.3.0
                
                    
                        jar-with-dependencies
                    
                
                
                    
                        make-assembly
                        package
                        
                            single
                        
                    
                
            
        
    
 
 
2.1.2 添加 scala 框架 和 scala 文件夹

第二章 flink安装启动,完成批处理、流处理任务_第1张图片

2.2 批处理 wordcount
package com.atguigu.wc

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

/**
  * Copyright (c) 2018-2028 尚硅谷 All Rights Reserved 
  *
  * Project: FlinkTutorial
  * Package: com.atguigu.wc
  * Version: 1.0
  *
  * Created by wushengran on 2020/8/4 11:38
  */

// 批处理的word count
object WordCount {
  def main(args: Array[String]): Unit = {
    // 创建一个批处理的执行环境
    val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment

    // 从文件中读取数据
    val inputPath: String = "D:\\Projects\\BigData\\FlinkTutorial\\src\\main\\resources\\hello.txt"
    val inputDataSet: DataSet[String] = env.readTextFile(inputPath)

    // 对数据进行转换处理统计,先分词,再按照word进行分组,最后进行聚合统计
    val resultDataSet: DataSet[(String, Int)] = inputDataSet
      .flatMap(_.split(" "))
      .map((_, 1))
      .groupBy(0)    // 以第一个元素作为key,进行分组
      .sum(1)    // 对所有数据的第二个元素求和

    // 打印输出
    resultDataSet.print()
  }
}
注意: Flink 程序支持 java scala 两种语言,本课程中以 scala 语言为主。在
引入包中,有 java scala 两种包时注意要使用 scala 的包。
 
2.3 流处理 wordcount
package com.atguigu.wc

import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.streaming.api.scala._

/**
  * Copyright (c) 2018-2028 尚硅谷 All Rights Reserved 
  *
  * Project: FlinkTutorial
  * Package: com.atguigu.wc
  * Version: 1.0
  *
  * Created by wushengran on 2020/8/4 14:05
  */
// 流处理word count
object StreamWordCount {
  def main(args: Array[String]): Unit = {
    // 创建流处理的执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
//    env.setParallelism(8)
//    env.disableOperatorChaining()

    // 从外部命令中提取参数,作为socket主机名和端口号
    val paramTool: ParameterTool = ParameterTool.fromArgs(args)
    val host: String = paramTool.get("host")
    val port: Int = paramTool.getInt("port")

    // 接收一个socket文本流
    val inputDataStream: DataStream[String] = env.socketTextStream(host, port)
    // 进行转化处理统计
    val resultDataStream: DataStream[(String, Int)] = inputDataStream
      .flatMap(_.split(" "))
      .filter(_.nonEmpty)
      .map((_, 1))
      .keyBy(0)
      .sum(1)

    resultDataStream.print().setParallelism(1)

    // 启动任务执行
    env.execute("stream word count")
  }
}
测试——在 linux 系统中用 netcat 命令进行发送测试。
nc -lk 7777

你可能感兴趣的:(flink,flink,hadoop,大数据)