Shang Silicon Valley Big Data Flink1.17 Tutorial práctico-Notas 01 [Descripción general de Flink, Inicio rápido de Flink]

  1. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico-Notas 01 [Descripción general de Flink, Inicio rápido de Flink]
  2. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico - Nota 02 [Implementación de Flink]
  3. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico-Notas 03【】
  4. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico-Notas 04【】
  5. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico-Notas 05【】
  6. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico-Notas 06【】
  7. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico-Notas 07【】
  8. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico-Notas 08【】
  9. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico - Nota 09【】
  10. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico - Nota 10【】
  11. Shang Silicon Valley Big Data Flink1.17 Tutorial práctico - Nota 11【】

Tabla de contenido

Básico

Capítulo 01 - Resumen de Flink

P001【001_Introducción al Curso】09:18

Capítulo 1 Descripción general de Flink

P002【002_Resumen de Flink_Qué es Flink】14:13

P003 [003_Resumen de Flink_Historial y características de desarrollo de Flink] 08:14

P004 [004_Resumen de Flink_Diferencias de SparkStreaming y escenarios de aplicación y API jerárquica] 12:50

Capítulo 2 Inicio rápido de Flink

P005【005_Inicio rápido de Flink_Crear proyecto Maven e importar dependencias】03:49

P006 [006_Inicio rápido de Flink_Procesamiento por lotes para realizar WordCount] 18:00

P007[007_Flink Quick Start_Stream Processing Realiza WordCount_Coding] 13:13

P008[008_Flink Quick Start_WordCount Realizado por Stream Processing_Demo & Comparison] 06:03

P009[009_Flink Quick Start_Stream Processing realiza WordCount_Unbounded Stream_Encoding] 13:57

P010[010_Flink Quick Start_Stream Processing Realiza WordCount_Unbounded Stream_Demo & Comparation] 05:14


Este conjunto de tutoriales se basa en la nueva versión 1.17 de Flink y se divide en cuatro capítulos: capítulos básicos, capítulos básicos, capítulos avanzados y capítulos de SQL. A través de explicaciones animadas y demostraciones de casos prácticos, el tutorial lo lleva a dominar Flink para crear aplicaciones de procesamiento de datos confiables y eficientes.

Básico

P001【001_Introducción al Curso】09:18

¿Quién está usando Flink? R: Grandes empresas como Tencent, Huawei, Didi, Alibaba, Kuaishou y Amazon lo están utilizando.

Características de Flink

  1. Unificación de lotes
    1. El mismo conjunto de códigos puede ejecutar flujo o lote
    2. El mismo SQL puede ejecutar secuencias o lotes
  2. excelente actuación
    1. alto rendimiento
    2. baja latencia
  3. calculo de escala
    1. Admite arquitectura de escalado horizontal
    2. Soporte para mecanismo de punto de control incremental y de estado súper grande
    3. Uso de grandes empresas:
      1. Maneja billones de eventos por día
      2. La aplicación mantiene varios terabytes de estado
      3. Las aplicaciones se ejecutan en miles de núcleos de CPU
  4. Compatibilidad ecológica
    1. Soporte de integración con Yarn
    2. Soporte para la integración con Kubernetes
    3. Soporta operación en modo independiente
  5. Alta tolerancia a fallas
    1. Reintento automático en caso de error
    2. punto de control de consistencia
    3. Garantice exactamente una vez la consistencia del estado en escenarios de falla

Características del curso

  1. superficial a profundo
  2. Animación para explicar los puntos importantes y difíciles
  3. nueva versión
  4. contenido detallado

Capítulo 01 - Resumen de Flink

P002【002_Resumen de Flink_Qué es Flink】14:13

Dirección de la página de inicio del sitio web oficial de Flink: https://flink.apache.org/

El objetivo principal de Flink es "Cálculos con estado sobre flujos de datos".

Para ser específicos: Apache Flink es un marco y un motor de procesamiento distribuido para el cálculo con estado en flujos de datos ilimitados y limitados.

P003 [003_Resumen de Flink_Historial y características de desarrollo de Flink] 08:14

Nuestros objetivos para el procesamiento de datos son: baja latencia, alto rendimiento, precisión de los resultados y buena tolerancia a fallas.

Las principales características de Flink son las siguientes:

  1. Alto rendimiento y baja latencia. Procese millones de eventos por segundo con una latencia de milisegundos.
  2. la exactitud de los resultados. Flink proporciona semántica de tiempo de evento y tiempo de procesamiento. Para flujos de eventos fuera de orden, la semántica de tiempo de evento aún brinda resultados consistentes y precisos.
  3. Garantías de consistencia de estado exactamente una vez.
  4. Puede conectarse a los sistemas externos más utilizados, como Kafka, Hive, JDBC, HDFS, Redis, etc.
  5. Alta disponibilidad. Con su configuración de alta disponibilidad, junto con una estrecha integración con K8s, YARN y Mesos, junto con la capacidad de recuperarse rápidamente de fallas y expandir dinámicamente las tareas, Flink puede ejecutarse 7x24 con muy poco tiempo de inactividad.

P004 [004_Resumen de Flink_Diferencias de SparkStreaming y escenarios de aplicación y API jerárquica] 12:50

Comparación de tabla Flink y Streaming

Considerable

Transmisión

modelo computacional

flujo de computación

micro-lote

semántica temporal

tiempo de evento, tiempo de procesamiento

Tiempo de procesamiento

ventana

muchos, flexibles

Menos, inflexible (la ventana debe ser un múltiplo entero del lote)

estado

tener

No

Transmisión de SQL

tener

No

Capítulo 02 - Inicio rápido de Flink

P005【005_Inicio rápido de Flink_Crear proyecto Maven e importar dependencias】03:49

    <properties>
        <flink.version>1.17.0</flink.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java</artifactId>
            <version>${flink.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients</artifactId>
            <version>${flink.version}</version>
        </dependency>
    </dependencies>

P006 [006_Inicio rápido de Flink_Procesamiento por lotes para realizar WordCount] 18:00

ctrl + p: Ver el método de paso de parámetros.

hello flink
hello world
hello java

package com.atguigu.wc;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.AggregateOperator;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.api.java.operators.FlatMapOperator;
import org.apache.flink.api.java.operators.UnsortedGrouping;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;

/**
 * TODO DataSet API 实现 wordCount
 */
public class WordCountBatchDemo {
    public static void main(String[] args) throws Exception {
        // TODO 1.创建执行环境
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

        // TODO 2.读取文件:从文件中读取
        DataSource<String> lineDS = env.readTextFile("input/word.txt");

        // TODO 3.切分、转换(word, 1)
        FlatMapOperator<String, Tuple2<String, Integer>> wordAndOne = lineDS.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
            @Override
            public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
                // TODO 3.1 按照空格切分单词
                String[] words = value.split(" ");
                // TODO 3.2 将单词转换为(word, 1)格式
                for (String word : words) {
                    Tuple2<String, Integer> wordTuple2 = Tuple2.of(word, 1);
                    // TODO 3.3 使用Collector向下游发送数据
                    out.collect(wordTuple2);
                }
            }
        });

        // TODO 4.按照word分组
        UnsortedGrouping<Tuple2<String, Integer>> wordAndOneGroupBy = wordAndOne.groupBy(0);

        // TODO 5.各分组内聚合
        AggregateOperator<Tuple2<String, Integer>> sum = wordAndOneGroupBy.sum(1); //1是位置,表示第二个元素

        // TODO 6.输出
        sum.print();
    }
}

P007[007_Flink Quick Start_Stream Processing Realiza WordCount_Coding] 13:13

2.2.2 Procesamiento de flujo

package com.atguigu.wc;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.functions.KeySelector;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

/**
 * TODO DataStream实现Wordcount:读文件(有界流)
 *
 */
public class WordCountStreamDemo {
    public static void main(String[] args) throws Exception {
        // TODO 1.创建执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // TODO 2.读取数据:从文件读
        DataStreamSource<String> lineDS = env.readTextFile("input/word.txt");

        // TODO 3.处理数据: 切分、转换、分组、聚合
        // TODO 3.1 切分、转换
        SingleOutputStreamOperator<Tuple2<String, Integer>> wordAndOneDS = lineDS //<输入类型, 输出类型>
                .flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
                    @Override
                    public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
                        // 按照 空格 切分
                        String[] words = value.split(" ");
                        for (String word : words) {
                            // 转换成 二元组 (word,1)
                            Tuple2<String, Integer> wordsAndOne = Tuple2.of(word, 1);
                            // 通过 采集器 向下游发送数据
                            out.collect(wordsAndOne);
                        }
                    }
                });
        // TODO 3.2 分组
        KeyedStream<Tuple2<String, Integer>, String> wordAndOneKS = wordAndOneDS.keyBy(
                new KeySelector<Tuple2<String, Integer>, String>() {
                    @Override
                    public String getKey(Tuple2<String, Integer> value) throws Exception {
                        return value.f0;
                    }
                }
        );
        // TODO 3.3 聚合
        SingleOutputStreamOperator<Tuple2<String, Integer>> sumDS = wordAndOneKS.sum(1);

        // TODO 4.输出数据
        sumDS.print();

        // TODO 5.执行:类似 sparkstreaming最后 ssc.start()
        env.execute();
    }
}

/**
 * 接口 A,里面有一个方法a()
 * 1、正常实现接口步骤:
 * <p>
 * 1.1 定义一个class B  实现 接口A、方法a()
 * 1.2 创建B的对象:   B b = new B()
 * <p>
 * <p>
 * 2、接口的匿名实现类:
 * new A(){
 * a(){
 * <p>
 * }
 * }
 */

P008[008_Flink Quick Start_WordCount Realizado por Stream Processing_Demo & Comparison] 06:03

Las principales observaciones difieren del programa por lotes BatchWordCount:

  1. En lugar de crear un entorno de ejecución, los controladores de flujo usan un StreamExecutionEnvironment.
  2. Después del proceso de conversión, los tipos de objetos de datos resultantes son diferentes.
  3. La operación de agrupación llama al método keyBy y se puede pasar una función anónima como selector de clave (KeySelector) para especificar cuál es la clave de agrupación actual.
  4. Al final del código, se debe llamar al método de ejecución de env para comenzar a ejecutar la tarea.

P009[009_Flink Quick Start_Stream Processing realiza WordCount_Unbounded Stream_Encoding] 13:57

2) Leer el flujo de texto del socket

En el entorno de producción real, el flujo de datos real en realidad es ilimitado, con un principio pero sin un final, lo que requiere que procesemos continuamente los datos capturados. Para simular este escenario, puede escuchar el puerto del socket y luego enviar datos continuamente al puerto.

[atguigu@node001 ~]$  sudo yum install -y netcat

[atguigu@node001 ~]$  nc -lk 7777

package com.atguigu.wc;

import org.apache.flink.api.common.typeinfo.TypeHint;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

/**
 * TODO DataStream实现Wordcount:读socket(无界流)
 *
 */
public class WordCountStreamUnboundedDemo {
    public static void main(String[] args) throws Exception {
        // TODO 1. 创建执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        // IDEA运行时,也可以看到webui,一般用于本地测试
        // 需要引入一个依赖 flink-runtime-web
        // 在idea运行,不指定并行度,默认就是 电脑的 线程数
        // StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());

        env.setParallelism(3);

        // TODO 2. 读取数据: socket
        DataStreamSource<String> socketDS = env.socketTextStream("node001", 7777);

        // TODO 3. 处理数据: 切换、转换、分组、聚合
        SingleOutputStreamOperator<Tuple2<String, Integer>> sum = socketDS
                .flatMap(
                        (String value, Collector<Tuple2<String, Integer>> out) -> {
                            String[] words = value.split(" ");
                            for (String word : words) {
                                out.collect(Tuple2.of(word, 1));
                            }
                        }
                )
                .setParallelism(2)
                .returns(Types.TUPLE(Types.STRING, Types.INT))
                // .returns(new TypeHint<Tuple2<String, Integer>>() {})
                .keyBy(value -> value.f0)
                .sum(1);

        // TODO 4. 输出
        sum.print();

        // TODO 5. 执行
        env.execute();
    }
}

/**
 * 并行度的优先级:
 * 代码:算子 > 代码:env > 提交时指定 > 配置文件
 */

P010[010_Flink Quick Start_Stream Processing Realiza WordCount_Unbounded Stream_Demo & Comparation] 05:14

Supongo que te gusta

Origin blog.csdn.net/weixin_44949135/article/details/130895033
Recomendado
Clasificación