Flink实时计算运用(二)Flink快速入门应用

1. Flink基础案例

  1. 环境搭建配置

    FLINK集成,POM配置

    <dependencies>
        
        <dependency>
            <groupId>org.apache.flinkgroupId>
            <artifactId>flink-walkthrough-common_${scala.binary.version}artifactId>
            <version>${flink.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.flinkgroupId>
            <artifactId>flink-streaming-java_${scala.binary.version}artifactId>
            <version>${flink.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.flinkgroupId>
            <artifactId>flink-clients_${scala.binary.version}artifactId>
            <version>${flink.version}version>
        dependency>
    
    dependencies>
    
  2. 批处理案例

    功能: 通过批处理方式,统计日志文件中的异常数量。

    代码:

    public class BatchProcessorApplication {   
        public static void main(String[] args) throws Exception {
            // 1. 定义运行环境
            ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();   
            // 2. 读取数据源(日志文件)
            DataSource<String> logData = env.readTextFile("./data/order_info.log");   
            // 3. 清洗转换数据
            logData.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {   
                @Override
                public void flatMap(String value, Collector<Tuple2<String, Integer>> collector) throws Exception {
                    // 1) 根据正则, 提取每行日志的级别
                    Pattern pattern = Pattern.compile("\\[main\\](.*?)\\[");
                    Matcher matcher = pattern.matcher(value);
                    if(matcher.find()) {
                        // 2) 如果匹配符合规则, 放置元组内
                        collector.collect(new Tuple2<String,Integer>(matcher.group(1).trim(), 1));
                    }
                }
            }).groupBy(0).sum(1).print(); // 4. 根据日志级别, 汇总统计, 打印结果     
        }   
    }
    
    
  3. 流处理案例

    功能: 根据IP统计访问次数

    代码:

    public class StreamProcessorApplication {
    
        public static void main(String[] args) throws Exception{
    
            // 1. 创建运行环境
            StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    
            // 2. 读取Socket数据源
            DataStreamSource<String> socketStr = env.socketTextStream("127.0.0.1", 9911, "\n");
    
            // 3. 转换处理流数据
            socketStr.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
                @Override
                public void flatMap(String value, Collector<Tuple2<String, Integer>> collector) throws Exception {
                    // 根据分隔符解析数据
                    String[] arrValue = value.split("\t");
                    collector.collect(new Tuple2<String,Integer>(arrValue[0], 1));
                }
            }).keyBy(0).timeWindow(Time.seconds(5)).sum(1).print().setParallelism(2);
    
            env.execute("accessLog");
        }
    
    }
    

2. Flink部署配置

  1. 安装配置JDK8环境

    [root@localhost ~]# java -version
    java version "1.8.0_181"
    Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
    
  2. 下载Flink安装包

    官方地址

    安装包

  3. 安装配置

    1) 解压

    tar -xvf flink-1.11.2-bin-scala_2.11.tgz
    

    2)运行

    bin/start-cluster.sh
    

    主节点访问端口:

    vi conf/masters:

    localhost:8081
    
  4. 访问控制台

    http://10.10.20.132:8081/#/overview

    Flink实时计算运用(二)Flink快速入门应用_第1张图片

    Available Task Slots: 有效任务槽数量

    对应配置文件: vi conf/flink-conf.yaml

    taskmanager.numberOfTaskSlots: 1
    

    TaskManger与JobManager关系

    Flink实时计算运用(二)Flink快速入门应用_第2张图片

    Client 用来提交任务给 JobManager,JobManager 分发任务给 TaskManager 去执行, TaskManager 会采用心跳的方式, 汇报任务的执行状态。

    JobManager 负责整个 Flink 集群任务的调度以及资源的管理

    TaskManager 负责具体的任务执行和对应任务在每个节点上的资源申请和管理

3. Flink任务提交

第一种方式: 界面提交

  1. 修改代码配置

    socket数据源连接,采用主机名称配置

    DataStreamSource<String> socketStr = env.socketTextStream("flink1", 9911, "\n");
    
  2. 工程代码打包

    POM文件增加打包插件

    <build>
            <plugins>
                
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-compiler-pluginartifactId>
                    <version>3.5.1version>
                    <configuration>
                        <source>1.8source>
                        <target>1.8target>
                        
                    configuration>
                plugin>
                
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-shade-pluginartifactId>
                    <version>2.3version>
                    <executions>
                        <execution>
                            <phase>packagephase>
                            <goals>
                                <goal>shadegoal>
                            goals>
                            <configuration>
                                <filters>
                                    <filter>
                                        <artifact>*:*artifact>
                                        <excludes>
                                            
                                            <exclude>META-INF/*.SFexclude>
                                            <exclude>META-INF/*.DSAexclude>
                                            <exclude>META-INF/*.RSAexclude>
                                        excludes>
                                    filter>
                                filters>
                                <transformers>
                                    <transformer
                                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        
                                        <mainClass>com.itcast.flink.usage.stream.StreamProcessorApplicationmainClass>
                                    transformer>
                                transformers>
                            configuration>
                        execution>
                    executions>
                plugin>
            plugins>
        build>
    

    注意,这里不能采用spring-boot-maven-plugin打包插件, 否则flink不能正常识别。

  3. 提交任务

    上传Jar包

    Flink实时计算运用(二)Flink快速入门应用_第3张图片

    接下来,在flink1节点上, 开启Socket交互端口9911

    [root@flink1 flink-1.11.2]# nc -lk 9911
    

    然后提交并执行任务

    Flink实时计算运用(二)Flink快速入门应用_第4张图片

    savepoint path: 容错机制中快照保存的路径。

  4. 运行验证

    nc发送一些数据, 在TaskManager当中可以查看输出结果。

    Flink实时计算运用(二)Flink快速入门应用_第5张图片

第二种方式: 命令行提交

在flink控制台清除原有的Job任务。

  1. 上传Jar包

    将Jar包上传至flink服务器:

    [root@flink1 examples]# ll
    total 81880
    drwxr-xr-x. 2 root root      194 Sep  9 23:48 batch
    -rw-r--r--. 1 root root 83843774 Sep 26 05:57 flink-usage-1.0-SNAPSHOT.jar
    drwxr-xr-x. 2 root root       50 Sep  9 23:48 gelly
    drwxr-xr-x. 3 root root       19 Sep  9 23:48 python
    drwxr-xr-x. 2 root root      241 Sep  9 23:48 streaming
    drwxr-xr-x. 2 root root      209 Sep  9 23:48 table
    
  2. 提交任务

    采用命令行方式提交任务:

    [root@flink1 flink-1.11.2]# bin/flink run -c com.itcast.flink.usage.stream.StreamProcessorApplication examples/flink-usage-1.0-SNAPSHOT.jar
    Job has been submitted with JobID 4c127f68f6683e5a9342410d7b6540db
    
  3. 验证结果

    发送一些数据并在控制台验证输出结果。


本文由mirson创作分享,如需进一步交流,请加QQ群:19310171或访问www.softart.cn

你可能感兴趣的:(flink,big,data,scala)