+1
I ran into that issue as well. Would be great to have that in the docs!

2016-09-09 11:49 GMT+02:00 Robert Metzger <rmetz...@apache.org>:

> Hi Steffen,
>
> I think it would be good to add it to the documentation.
> Would you like to open a pull request?
>
>
> Regards,
> Robert
>
>
> On Mon, Sep 5, 2016 at 10:26 PM, Steffen Hausmann <
> stef...@hausmann-family.de> wrote:
>
>> Thanks Aris for your explanation!
>>
>> A guava version mismatch was indeed the problem. But in addition to
>> shading the guava dependencies, I encountered another issue caused by
>> conflicting files in META-INF/services:
>>
>> RemoteTransportException[[Failed to deserialize response of type
>>> [org.elasticsearch.action.admin.cluster.node.liveness.LivenessResponse]]];
>>> nested: TransportSerializationException[Failed to deserialize response
>>> of type 
>>> [org.elasticsearch.action.admin.cluster.node.liveness.LivenessResponse]];
>>> nested: ExceptionInInitializerError; nested: IllegalArgumentException[An
>>> SPI class of type org.apache.lucene.codecs.PostingsFormat with name
>>> 'Lucene50' does not exist.  You need to add the corresponding JAR file
>>> supporting this SPI to your classpath.  The current classpath supports the
>>> following names: [es090, completion090, XBloomFilter]];
>>>
>>
>> By adding the following bits to my pom.xml file, the conflicting files
>> are appended instead of overwritten and hence the ElasticSearch sink works
>> as expected:
>>
>> <transformer implementation="org.apache.maven.plugins.shade.resource.Appe
>>> ndingTransformer">
>>>     <resource>META-INF/services/org.apache.lucene.codecs.Codec</
>>> resource>
>>> </transformer>
>>> <transformer implementation="org.apache.mav
>>> en.plugins.shade.resource.AppendingTransformer">
>>>     <resource>META-INF/services/org.apache.lucene.codecs.DocValu
>>> esFormat</resource>
>>> </transformer>
>>> <transformer implementation="org.apache.mav
>>> en.plugins.shade.resource.AppendingTransformer">
>>>    <resource>META-INF/services/org.apache.lucene.codecs.Postin
>>> gsFormat</resource>
>>> </transformer>
>>>
>>
>> Maybe this is something that can be added to the documentation?
>>
>> Thanks,
>> Steffen
>>
>> On 01/09/2016 12:22, aris kol wrote:
>>
>>> Classic problem of every uber-jar containing Hadoop dependencies and
>>> being deployed on Yarn.
>>>
>>> What actually happens is that some Hadoop dependency relies on an
>>> old version of guava (11 in this case), which doesn't have the method.
>>> You may have assembled your fat-jar properly, but because Hadoop deps
>>> get introduced to your classpath before your own, you invoke the method
>>> using the guava 11 version of the class.
>>>
>>> I fixed that by adding this line:
>>>
>>>
>>> ++ Seq(assemblyShadeRules in assembly :=
>>> Seq(ShadeRule.rename("com.google.common.**" -> "shaded.@1").inAll))
>>>
>>> on the artefact that gets deployed on flink.
>>>
>>> What this practically does is to shade the guava dependencies. Instead
>>> of containing references to com.google.common your build will reference
>>> shaded.com.google.common and as a result it will use the proper class in
>>> your fat jar.
>>> Get a bit creative with the name (ie use shadedhausmann instead of
>>> shaded) to avoid colliding with external deps shading stuff (something
>>> you have to do when using guava, joda, jackson etc).
>>>
>>> Let me know if this helped.
>>>
>>> Aris
>>>
>>> ------------------------------------------------------------------------
>>> *From:* Steffen Hausmann <stef...@hausmann-family.de>
>>> *Sent:* Thursday, September 1, 2016 8:58 AM
>>> *To:* user@flink.apache.org
>>> *Subject:* NoClassDefFoundError with ElasticsearchSink on Yarn
>>>
>>>
>>> Hi there,
>>>
>>> I’m running a flink program that reads from a Kinesis stream and
>>> eventually writes to an Elasticsearch2 sink. When I’m running the
>>> program locally from the IDE, everything seems to work fine, but when
>>> I’m executing the same program on an EMR cluster with Yarn, a
>>> NoClassDefFoundError occurs:java.lang.NoSuchMethodError:
>>>
>>> com.google.common.util.concurrent.MoreExecutors.directExecut
>>> or()Ljava/util/concurrent/Executor;
>>>         at
>>> org.elasticsearch.threadpool.ThreadPool.<clinit>(ThreadPool.java:190)
>>>         at
>>> org.elasticsearch.client.transport.TransportClient$Builder.b
>>> uild(TransportClient.java:133)
>>>         at
>>> org.apache.flink.streaming.connectors.elasticsearch2.Elastic
>>> searchSink.open(ElasticsearchSink.java:164)
>>>         at
>>> org.apache.flink.api.common.functions.util.FunctionUtils.ope
>>> nFunction(FunctionUtils.java:38)
>>>         at
>>> org.apache.flink.streaming.api.operators.AbstractUdfStreamOp
>>> erator.open(AbstractUdfStreamOperator.java:91)
>>>         at
>>> org.apache.flink.streaming.runtime.tasks.StreamTask.openAllO
>>> perators(StreamTask.java:376)
>>>         at
>>> org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(S
>>> treamTask.java:256)
>>>         at org.apache.flink.runtime.taskmanager.Task.run(Task.java:584)
>>>         at java.lang.Thread.run(Thread.java:745)
>>>
>>> I’ve installed flink on an EMR cluster from the binary distribution
>>> flink-1.1.1-bin-hadoop27-scala_2.10.tgzand the jar file that is executed
>>> on the cluster is build with mvn clean package(I’ve attached the pom.xml
>>> for reference).
>>>
>>> There is a thread on this list that seems to be related, but I’m afraid
>>> I couldn’t draw any conclusions from it:
>>> http://apache-flink-user-mailing-list-archive.2336050.n4.nab
>>> ble.com/classpath-issue-on-yarn-tt6442.html#none
>>>
>>> Any idea, what’s wrong?
>>>
>>> Thanks,
>>> Steffen
>>>
>>>
>

Reply via email to