3. Flink学习之旅(三)

1. 常用Scope区别

  • compile

    • 默认scope为compile,表示为当前依赖参与项目的编译测试运行阶段,属于强依赖。打包之时,会打到包里去。
  • test

    • 该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junit
  • runtime

    • 依赖仅参与运行周期中的使用。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。此类的驱动都是为runtime的类库。
  • provided

    • 该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译测试运行等周期,与compile等同。区别在于打包阶段进行了exclude操作。

2. Flink集群搭建

  • 要求:
    • Java 1.8.x或更高版本
    • ssh免密登录
    • 相同的目录结构

2.1. 独立集群

  • JAVA_HOME 配置

    • conf/flink-conf.yaml 通过 env.java.home键设置此变量
      env.java.home: /usr/lib/jdk1.8.0_162
      
  • Flink配置

    • 选择一个master结点, 配置conf/flink-conf.yaml

      jobmanager.rpc.address: 192.168.1.27
      
    • conf / slaves 配置从结点
      在这里插入图片描述

    • 其他重要配置
      在这里插入图片描述

    • 官网配置参数

  • 分发安装包

    scp -r flink [email protected]:$PWD
    scp -r flink [email protected]:$PWD
    scp -r flink [email protected]:$PWD
    
  • 启动Flink集群

    ${FLINK_HOME}/bin/start-cluster.sh 
    
  • 将JobManager / TaskManager实例添加到集群
    在这里插入图片描述

  • Flink UI界面
    在这里插入图片描述

2.2. yarn集群

  • 设置Hadoop环境变量

    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    
  • 以集群模式提交任务,每次都会新建flink集群

    ./flink run -m yarn-cluster -p 1 -yjm 1024 -ytm 1024m /home/hadoop/fanjh/FirstFlinkDemo-assembly-1.0.jar 19168.1.27 9999
    
  • 启动Session flink集群,提交任务

    • 查看使用方法

      $FLINK_HOME/bin/yarn-session.sh -h
      
    • 在YARN上启动一个长期运行的Flink集群的会话

      bin/yarn-session.sh -jm 1024m -tm 1024m -s 4
      
    • 会话开启后,在YARN上提交Flink作业

      bin/flink run /home/hadoop/fanjh/FirstFlinkDemo-assembly-1.0.jar 192.168.1.27 9999
      
  • 使用yarn 工具 来停止yarn session

    yarn application -kill <applicationId> 
    

2.3. Flink 1.10.0 分布式高可用集群搭建

  • 独立集群高可用

    • 配置masters文件conf/masters,并分发到每台机器
      在这里插入图片描述

    • 配置flink-conf.yam,并分发到每台机器

      high-availability: zookeeper
      high-availability.storageDir: hdfs:///flink/ha/
      high-availability.zookeeper.quorum: baojiabei03:2181,baojiabei04:2181,baojiabei05:2181
      high-availability.zookeeper.path.root: /flink
      
  • YARN群集高可用性

3. SLF4J和Logback和Log4j和Logging的区别与联系

3.1. 一个著名的日志系统是怎么设计出来的

  • 日志消息除了能打印到控制台, 还可以输出到文件,甚至可以通过邮件发送出去(例如生成环境出错的消息)
  • 日志内容应该可以做格式化, 例如变成纯文本,XML, HTML格式等等
  • 对于不同的Java class,不同的 package , 还有不同级别的日志,应该可以灵活地输出到不同的文件中
    • 例如对于com.foo 这个package,所有的日志都输出到 foo.log 文件中
    • 对于com.bar 这个package ,所有文件都输出到bar. log文件中
    • 对于所有的ERROR级别的日志,都输出到 errors.log文件中
  • 能对日志进行分级, 有些日志纯属debug , 在本机或者测试环境使用, 方便程序员的调试, 生产环境完全不需要。有些日志是描述错误(error)的, 在生产环境下出错的话必须要记录下来,帮助后续的分析。
    在这里插入图片描述

3.2. 在standalone集群模式下运行案例遇到的一个问题

  • 在运行状态下,清空log文件夹下的内容之后,以后就不产生日志文件和输出文件了,重启之后恢复正常??

4. Flink DataStream API 编程指南

4.1. Flink程序剖析

Flink 程序看起来像是转换数据集合的规范化程序。每个程序由一些基本的部分组成

  • 获取执行环境
  • 加载/创建初始数据
  • 指定对数据的转换操作
  • 指定计算结果存放的位置
  • 触发程序执行

4.2. 第一个Flink程序(WordCount)

  • 整体结构
    在这里插入图片描述

  • build.sbt

    ThisBuild / resolvers ++= Seq(
        "Apache Development Snapshot Repository" at "https://repository.apache.org/content/repositories/snapshots/",
        Resolver.mavenLocal
    )
    
    name := "FirstFlinkDemo"
    
    version := "1.0"
    
    organization := "com.xiaofan"
    
    ThisBuild / scalaVersion := "2.12.6"
    
    val flinkVersion = "1.10.0"
    
    val flinkDependencies = Seq(
      "org.apache.flink" %% "flink-scala" % flinkVersion % "provided",
      "org.apache.flink" %% "flink-streaming-scala" % flinkVersion % "provided",
      "org.slf4j" % "slf4j-log4j12" % "1.8.0-beta4")
    
    lazy val root = (project in file(".")).
      settings(
        libraryDependencies ++= flinkDependencies
      )
    
    // 打包指定的主类
    assembly / mainClass := Some("com.xiaofan.SocketTextStreamWordCount")
    
    // make run command include the provided dependencies
    Compile / run  := Defaults.runTask(Compile / fullClasspath,
                                       Compile / run / mainClass,
                                       Compile / run / runner
                                      ).evaluated
    
    // stays inside the sbt console when we press "ctrl-c" while a Flink programme executes with "run" or "runMain"
    Compile / run / fork := true
    Global / cancelable := true
    
    // exclude Scala library from assembly
    assembly / assemblyOption  := (assembly / assemblyOption).value.copy(includeScala = false)
    
    fork in run := true
    
    
  • mainRunner
    这个好像设置不设置都没有什么影响
    在这里插入图片描述

  • SocketTextStreamWordCount类
    在这里插入图片描述

  • 本地运行结果
    在这里插入图片描述

  • 打包提交的集群

    • 修改代码
      在这里插入图片描述

    • 打fat包:sbt clean assembly

    • 提交到集群:bin/flink run /home/hadoop/fanjh/FirstFlinkDemo-assembly-1.0.jar 192.168.1.27 9999

      在这里插入图片描述

5. Flink任务提交流程(Standalone和Yarn)

6. 寄语:天行健,君子以自强不息

发布了85 篇原创文章 · 获赞 12 · 访问量 3720

猜你喜欢

转载自blog.csdn.net/fanjianhai/article/details/104573087
今日推荐