Flink做一个批处理

用Flink做出来的第一个程序

使用Flink做一个简单的Wordcount批处理

flink初学者,第一个Wordcount其实琢磨了很久很久,但是今天终于成功了,写下来供大家参考:
打开IDEA,创建一个maven项目
在这里插入图片描述
命名
在这里插入图片描述
首先配置以下依赖:pom.xml

<dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-scala_2.11</artifactId>
            <version>1.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-scala_2.11</artifactId>
            <version>1.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.7.2</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <executions>
                    <execution>
                        <id>scala-compile</id>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>**/*.scala</include>
                            </includes>
                        </configuration>
                    </execution>
                    <execution>
                        <id>scala-testCompile</id>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

在这里新建一个scala文件,并且把它Mark Directory as Sources Root
在这里插入图片描述
在这里插入图片描述

然后新建一个文本文档,在resources里面创建一个新的txt,写一些一会批处理用到的数据,就随便写吧
在这里插入图片描述
这里就写一些自己一会想测试的数据就可以。
在这里插入图片描述

在scala文件里创建一个scala的object,named:com.myz.wc.wordcount
在这里插入图片描述
批处理:

package com.myz.wc


import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment}


object Worldcount {
  def main(args: Array[String]): Unit = {
    // 初始化Flink批计算环境、
    val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment

    // 导入隐式转换
    import org.apache.flink.api.scala._

    // 设置默认的分区
    //    env.setParallelism(1)

    // 读取数据
    val ds: DataSet[String] = env.readTextFile("G:\\idea\\IdeaProjects\\flinktest\\src\\main\\resources")

    // 转换计算
    val result: AggregateDataSet[(String, Int)] = ds.flatMap(_.split(" "))
      .map((_, 1))
      .groupBy(0)
      .sum(1)

    // 打印(这里的print不能设置分区)
    result.print()

  }
}

运行以下看结果:
在这里插入图片描述

完成!

### 使用Apache Flink进行批处理 对于批处理作业,Flink提供了丰富的API来操作静态数据集。尽管主要设计用于流处理,但Flink同样适用于批处理场景,并提供了一系列类似于传统批量处理系统的算子[^1]。 #### 创建环境 为了启动一个批处理程序,首先需要创建执行环境: ```java ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); ``` 此代码片段初始化了一个`ExecutionEnvironment`实例,它是所有Flink应用程序的核心组件之一,负责配置和控制整个计算过程。 #### 加载数据源 接着定义输入的数据源,可以从文件系统读取数据作为批处理的起点: ```java DataSet<String> text = env.readTextFile("file:///path/to/input"); ``` 上述语句展示了如何通过指定路径加载文本文件中的内容到内存中形成待处理的数据集合。 #### 应用转换逻辑 之后可以应用各种内置的操作符对数据集实施变换,例如映射(map)、过滤(filter)等基本函数: ```java // 将每一行字符串分割成单词并计数 DataSet<Tuple2<String, Integer>> counts = text.flatMap(new LineSplitter()) .groupBy(0) .sum(1); ``` 这里展示的是将原始文本按照行拆分成多个词语后统计每个词出现次数的例子;其中`LineSplitter`是一个自定义类实现flatMap接口完成具体业务需求的功能。 #### 输出结果 最后一步就是设置输出目标保存最终得到的结果: ```java counts.writeAsCsv("file:///path/to/output", "\n", " "); env.execute("Word Count Example"); ``` 这段脚本指定了CSV格式写出运算后的键值对至磁盘上的某个位置,并给定此次任务的名字以便于监控管理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值