Hello everyone, I'm new to Flink and am encountering a nasty problem while
trying to submit a streaming Flink Job. I'll try to explain it as
thoroughly as possible.

Premise: I'm using an HDP 2.6 hadoop cluster, with hadoop version
2.7.3.2.6.1.0-129, Flink compiled from sources accordingly (maven 3.0.5) as
per documentation
<https://ci.apache.org/projects/flink/flink-docs-release-1.3/setup/building.html#vendor-specific-versions>
and I submit the job using yarn-session.sh and then flink run.

Getting into more details, the Flink Job is a fat jar built with sbt
assembly and the following dependencies:

libraryDependencies += "org.apache.flink" %% "flink-scala" %
flinkVersion % "provided"
libraryDependencies += "org.apache.flink" %% "flink-streaming-scala" %
flinkVersion % "provided"
libraryDependencies += "org.apache.flink" %% "flink-connector-kinesis"
% flinkVersion % "provided"
libraryDependencies += "org.apache.flink" %% "flink-hbase" %
flinkVersion % "provided"
libraryDependencies += "org.apache.flink" %%
"flink-connector-filesystem" % flinkVersion % "provided"
libraryDependencies += "org.apache.hbase" % "hbase-common" % "1.3.0"
libraryDependencies += "org.joda" % "joda-convert" % "1.8.3"
libraryDependencies += "com.typesafe.play" %% "play-json" % "2.6.2"


assemblyOption in assembly := (assemblyOption in
assembly).value.copy(includeScala = false)


inside the flink lib folder I have the following Jars:

flink-connector-filesystem_2.10-1.3.2.jar
flink-python_2.10-1.3.2.jar
flink-connector-kinesis_2.10-1.3.2.jar
flink-shaded-hadoop2-uber-1.3.2.jar
flink-dist_2.10-1.3.2.jar
log4j-1.2.17.jar
flink-hbase_2.10-1.3.2.jar
slf4j-log4j12-1.7.7.jar

Right now, the issue is that when I flink run the job, I get
NoClassDefFound for org/apache/hadoop/hbase/client/Put class, despite it
being inside the fat jar. So, I tried putting both hbase-common.jar and
hbase-client.jars inside the lib folder, getting as a result another
NoClassDefFound, only, this time, for com/google/common/collect/ListMultimap.
Now, I noticed that flink-connector-kinesis and all the hbase packages
(both hbase-common and flink-hbase deps) have a different version of guava
as dependency: the first one needs version 18.0, while the second one needs
12.0.1 version. I, then, tried to enable the shading of guava packages with
the following:

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("com.google.**" -> "shade.com.google.@1").inAll
)


Only to no avail, getting the exact same error as before. And I really
don't know how to submit the job without pouring every single dependency
inside the lib folder. I thought it could be a compatibility issue with the
YARN cluster, but I tried launching the job locally only to get the same
error.

As an additional info, I get the following warnings if I don't specify
flink packages as provided:

[warn]     * org.scalamacros:quasiquotes_2.10:2.1.0 is selected over 2.0.1
[warn]         +- org.typelevel:macro-compat_2.10:1.1.1
(depends on 2.1.0)
[warn]         +- org.apache.flink:flink-scala_2.10:1.3.2
(depends on 2.0.1)
[warn]
[warn]     * org.mortbay.jetty:jetty-util:6.1.26 is selected over 6.1.26.hwx
[warn]         +- org.apache.hbase:hbase-common:1.3.0
(depends on 6.1.26)
[warn]         +- org.apache.flink:flink-shaded-hadoop2:1.3.2
(depends on 6.1.26.hwx)
[warn]
[warn]     * io.netty:netty:3.8.0.Final is selected over 3.7.0.Final
[warn]         +- com.data-artisans:flakka-remote_2.10:2.3-custom
(depends on 3.8.0.Final)
[warn]         +- org.apache.zookeeper:zookeeper:3.4.6
(depends on 3.7.0.Final)
[warn]
[warn]     * com.google.guava:guava:18.0 is selected over 12.0.1
[warn]         +- org.apache.flink:flink-connector-kinesis_2.10:1.3.2
(depends on 18.0)
[warn]         +- org.apache.hbase:hbase-prefix-tree:1.3.0
(depends on 12.0.1)
[warn]         +- org.apache.hbase:hbase-procedure:1.3.0
(depends on 12.0.1)
[warn]         +- org.apache.hbase:hbase-client:1.3.0
(depends on 12.0.1)
[warn]         +- org.apache.hbase:hbase-common:1.3.0
(depends on 12.0.1)
[warn]         +- org.apache.hbase:hbase-server:1.3.0
(depends on 12.0.1)
[warn]
[warn]     * io.netty:netty-all:4.0.27.Final is selected over 4.0.23.Final
[warn]         +- org.apache.flink:flink-runtime_2.10:1.3.2
(depends on 4.0.27.Final)
[warn]         +- org.apache.flink:flink-shaded-hadoop2:1.3.2
(depends on 4.0.27.Final)
[warn]         +- org.apache.hbase:hbase-prefix-tree:1.3.0
(depends on 4.0.23.Final)
[warn]         +- org.apache.hbase:hbase-client:1.3.0
(depends on 4.0.23.Final)
[warn]         +- org.apache.hbase:hbase-server:1.3.0
(depends on 4.0.23.Final)
[warn]
[warn]     * junit:junit:4.12 is selected over 3.8.1
[warn]         +- org.apache.hbase:hbase-protocol:1.3.0
(depends on 4.12)
[warn]         +- org.apache.hbase:hbase-annotations:1.3.0
(depends on 4.12)
[warn]         +- org.apache.hbase:hbase-prefix-tree:1.3.0
(depends on 4.12)
[warn]         +- org.apache.hbase:hbase-procedure:1.3.0
(depends on 4.12)
[warn]         +- org.apache.hbase:hbase-client:1.3.0
(depends on 4.12)
[warn]         +- org.apache.hbase:hbase-common:1.3.0
(depends on 4.12)
[warn]         +- org.apache.hbase:hbase-server:1.3.0
(depends on 4.12)
[warn]         +- jline:jline:0.9.94
(depends on 3.8.1)

And here I am asking for help here.

Thank you very much for your attention,
Kind regards,

Federico D'Ambrosio

Reply via email to