热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【data】入门Flinkscala编程

flinkscala编程入门的教程网上有一些,看着步骤相对比较简单,但是实践起来还是遇到不少的坑,这里记录下过程,供日后查阅,备注附录了遇到的一些问题。至于代码解释可自行查阅网上其


flink scala编程入门的教程网上有一些,看着步骤相对比较简单,但是实践起来还是遇到不少的坑,这里记录下过程,供日后查阅,备注附录了遇到的一些问题。至于代码解释可自行查阅网上其他资料,这里不再赘述。


工程构建





  • IDEA新建一个空的maven项目, src/main
    目录下新建scala文件夹,并配置为 Sources
    类型




  • 配置pom.xml文件





    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0
    com.eflink
    word-count
    1.0

    UTF-8
    1.7.1
    2.11
    2.11.12





    org.apache.flink
    flink-scala_${scala.binary.version}
    ${flink.version}
    provided


    org.apache.flink
    flink-streaming-scala_${scala.binary.version}
    ${flink.version}
    provided


    org.apache.flink
    flink-clients_${scala.binary.version}
    ${flink.version}
    provided


    org.scala-lang
    scala-library
    ${scala.version}



    word-count


    org.apache.maven.plugins
    maven-shade-plugin
    3.0.0



    package

    shade




    org.apache.flink:force-shading
    com.google.code.findbugs:jsr305
    org.slf4j:*
    log4j:*





    *:*

    META-INF/*.SF
    META-INF/*.DSA
    META-INF/*.RSA





    com.eflink.SocketWordCount








    net.alchim31.maven
    scala-maven-plugin
    3.4.4



    compile
    testCompile











    pom.xml文件中设置flink和scala的版本,本机flink版本为 1.7.1
    ,scala的版本根据flink的版本来确定,例如:依赖 Flink Clients
    ,查看特定flink版本下scala版本支持的情况。




编写代码



参考 Flink tutorials scala code
,IDEA创建scala class选择Object,代码如下:




package com.eflink
import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.streaming.api.windowing.time.Time
import org.apache.flink.streaming.api.scala._
object SocketWordCount {
def main(args: Array[String]): Unit = {
// the port to connect to
val port: Int = try {
ParameterTool.fromArgs(args).getInt("port")
} catch {
case e: Exception => {
System.err.println("No port specified. Please run 'SocketWindowWordCount --port '")
return
}
}
// get the execution environment
val env: StreamExecutiOnEnvironment= StreamExecutionEnvironment.getExecutionEnvironment
// get input data by connecting to the socket
val text = env.socketTextStream("localhost", port, '\n')
// parse the data, group it, window it, and aggregate the counts
val windowCounts = text
.flatMap { w => w.split("\\s") }
.map { w => WordWithCount(w, 1) }
.keyBy("word")
.timeWindow(Time.seconds(5), Time.seconds(1))
.sum("count")
// print the results with a single thread, rather than in parallel
windowCounts.print().setParallelism(1)
env.execute("Socket Window WordCount")
}
// Data type for words with count
case class WordWithCount(word: String, count: Long)
}



nc -l 9000
Cellar/apache-flink/1.7.1/libexec/bin/start-cluster.sh
mvn compile/package
flink run target/word-count.jar --port 9000

备注




  1. maven更换阿里云源




    cp /usr/local/Cellar/maven@3.3/3.3.9/libexec/conf/settings.xml ~/.m2
    vim ~/.m2/settings.xml



    alimaven
    aliyun maven
    http://maven.aliyun.com/nexus/content/groups/public/
    central







  2. 包导入问题


    IDEA根据编写的代码能够自动或手动提示导入所需要的包,但是构建官方给的代码中会报如下错误:




    error: could not find implicit value for evidence parameter of type org.apache.flink.api.common.typeinfo.TypeInformation[String]
    [ERROR] .flatMap { w => w.split("\\s") }




    这是因为程序需要一个隐形参数导致的,引用包改为 import org.apache.flink.streaming.api.scala._




  3. 单纯scala项目pom文件





    org.scala-lang
    scala-library
    ${scala.version}


    net.alchim31.maven
    scala-maven-plugin
    3.4.4



    compile
    testCompile





    org.apache.maven.plugins
    maven-assembly-plugin
    2.5.5



    packagename.classname



    jar-with-dependencies




    make-assembly
    package

    single









  4. 远程提交


    本地开发然后往集群提交远程作业,ExecutionEnvironment.createRemoteEnvironment 第三个参数是打包之后的jar包路径,也是必不可少,不然会找不到类,同时这个jar包是单一jar包,不是那种把所有依赖都打进去的可执行jar包。




  5. IDEA配置scala SDK



    打开scala文件,IDEA会弹出通知 No Scala SDK in module Setup Scala SDK
    ,需要配置scala sdk,点击 Setup Scala SDK
    配置。




    1. 选择maven下载的scala
      (推荐)


    2. 选择本地安装的scala


      查看本地安装scala的位置




      ▶ brew info scala
      scala: stable 2.12.8
      JVM-based programming language
      https://www.scala-lang.org/
      /usr/local/Cellar/scala/2.12.8 (42 files, 20.8MB) *
      Built from source on 2019-01-08 at 12:30:35
      From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/scala.rb
      ==> Requirements
      Required: java >= 1.8 ✔




      scala安装在 /usr/local/Cellar/scala/2.12.8
      ,但是IDEA弹出的finder不能选择 /usr
      文件夹,于是曲线救国,创建一个软链接到可访问的目录下:




      ln -s /usr/local/Cellar/ /Users/xxxuser/Cellar




      于是可以通过当前用户目录下的Cellar软连接,选择 /usr/local/Cellar/scala/2.12.8/libexec
      配置scala sdk。






  6. scala版本问题



    flink版本为1.7.1,推荐使用scala2.11版本,虽说1.7.1的flink版本支持scala 2.11和2.12,但是在实践中发现,当使用scala 2.12版本时,运行程序会报错 java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)[Ljava/lang/Object;
    ,将scala版本改为2.11后程序可正常运行。查阅网上资料,有说是jdk版本和scala版本适配问题导致的,目前未深入分析,具体原因不明。




  7. 环境配置




    • 安装flink




      ▶ brew install apache-flink

      ▶ flink --version
      Version: 1.7.1, Commit ID: 89eafb4





    • 安装scala(非必需)




      ▶ brew install scala@2.11





    • 安装mvn(非必需)




      ▶ brew install maven@3.3
      ▶ brew info maven@3.3
      maven@3.3: stable 3.3.9 [keg-only]
      Java-based project management
      https://maven.apache.org/
      /usr/local/Cellar/maven@3.3/3.3.9 (91 files, 9.6MB)
      # echo 'export PATH="/usr/local/opt/maven@3.3/bin:$PATH"' >> ~/.zshrc
      # or
      ▶ ln -s /usr/local/Cellar/maven@3.3/3.3.9/bin/mvn /usr/local/bin/mvn
      ▶ mvn -v
      Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
      Maven home: /usr/local/Cellar/maven@3.3/3.3.9/libexec
      Java version: 1.8.0_191, vendor: Oracle Corporation
      Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre
      Default locale: zh_CN, platform encoding: UTF-8
      OS name: "mac os x", version: "10.13.6", arch: "x86_64", family: "mac"






    • IDEA 安装 scala
      插件






参考





  • http://wuchong.me/categories/Flink/





  • pom.xml in flink scala demo






推荐阅读
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 标题: ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
author-avatar
oFoUro_877
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有