Hi,

I’m glad that you have found a solution to your problem :)

To shorten feedback you can/should test as much logic as possible using smaller 
unit tests and some small scale integration tests: 
https://ci.apache.org/projects/flink/flink-docs-master/dev/stream/testing.html 
<https://ci.apache.org/projects/flink/flink-docs-master/dev/stream/testing.html>
 . Usually there is no need for starting up full Flink cluster and submitting 
your WIP job during development. You can do such end to end tests only once 
before committing/pushing/merging/deploying. 

Piotrek 

> On 6 Aug 2018, at 10:03, Joshua Fan <joshuafat...@gmail.com> wrote:
> 
> Hi Piotr
> 
> Thank you for your kindly suggestion.
> 
> Yes, there was surely a warning when a path like file:// is set. I later set 
> the -yt to a directory, and the jars in the directory was uploaded to TM, but 
> the flink run command failed to submit the job because of 
> ClassNotFoundException.
> 
> I finally realize that flink just want the user to use a fat jar to submit 
> the jar and its dependency but not a dynamic way to upload dependency when 
> submitting.
> 
> It's right when I submit a job in production environment, but in test 
> environment, users may change the business logic many times, they do not want 
> to wait a long time(to make the fat jar using maven,to transfer it to a flink 
> client node, to run it, I have to admit it is a long time.) to test it in 
> flink.
> 
> It seems I have to find a way to shorten the time my users cost.
> 
> Yours Sincerely
> 
> Joshua
> 
> On Fri, Aug 3, 2018 at 9:08 PM, Piotr Nowojski <pi...@data-artisans.com 
> <mailto:pi...@data-artisans.com>> wrote:
> Hi,
> 
>  -yt,--yarnship <arg>                 Ship files in the specified directory
>                                           (t for transfer)
> 
> I guess that you even got a warning in your log files:
> 
> LOG.warn("Ship directory is not a directory. Ignoring it.”);
> 
> I’m not sure, but maybe with `-yt` you do not even need to specify `-C`, just 
> `-yt /home/work/xxx/lib/` should suffice:
> https://stackoverflow.com/a/47412643/8149051 
> <https://stackoverflow.com/a/47412643/8149051>
> 
> Piotrek
> 
> 
>> On 3 Aug 2018, at 14:41, Joshua Fan <joshuafat...@gmail.com 
>> <mailto:joshuafat...@gmail.com>> wrote:
>> 
>> hi Piotr
>> 
>> I give up to use big c to do such a thing. Big c requires the value to be a 
>> java URL, but the java URL only supports  
>> file,ftp,gopher,http,https,jar,mailto,netdoc. That's why I can not do it 
>> with a hdfs location.
>> 
>> For yt option, I think I should do something more.
>> 
>> Yours
>> Joshua
>> 
>> On Fri, Aug 3, 2018 at 8:11 PM, Joshua Fan <joshuafat...@gmail.com 
>> <mailto:joshuafat...@gmail.com>> wrote:
>> Hi Piotr
>> 
>> I just tried the yt option, like your suggestion, change -C  
>> file:/home/work/xxx/lib/commons-math3-3.5.jar to -yt  
>> file:/home/work/xxx/lib/commons-math3-3.5.jar, but it even fails to submit, 
>> reporting exception "Caused by: java.lang.ClassNotFoundException: 
>> org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer08
>>      at java.net.URLClassLoader.findClass(URLClassLoader.java:381)".
>> 
>> big c can submit the job but the job can not run in cluster on yarn, yt just 
>> can not submit.
>> 
>> I am trying to change the  "-C  
>> file:/home/work/xxx/lib/commons-math3-3.5.jar" to  "-C  
>> hdfs://namenode1/home/ <>work/xxx/lib/commons-math3-3.5.jar", but 
>> Clifrontend error was caught.
>> I am still on it now, will report it later.
>> 
>> Yours
>> Joshua
>> 
>> On Fri, Aug 3, 2018 at 7:58 PM, Piotr Nowojski <pi...@data-artisans.com 
>> <mailto:pi...@data-artisans.com>> wrote:
>> Hi Joshua,
>> 
>> Please try (as Paul suggested) using:
>> 
>>      -yt,--yarnship <arg>                 Ship files in the specified 
>> directory
>>                                           (t for transfer)
>> 
>> I guess `-yt /home/work/xxx` should solve your problem :)
>> 
>> Piotrek
>> 
>>> On 3 Aug 2018, at 13:54, Joshua Fan <joshuafat...@gmail.com 
>>> <mailto:joshuafat...@gmail.com>> wrote:
>>> 
>>> Hi Piotr
>>> 
>>> Thank you for your advice. I submit the dependency jar from local machine, 
>>> they does not exist in yarn container machine. Maybe I misunderstand the 
>>> option big c, it can not do such a thing.
>>> 
>>> Joshua  
>>> 
>>> On Fri, Aug 3, 2018 at 7:17 PM, Piotr Nowojski <pi...@data-artisans.com 
>>> <mailto:pi...@data-artisans.com>> wrote:
>>> Hi,
>>> 
>>> Are those paths:
>>>     file: '/home/work/xxx/lib/commons-math3-3.5.jar' (missing)
>>>     file: '/home/work/xxx/lib/flink-connector-kafka-0.8_2.11-1.4.2.jar' 
>>> (missing)
>>> 
>>> accessible from the inside of your container? 
>>> 
>>> bin/flink run --help
>>> (…)
>>>      -C,--classpath <url>                 Adds a URL to each user code
>>>                                           classloader  on all nodes in the
>>>                                           cluster. The paths must specify a
>>>                                           protocol (e.g. file://) and be
>>>                                           accessible on all nodes (e.g. by 
>>> means
>>>                                           of a NFS share). You can use this
>>>                                           option multiple times for 
>>> specifying
>>>                                           more than one URL. The protocol 
>>> must
>>>                                           be supported by the {@link
>>>                                           java.net.URLClassLoader}.
>>> 
>>> Other nit, maybe the problem is with single slash after “file:”. You have 
>>> file:/home/...
>>> While it might need to be
>>> file://home/ <>...
>>> 
>>> Piotrek
>>> 
>>>> On 3 Aug 2018, at 13:03, Joshua Fan <joshuafat...@gmail.com 
>>>> <mailto:joshuafat...@gmail.com>> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> I'd like to submit a job with dependency jars by flink run, but it failed.
>>>> 
>>>> Here is the script,
>>>> 
>>>> /usr/bin/hadoop/software/flink-1.4.2/bin/flink run \
>>>> -m yarn-cluster -yn 1 -ys 8 -yjm 2148 -ytm 4096 -ynm jarsTest \
>>>> -c StreamExample \
>>>> -C file:/home/work/xxx/lib/commons-math3-3.5.jar \
>>>> -C file:/home/work/xxx/lib/flink-connector-kafka-0.8_2.11-1.4.2.jar \
>>>> ...
>>>> xxx-1.0.jar
>>>> 
>>>> As described in 
>>>> https://ci.apache.org/projects/flink/flink-docs-release-1.5/ops/cli.html#usage
>>>>  
>>>> <https://ci.apache.org/projects/flink/flink-docs-release-1.5/ops/cli.html#usage>
>>>>  , "-C" means to provide the dependency jar.
>>>> 
>>>> After I execute the command, the job succeed to submit, but can not run in 
>>>> flink cluster on yarn. Exceptions is like below:
>>>> 
>>>> org.apache.flink.streaming.runtime.tasks.StreamTaskException: Cannot load 
>>>> user class: 
>>>> org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer08
>>>> ClassLoader info: URL ClassLoader:
>>>>     file: '/home/work/xxx/lib/commons-math3-3.5.jar' (missing)
>>>>     file: '/home/work/xxx/lib/flink-connector-kafka-0.8_2.11-1.4.2.jar' 
>>>> (missing)
>>>>     .......
>>>> Class not resolvable through given classloader.
>>>>    at 
>>>> org.apache.flink.streaming.api.graph.StreamConfig.getStreamOperator(StreamConfig.java:232)
>>>>    at 
>>>> org.apache.flink.streaming.runtime.tasks.OperatorChain.<init>(OperatorChain.java:95)
>>>>    at 
>>>> org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:231)
>>>>    at org.apache.flink.runtime.taskmanager.Task.run(Task.java:718)
>>>>    at java.lang.Thread.run(Thread.java:745)
>>>> 
>>>> It appears that the two dependency jar cannot be found in TaskManager, so 
>>>> I dig into the source code, from CliFrontend to PackagedProgram to 
>>>> ClusterClient to JobGraph. It seems like the dependency jars is put in 
>>>> classpath and userCodeClassLoader in PackagedProgram, but never upload to 
>>>> the BlobServer in JobGraph where the xxx-1.0.jar is uploaded.
>>>> 
>>>> Am I missing something? In Flink 1.4.2, dependency jar is not supported?
>>>> 
>>>> Hope someone can give me some hint.
>>>> 
>>>> Appreciate it very mush.
>>>> 
>>>> 
>>>> Yours Sincerely
>>>> 
>>>> Joshua
>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
>> 
> 
> 

Reply via email to