大数据——Flink 入门程序(wordcount)

该博客介绍了Apache Flink的编程模型,包括DataSet的批处理和DataStream的流式计算。通过创建执行环境、加载数据源、转换数据和设置结果输出,详细展示了如何实现WordCount的本地和虚拟机执行。此外,还提供了离线和实时WordCount的Scala代码示例。

目录

 一、编程模型

二、编程步骤

三、DataStream 实时 wordcount

​四、DataSet 离线wordcount


 一、编程模型

Flink提供了不同级别的编程抽象,通过调用抽象的数据集调用算子构建DataFlow就可以实现对分布式的数据进行流式计算和离线计算,DataSet是批处理的抽象数据集,DataStream是流式计算的抽象数据集,他们的方法都分别为Source、Transformation、Sink

  • Source主要负责数据的读取
  • Transformation主要负责对数据的转换操作
  • Sink负责最终计算好的结果数据输出。

二、编程步骤

  • 创建执行环境 Environment
  • 加载数据源 Source
  • 转换数据 Transformation
  • 数据输出
  • 执行程序

三、DataStream 实时 wordcount

3.1 本地执行

package cn.kgc.datasteam

//创建完执行环境后,将StreamExcutionEnvironment替换成_
import org.apache.flink.streaming.api.scala._

object WordCount {
  def main(args: Array[String]): Unit = {
    //创建执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    //设置并行度为2,默认为本地core核数
    env.setParallelism(2)

    //读取数据 source
    //通过侦听hadoop101的1234端口采集数据
    val inputStream = env.socketTextStream("hadoop101", 1234)

    //转换数据 transformation
    //将接收到的内容按空格拆分后展平
    val result = inputStream.flatMap(_.split(" "))
      .map((_, 1))
      //根据单词分组聚合
      .keyBy(_._1)
      .sum(1)

    //结果输出
    result.print()

    //执行程序
    env.execute()
  }
}

3.2上传至虚拟机执行代码

package cn.kgc.datasteam

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

object WordCountRunOnVM {
  def main(args: Array[String]): Unit = {
    //创建执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment

    //通过参数的方式传入host主机名和port端口号
    val tool = ParameterTool.fromArgs(args)
    val host = tool.get("host")
    val port = tool.getInt("port")

    //读取数据源
    val inputStream = env.socketTextStream(host, port)
    
    //转换数据
    val result = inputStream.flatMap(_.split(" "))
      .map((_, 1))
      .keyBy(_._1)
      .sum(1)
    
    //结果输出
    result.print()
    
    //执行程序
    env.execute()
  }
}

操作步骤

1. 生成 jar 包

 2. 在虚拟机中启动start-cluser.sh服务

start-cluster.sh

3. 开启1234端口侦听

nc -lk 1234

4.  登录master:8081页面,上传 jar 包

 

四、DataSet 离线wordcount

package cn.kgc.dataset

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

object WordCount {
  def main(args: Array[String]): Unit = {
    //DataSet批处理创建环境的方式 : ExecutionEnvironment.gerExecutionEnvironment
    val env = ExecutionEnvironment.getExecutionEnvironment

    //获取数据源
    val input = env.readTextFile("C:/Users/Administrator/Desktop/flink_project/src/main/resources/wc.txt",
      "UTF-8")

    //转换数据
    val result = input.flatMap(_.split(" "))
      .map((_, 1))
      //根据单词分组聚合
      .groupBy(0)
      .sum(1)

    //结果输出
    result.print()
  }
}

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vicky_Tang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值