(1)Flink学习-开始篇

目录

 

1、下载文件

2、安装

2.1 本地安装

2.2 集群安装

2.2.1 Standalone模式

2.2.2 Flink on Yarn模式

2.2.3 其他模式

3 第一个例子

3.1pom.xml

3.2 java

3.3 测试


1、下载文件

flink-1.9.2-bin-scala_2.12.tgz 

国外镜像下载太慢,可以采用国内的镜像,例如清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/

2、安装

2.1 本地安装

2.2 集群安装

2.2.1 Standalone模式

独立部署模式,不依赖于其他平台。

2.2.2 Flink on Yarn模式

依赖于Hadoop集群

2.2.3 其他模式

Mesos

Docker

K8s

AWS

 

3 第一个例子

3.1pom.xml

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>1.9.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.12</artifactId>
            <version>1.9.2</version>
        </dependency>

3.2 java

注意项目不要在springboot框架的基础上执行,因为springboot会运行tomcat容器等,会引起flink rn -d -c XXXXX com.steven.demo.jar 的错误。

package com.steven.flink;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.aggregation.Aggregations;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;

import java.util.List;

public class Demo1 {
    public static void main(String[] args) {
        //获取执行环境 ExecutionEnvironment (批处理用这个对象)
        final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

        //加载数据源到 DataSet
        DataSet<String> text = env.readTextFile("D:\\test.txt");
        DataSet<Tuple2<String, Integer>> counts =
                text.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
                    @Override
                    public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception {
                        //s 即从文本中读取到一行字符串,按空格分割后得到数组tokens
                        String[] tokens = s.toLowerCase().split("\\s+");
                        for (String token : tokens) {
                            if (token.length() > 0) {
                                //初始化每一个单词,保存为元祖对象
                                collector.collect(new Tuple2<String, Integer>(token, 1));
                            }
                        }
                    }
                })
                        .groupBy(0) //0表示Tuple2<String, Integer> 中的第一个元素,即分割后的单词
                        .aggregate(Aggregations.SUM, 1); //同理,1表示Tuple2<String, Integer> 中的第二个元素,即出现次数

        try {
            //从DataSet 中获得集合,并遍历
            List<Tuple2<String, Integer>> list = counts.collect();
            for (Tuple2<String, Integer> tuple2 : list) {
                System.out.println(tuple2.f0 + ":" + tuple2.f1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

3.3 提交-测试

在D:\\test.txt中加入数据

hello world hello
flink demo

运行代码提交:

D:\dev-tools\apache-flink-1.9.2\bin>  .\flink run -d  -c com.steven.flink.Demo1   .\flink-0.0.1-SNAPSHOT.jar

 

4.提交

4.1 可视化提交

除了运行代码提交,也可可视化提交:

运行结果如下:

flink:1
world:1
hello:2
demo:1

 

可视化界面看运行过程和结果:

 

 

4.2 代码远程提交

 // 配置服务地址以及【当前jar所在路径】
        ExecutionEnvironment env  =  ExecutionEnvironment.createRemoteEnvironment("localhost",8081,"D:\\flink-steven\\target\\flink-0.0.1-SNAPSHOT.jar");

        //加载数据源到 DataSet
        DataSet<String> text = env.readTextFile("F:\\test.txt");
        DataSet<Tuple2<String, Integer>> counts =
                text.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
                    @Override
                    public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception {
                        //s 即从文本中读取到一行字符串,按空格分割后得到数组tokens
                        String[] tokens = s.toLowerCase().split("\\s+");
                        for (String token : tokens) {
                            if (token.length() > 0) {
                                //初始化每一个单词,保存为元祖对象
                                collector.collect(new Tuple2<String, Integer>(token, 1));
                            }
                        }
                    }
                })
                        .groupBy(0) //0表示Tuple2<String, Integer> 中的第一个元素,即分割后的单词
                        .aggregate(Aggregations.SUM, 1); //同理,1表示Tuple2<String, Integer> 中的第二个元素,即出现次数
        counts.writeAsText("F:\\asd");

直接运行代码:

 在远端集群中就能看到这个运行的Job了:

 


 Flink知识点的学习有一部分参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值