Thank you for the clarification. It works! On Fri, Jan 29, 2016 at 6:36 PM Mao Geng <m...@sumologic.com> wrote:
> Sathish, > > The constraint you described is Marathon's, not Mesos's :) > > Spark.mesos.constraints are applied to slave attributes like tachyon=true > ;us-east-1=false, as described in > https://issues.apache.org/jira/browse/SPARK-6707. > > Cheers, > -Mao > > On Fri, Jan 29, 2016 at 2:51 PM, Sathish Kumaran Vairavelu < > vsathishkuma...@gmail.com> wrote: > >> Hi >> >> Quick question. How to pass constraint [["hostname", "CLUSTER", " >> specific.node.com"]] to mesos? >> >> I was trying --conf spark.mesos.constraints=hostname:specific.node.com. >> But it didn't seems working >> >> >> Please help >> >> >> Thanks >> >> Sathish >> >> On Thu, Jan 28, 2016 at 6:52 PM Mao Geng <m...@sumologic.com> wrote: >> >>> From my limited knowledge, only limited options such as network mode, >>> volumes, portmaps can be passed through. See >>> https://github.com/apache/spark/pull/3074/files. >>> >>> https://issues.apache.org/jira/browse/SPARK-8734 is open for exposing >>> all docker options to spark. >>> >>> -Mao >>> >>> On Thu, Jan 28, 2016 at 1:55 PM, Sathish Kumaran Vairavelu < >>> vsathishkuma...@gmail.com> wrote: >>> >>>> Thank you., I figured it out. I have set executor memory to minimal and >>>> it works., >>>> >>>> Another issue has come.. I have to pass --add-host option while running >>>> containers in slave nodes.. Is there any option to pass docker run >>>> parameters from spark? >>>> On Thu, Jan 28, 2016 at 12:26 PM Mao Geng <m...@sumologic.com> wrote: >>>> >>>>> Sathish, >>>>> >>>>> I guess the mesos resources are not enough to run your job. You might >>>>> want to check the mesos log to figure out why. >>>>> >>>>> I tried to run the docker image with "--conf spark.mesos.coarse=false" >>>>> and "true". Both are fine. >>>>> >>>>> Best, >>>>> Mao >>>>> >>>>> On Wed, Jan 27, 2016 at 5:00 PM, Sathish Kumaran Vairavelu < >>>>> vsathishkuma...@gmail.com> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> On the same Spark/Mesos/Docker setup, I am getting warning "Initial >>>>>> Job has not accepted any resources; check your cluster UI to ensure that >>>>>> workers are registered and have sufficient resources". I am running in >>>>>> coarse grained mode. Any pointers on how to fix this issue? Please help. >>>>>> I >>>>>> have updated both docker.properties and spark-default.conf with >>>>>> spark.mesos.executor.docker.image >>>>>> and other properties. >>>>>> >>>>>> >>>>>> Thanks >>>>>> >>>>>> Sathish >>>>>> >>>>>> On Wed, Jan 27, 2016 at 9:58 AM Sathish Kumaran Vairavelu < >>>>>> vsathishkuma...@gmail.com> wrote: >>>>>> >>>>>>> Thanks a lot for your info! I will try this today. >>>>>>> On Wed, Jan 27, 2016 at 9:29 AM Mao Geng <m...@sumologic.com> wrote: >>>>>>> >>>>>>>> Hi Sathish, >>>>>>>> >>>>>>>> The docker image is normal, no AWS profile included. >>>>>>>> >>>>>>>> When the driver container runs with --net=host, the driver host's >>>>>>>> AWS profile will take effect so that the driver can access the >>>>>>>> protected s3 >>>>>>>> files. >>>>>>>> >>>>>>>> Similarly, Mesos slaves also run Spark executor docker container >>>>>>>> in --net=host mode, so that the AWS profile of Mesos slaves will take >>>>>>>> effect. >>>>>>>> >>>>>>>> Hope it helps, >>>>>>>> Mao >>>>>>>> >>>>>>>> On Jan 26, 2016, at 9:15 PM, Sathish Kumaran Vairavelu < >>>>>>>> vsathishkuma...@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi Mao, >>>>>>>> >>>>>>>> I want to check on accessing the S3 from Spark docker in Mesos. >>>>>>>> The EC2 instance that I am using has the AWS profile/IAM included. >>>>>>>> Should >>>>>>>> we build the docker image with any AWS profile settings or --net=host >>>>>>>> docker option takes care of it? >>>>>>>> >>>>>>>> Please help >>>>>>>> >>>>>>>> >>>>>>>> Thanks >>>>>>>> >>>>>>>> Sathish >>>>>>>> >>>>>>>> On Tue, Jan 26, 2016 at 9:04 PM Mao Geng <m...@sumologic.com> wrote: >>>>>>>> >>>>>>>>> Thank you very much, Jerry! >>>>>>>>> >>>>>>>>> I changed to "--jars >>>>>>>>> /opt/spark/lib/hadoop-aws-2.7.1.jar,/opt/spark/lib/aws-java-sdk-1.7.4.jar" >>>>>>>>> then it worked like a charm! >>>>>>>>> >>>>>>>>> From Mesos task logs below, I saw Mesos executor downloaded the >>>>>>>>> jars from the driver, which is a bit unnecessary (as the docker image >>>>>>>>> already has them), but that's ok - I am happy seeing Spark + Mesos + >>>>>>>>> Docker >>>>>>>>> + S3 worked together! >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> Mao >>>>>>>>> >>>>>>>>> 16/01/27 02:54:45 INFO Executor: Using REPL class URI: >>>>>>>>> http://172.16.3.98:33771 >>>>>>>>> 16/01/27 02:55:12 INFO CoarseGrainedExecutorBackend: Got assigned >>>>>>>>> task 0 >>>>>>>>> 16/01/27 02:55:12 INFO Executor: Running task 0.0 in stage 0.0 (TID 0) >>>>>>>>> 16/01/27 02:55:12 INFO Executor: Fetching >>>>>>>>> http://172.16.3.98:3850/jars/hadoop-aws-2.7.1.jar with timestamp >>>>>>>>> 1453863280432 >>>>>>>>> 16/01/27 02:55:12 INFO Utils: Fetching >>>>>>>>> http://172.16.3.98:3850/jars/hadoop-aws-2.7.1.jar to >>>>>>>>> /tmp/spark-7b8e1681-8a62-4f1d-9e11-fdf8062b1b08/fetchFileTemp1518118694295619525.tmp >>>>>>>>> 16/01/27 02:55:12 INFO Utils: Copying >>>>>>>>> /tmp/spark-7b8e1681-8a62-4f1d-9e11-fdf8062b1b08/-19880839621453863280432_cache >>>>>>>>> to /./hadoop-aws-2.7.1.jar >>>>>>>>> 16/01/27 02:55:12 INFO Executor: Adding file:/./hadoop-aws-2.7.1.jar >>>>>>>>> to class loader >>>>>>>>> 16/01/27 02:55:12 INFO Executor: Fetching >>>>>>>>> http://172.16.3.98:3850/jars/aws-java-sdk-1.7.4.jar with timestamp >>>>>>>>> 1453863280472 >>>>>>>>> 16/01/27 02:55:12 INFO Utils: Fetching >>>>>>>>> http://172.16.3.98:3850/jars/aws-java-sdk-1.7.4.jar to >>>>>>>>> /tmp/spark-7b8e1681-8a62-4f1d-9e11-fdf8062b1b08/fetchFileTemp8868621397726761921.tmp >>>>>>>>> 16/01/27 02:55:12 INFO Utils: Copying >>>>>>>>> /tmp/spark-7b8e1681-8a62-4f1d-9e11-fdf8062b1b08/8167072821453863280472_cache >>>>>>>>> to /./aws-java-sdk-1.7.4.jar >>>>>>>>> 16/01/27 02:55:12 INFO Executor: Adding >>>>>>>>> file:/./aws-java-sdk-1.7.4.jar to class loader >>>>>>>>> >>>>>>>>> On Tue, Jan 26, 2016 at 5:40 PM, Jerry Lam <chiling...@gmail.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Hi Mao, >>>>>>>>>> >>>>>>>>>> Can you try --jars to include those jars? >>>>>>>>>> >>>>>>>>>> Best Regards, >>>>>>>>>> >>>>>>>>>> Jerry >>>>>>>>>> >>>>>>>>>> Sent from my iPhone >>>>>>>>>> >>>>>>>>>> On 26 Jan, 2016, at 7:02 pm, Mao Geng <m...@sumologic.com> wrote: >>>>>>>>>> >>>>>>>>>> Hi there, >>>>>>>>>> >>>>>>>>>> I am trying to run Spark on Mesos using a Docker image as >>>>>>>>>> executor, as mentioned >>>>>>>>>> http://spark.apache.org/docs/latest/running-on-mesos.html#mesos-docker-support >>>>>>>>>> . >>>>>>>>>> >>>>>>>>>> I built a docker image using the following Dockerfile (which is >>>>>>>>>> based on >>>>>>>>>> https://github.com/apache/spark/blob/master/docker/spark-mesos/Dockerfile >>>>>>>>>> ): >>>>>>>>>> >>>>>>>>>> FROM mesosphere/mesos:0.25.0-0.2.70.ubuntu1404 >>>>>>>>>> >>>>>>>>>> # Update the base ubuntu image with dependencies needed for Spark >>>>>>>>>> RUN apt-get update && \ >>>>>>>>>> apt-get install -y python libnss3 openjdk-7-jre-headless curl >>>>>>>>>> >>>>>>>>>> RUN curl >>>>>>>>>> http://www.carfab.com/apachesoftware/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz >>>>>>>>>> | tar -xzC /opt && \ >>>>>>>>>> ln -s /opt/spark-1.6.0-bin-hadoop2.6 /opt/spark >>>>>>>>>> ENV SPARK_HOME /opt/spark >>>>>>>>>> ENV MESOS_NATIVE_JAVA_LIBRARY /usr/local/lib/libmesos.so >>>>>>>>>> >>>>>>>>>> Then I successfully ran spark-shell via this docker command: >>>>>>>>>> docker run --rm -it --net=host <registry>/<image>:<tag> >>>>>>>>>> /opt/spark/bin/spark-shell --master mesos://<master_host>:5050 --conf >>>>>>>>>> <registry>/<image>:<tag> >>>>>>>>>> >>>>>>>>>> So far so good. Then I wanted to call sc.textFile to load a file >>>>>>>>>> from S3, but I was blocked by some issues which I couldn't figure >>>>>>>>>> out. I've >>>>>>>>>> read >>>>>>>>>> https://dzone.com/articles/uniting-spark-parquet-and-s3-as-an-alternative-to >>>>>>>>>> and >>>>>>>>>> http://blog.encomiabile.it/2015/10/29/apache-spark-amazon-s3-and-apache-mesos, >>>>>>>>>> learned that I need to add hadood-aws-2.7.1 and aws-java-sdk-2.7.4 >>>>>>>>>> into the >>>>>>>>>> executor and driver's classpaths, in order to access s3 files. >>>>>>>>>> >>>>>>>>>> So, I added following lines into Dockerfile and build a new >>>>>>>>>> image. >>>>>>>>>> RUN curl >>>>>>>>>> https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk/1.7.4/aws-java-sdk-1.7.4.jar >>>>>>>>>> -o /opt/spark/lib/aws-java-sdk-1.7.4.jar >>>>>>>>>> RUN curl >>>>>>>>>> http://central.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.7.1/hadoop-aws-2.7.1.jar >>>>>>>>>> -o /opt/spark/lib/hadoop-aws-2.7.1.jar >>>>>>>>>> >>>>>>>>>> Then I started spark-shell again with below command: >>>>>>>>>> docker run --rm -it --net=host <registry>/<image>:<tag> >>>>>>>>>> /opt/spark/bin/spark-shell --master mesos://<master_host>:5050 --conf >>>>>>>>>> <registry>/<image>:<tag> --conf >>>>>>>>>> spark.executor.extraClassPath=/opt/spark/lib/hadoop-aws-2.7.1.jar:/opt/spark/lib/aws-java-sdk-1.7.4.jar >>>>>>>>>> --conf >>>>>>>>>> spark.driver.extraClassPath=/opt/spark/lib/hadoop-aws-2.7.1.jar:/opt/spark/lib/aws-java-sdk-1.7.4.jar >>>>>>>>>> >>>>>>>>>> But below command failed when I ran it in spark-shell: >>>>>>>>>> scala> sc.textFile("s3a://<bucket_name>/<file_name>").count() >>>>>>>>>> [Stage 0:> >>>>>>>>>> (0 + 2) / 2]16/01/26 23:05:23 WARN TaskSetManager: Lost task 0.0 >>>>>>>>>> in >>>>>>>>>> stage 0.0 (TID 0, ip-172-16-14-203.us-west-2.compute.internal): >>>>>>>>>> java.lang.RuntimeException: java.lang.ClassNotFoundException: Class >>>>>>>>>> org.apache.hadoop.fs.s3a.S3AFileSystem not found >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2074) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2578) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591) >>>>>>>>>> at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2630) >>>>>>>>>> at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2612) >>>>>>>>>> at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370) >>>>>>>>>> at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.mapred.LineRecordReader.<init>(LineRecordReader.java:107) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67) >>>>>>>>>> at >>>>>>>>>> org.apache.spark.rdd.HadoopRDD$$anon$1.<init>(HadoopRDD.scala:237) >>>>>>>>>> at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:208) >>>>>>>>>> at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:101) >>>>>>>>>> at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306) >>>>>>>>>> at org.apache.spark.rdd.RDD.iterator(RDD.scala:270) >>>>>>>>>> at >>>>>>>>>> org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) >>>>>>>>>> at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306) >>>>>>>>>> at org.apache.spark.rdd.RDD.iterator(RDD.scala:270) >>>>>>>>>> at >>>>>>>>>> org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66) >>>>>>>>>> at org.apache.spark.scheduler.Task.run(Task.scala:89) >>>>>>>>>> at >>>>>>>>>> org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213) >>>>>>>>>> at >>>>>>>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) >>>>>>>>>> at >>>>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) >>>>>>>>>> at java.lang.Thread.run(Thread.java:745) >>>>>>>>>> Caused by: java.lang.ClassNotFoundException: Class >>>>>>>>>> org.apache.hadoop.fs.s3a.S3AFileSystem not found >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1980) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2072) >>>>>>>>>> ... 23 more >>>>>>>>>> >>>>>>>>>> I checked hadoop-aws-2.7.1.jar, >>>>>>>>>> the org.apache.hadoop.fs.s3a.S3AFileSystem class file is in it. I >>>>>>>>>> also >>>>>>>>>> checked the Environment page of driver's Web UI at 4040 port, both >>>>>>>>>> hadoop-aws-2.7.1.jar and aws-java-sdk-1.7.4.jar are in the >>>>>>>>>> Classpath Entries (system path). And following code ran fine in >>>>>>>>>> spark-shell: >>>>>>>>>> scala> val clazz = >>>>>>>>>> Class.forName("org.apache.hadoop.fs.s3a.S3AFileSystem") >>>>>>>>>> clazz: Class[_] = class org.apache.hadoop.fs.s3a.S3AFileSystem >>>>>>>>>> >>>>>>>>>> scala> clazz.getClassLoader() >>>>>>>>>> res2: ClassLoader = sun.misc.Launcher$AppClassLoader@770848b9 >>>>>>>>>> >>>>>>>>>> So, I am confused why the task failed with >>>>>>>>>> "java.lang.ClassNotFoundException" >>>>>>>>>> Exception? Is there something wrong in the command line options I >>>>>>>>>> used to start spark-shell, or in the docker image, or in the >>>>>>>>>> "s3a://" url? >>>>>>>>>> Or is something related to the Docker executor of Mesos? I studied a >>>>>>>>>> bit >>>>>>>>>> https://github.com/apache/spark/blob/branch-1.6/core/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosSchedulerBackend.scala >>>>>>>>>> but didn't understand it well... >>>>>>>>>> >>>>>>>>>> Appreciate if anyone will shed some lights on me. >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> Mao Geng >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>> >>> >