day1:wordcount测试flink批处理环境、流处理环境

一、简单测试环境

//测试flink的批处理环境
    //1-> 引入环境
    val env = ExecutionEnvironment.getExecutionEnvironment

    //2-> 读文件
    val value = env.readTextFile("data/text")

    //3-> scala打印数据
    value.println()

text文件内容:

二、以wordcount为例,测试flink批处理环境

import org.apache.flink.api.scala._      //导入隐式表达式
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment

object wordcount_flink {
  def main(args: Array[String]): Unit = {
//测试flink的批处理环境
    //1-> 引入环境
    val env = ExecutionEnvironment.getExecutionEnvironment
    //2-> 读文件
    val value = env.readTextFile("data/text")
    //3-> 做wordcount
    value
      //拆分单词,以空格进行分割
      .flatMap(_.split(" "))
      //对拆分后的每个单词进行map操作,将其映射为一个元组。
      //元组中第一个元素是单词,第二个元素是1(表示该单词出现一次)。
      .map((_,1))
      //按照元组的第一个元素(即单词)进行分组。
      .groupBy(0)
      //对每个组的第二个元素(即1,下标)进行求和,从而得到每个单词的总出现次数。
      .sum(1)
      //打印数据
      .print()
  }
}

三、以wordcount为例,测试flink流式处理环境

step1: IDEA中编写scala代码

//导入隐式表达式
import org.apache.flink.api.scala._
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment

object wordcount_flink {
  def main(args: Array[String]): Unit = {   
    //1-> 引入流环境
    val env1 = StreamExecutionEnvironment.getExecutionEnvironment
    //设置并行度为1
    env1.setParallelism(1)
    //2-> 读socket数据,模拟流式数据
    val value1 = env1.socketTextStream("localhost", 1234)    //1234为端口号
    value1
      .flatMap(_.split(","))
      .map((_,1))
      .keyBy(_._1)    //流处理里面没有groupBy只有keyBy,效果一样,都是分组的意思
      .sum(1)
      .print()
      //在这里设置并行度为1,只是最后打印的并行度为1,前面的计算依然是多核分布式的
//      .setParallelism(1)
    //多加一句启动流式环境代码
    env1.execute()
 }
}

step2: 下载安装netcat

netcat 1.11 for Win32/Win64
在网站下下载netcat 1.12。
*下载前先把病毒与威胁实时保护、防火墙等关闭(参见上篇帖子)

step3: 将压缩包解压至合适路径,在环境变量(系统变量Path)中添加该路径。

step4: 运行之前写的scala代码,打开cmd,输入:nc -l -p 1234,出现如下示例即为连接成功。
*若右下角出现安全提示,点击信任

step5: 在cmd中输入数据,以“,”分隔,如下图,数据传输成功。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一个Flink批处理示例:import org.apache.flink.api.java.ExecutionEnvironment// 获取执行环境 val env = ExecutionEnvironment.getExecutionEnvironment// 读取文件 val text = env.readTextFile("hdfs:///input/input.txt")// 调用map方法,处理数据 val counts = text.flatMap{ _.toLowerCase.split("\\W+") filter { _.nonEmpty } } .map { (_, 1) } .groupBy(0) .sum(1)// 将结果输出到文件 counts.writeAsCsv("hdfs:///output/output.txt")// 执行 env.execute("Flink Batch WordCount Example") ### 回答2: package com.example.flinkdemo; import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.util.Collector; public class BatchWordCount { public static void main(String[] args) throws Exception { // 创建执行环境 ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); // 定义输入数据集 String inputPath = "path/to/input/file.txt"; DataSet<String> text = env.readTextFile(inputPath); // 转换操作:切分单词,计数为1 DataSet<Tuple2<String, Integer>> counts = text.flatMap(new Tokenizer()) .groupBy(0) .sum(1); // 输出结果 counts.print(); } // 自定义切分单词函数 public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override public void flatMap(String value, Collector<Tuple2<String, Integer>> out) { // 切分字符串为单词 String[] words = value.toLowerCase().split(" "); // 遍历每个单词,发送到下游 for (String word : words) { if (word.length() > 0) { out.collect(new Tuple2<>(word, 1)); } } } } } 上述代码演示了一个简单的Flink批处理应用程序,用于统计文本文件中单词出现的次数。首先,从指定的输入路径读取文本文件。接下来,使用自定义的切分单词函数Tokenizer对文本进行处理,将每个单词切分出来,并和计数为1的元组一起发送给下游。最后,通过按照单词进行分组和求和操作,统计每个单词出现的次数。最终的结果通过print函数输出。 ### 回答3: Flink是一个可扩展且高性能的处理框架,它也支持批处理作业。下面给你一个简单的Flink批处理的demo示例。 首先,你需要创建一个Flink批处理作业,该作业将处理一些数据并输出结果。我们假设你要对一个文本文件中的单词进行计数。 首先,你需要导入Flink的相关库: ```java import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.DataSet; import org.apache.flink.api.java.tuple.Tuple2; ``` 然后,你可以编写批处理的主要逻辑: ```java public class WordCountBatchJob { public static void main(String[] args) throws Exception { // 创建执行环境 ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); // 加载文本文件数据 String inputPath = "path/to/input/file"; DataSet<String> text = env.readTextFile(inputPath); // 执行单词计数逻辑 DataSet<Tuple2<String, Integer>> counts = text .flatMap((String line, Collector<Tuple2<String, Integer>> out) -> { String[] words = line.split(" "); for (String word : words) { out.collect(new Tuple2<>(word, 1)); } }) .groupBy(0) .sum(1); // 打印结果 counts.print(); } } ``` 在上述示例中,我们首先创建了一个ExecutionEnvironment对象,它是Flink批处理作业的入口。 然后,我们使用readTextFile()方法来加载文本文件的数据。你需要替换`path/to/input/file`为你实际的文本文件路径。 接下来,我们对文本中的每一行进行拆分,并将每个单词映射为`(word, 1)`的键值对。然后,我们根据单词进行分组,计算每个单词出现的次数。 最后,我们使用print()方法打印计数结果。 这是一个非常简单的Flink批处理作业demo示例。你可以根据实际需求,添加更复杂的逻辑来处理和转换数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值