我是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._
,但仍然收到相同的错误消息。请建议,谢谢!
答案 0 :(得分:0)
您可能遇到了与我相同的问题,这主要涉及将jar添加到/lib
文件夹,有关详细信息,请参阅here。对于Amazon EMR,您使用的是flink Dashboard。如您所见/opt
具有您需要在lib文件夹中复制的所有必需的jar文件
答案 1 :(得分:0)
打开build.sbt文件并从依赖项中删除provided
答案 2 :(得分:0)
答案 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
了解详情。