Flink Scala ClassNotFoundException:org.apache.flink.api.common.typeinfo.TypeInformation

时间:2017-10-26 22:04:40

标签: java scala apache-flink emr flink-streaming

我是Flink的新手,我正在关注SocketWindowWordCount示例。

我正在使用Scala 2.11.8和Flink 1.3.2并尝试在EMR上运行它,当我运行以下代码时,它会抛出错误:

Caused by: java.lang.ClassNotFoundException: org.apache.flink.api.common.typeinfo.TypeInformation

主要类看起来像这样:

import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time

object FlinkStreamingPOC {

  def main(args: Array[String]) : Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val stream = env.readTextFile("s3a://somebucket/prefix")
    val counts = stream.flatMap{ _.split("\\W+") }
      .map { (_, 1) }
      .keyBy(0)
      .timeWindow(Time.seconds(10))
      .sum(1)

    counts.print

    env.execute("Window Stream WordCount")
  }
}

build.sbt看起来像这样:

scalaVersion := "2.11.8"

val flinkVersion = "1.3.2"

libraryDependencies ++= Seq(
  "org.apache.flink" %% "flink-scala" % flinkVersion,
  "org.apache.flink" %% "flink-streaming-scala" % flinkVersion
)

我尝试import org.apache.flink.api.scala._org.apache.flink.streaming.api.scala._,但仍然收到相同的错误消息。请建议,谢谢!

5 个答案:

答案 0 :(得分:0)

您可能遇到了与我相同的问题,这主要涉及将jar添加到/lib文件夹,有关详细信息,请参阅here。对于Amazon EMR,您使用的是flink Dashboard。如您所见/opt具有您需要在lib文件夹中复制的所有必需的jar文件

enter image description here

答案 1 :(得分:0)

打开build.sbt文件并从依赖项中删除provided

答案 2 :(得分:0)

如果使用IDEA,则可以在“提供”范围内包含依赖项。

enter image description here

答案 3 :(得分:0)

我在项目https://github.com/streaming-with-flink/examples-scala中遇到类AverageSensorReadings的相同问题。这是一个maven项目,因此我为pom文件中的每个依赖项都注释了所有<scope>provided</scope>,并且可以正常工作。

答案 4 :(得分:0)

从Flink项目构建的胖子应该在 flink集群环境中运行,因此所有与Flink相关的依赖项都将由环境提供。

其他答案建议从依赖项中简单注释掉provided范围,从而将这些依赖项包含在胖子中。这可能有效,但不正确。

如果您使用java --classpath target/your-project-jar.jar your.package.SocketWindowWordCount之类的命令运行jar,则说明您不在Flink集群环境中。

正确的方法是使用flink run ...之类的./bin/flink run -c your.package.SocketWindowWordCount target/your-project-jar.jar命令。

尝试使用./bin/flink run --help了解详情。