ошибка доступа к файлу при запуске искры на kubernetes - PullRequest
0 голосов
/ 23 мая 2018

Я следовал за Spark в блоге Kubernetes , но дошел до того, что он запускает задание, но не работает внутри рабочих модулей с ошибкой доступа к файлу.

2018-05-22 22:20:51 WARN  TaskSetManager:66 - Lost task 0.0 in stage 0.0 (TID 0, 172.17.0.15, executor 3): java.nio.file.AccessDeniedException: ./spark-examples_2.11-2.3.0.jar
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixCopyFile.copyFile(UnixCopyFile.java:243)
at sun.nio.fs.UnixCopyFile.copy(UnixCopyFile.java:581)
at sun.nio.fs.UnixFileSystemProvider.copy(UnixFileSystemProvider.java:253)
at java.nio.file.Files.copy(Files.java:1274)
at org.apache.spark.util.Utils$.org$apache$spark$util$Utils$$copyRecursive(Utils.scala:632)
at org.apache.spark.util.Utils$.copyFile(Utils.scala:603)
at org.apache.spark.util.Utils$.fetchFile(Utils.scala:478)
at org.apache.spark.executor.Executor$$anonfun$org$apache$spark$executor$Executor$$updateDependencies$5.apply(Executor.scala:755)
at org.apache.spark.executor.Executor$$anonfun$org$apache$spark$executor$Executor$$updateDependencies$5.apply(Executor.scala:747)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:733)
at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99)
at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99)
at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:230)
at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40)
at scala.collection.mutable.HashMap.foreach(HashMap.scala:99)
at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732)
at org.apache.spark.executor.Executor.org$apache$spark$executor$Executor$$updateDependencies(Executor.scala:747)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

Команда iдля запуска SparkPi используется следующий пример:

$DIR/$SPARKVERSION/bin/spark-submit \
--master=k8s://https://192.168.99.101:8443 \
--deploy-mode=cluster \
--conf spark.executor.instances=3 \
--name spark-pi  \
--class org.apache.spark.examples.SparkPi \
--conf spark.kubernetes.container.image=172.30.1.1:5000/myapp/spark-docker:latest \
--conf spark.kubernetes.namespace=$namespace \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
--conf spark.kubernetes.driver.pod.name=spark-pi-driver \
 local:///opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar

При работе с кодом создается впечатление, что файлы банок зажигания копируются во внутреннее местоположение внутри контейнера.Но:

  1. Если это произойдет, поскольку они локальны и уже существуют
  2. Если нужно скопировать объект в другое место в контейнере, как мне сделать эту часть контейнерадоступный для записи, так как он создается главным узлом.

RBAC был настроен следующим образом: (oc get rolebinding -n myapp)

NAME                     ROLE                    USERS       GROUPS                         SERVICE ACCOUNTS   SUBJECTS
admin                    /admin                  developer                                                     
spark-role               /edit                                                              spark         

И учетная запись службы (oc get sa -n myapp)

NAME       SECRETS   AGE
builder    2         18d
default    2         18d
deployer   2         18d
pusher     2         13d
spark      2         12d

Или я тут что-то делаю глупо?

Моя система kubernetes работает внутри Docker Machine (через virtualbox на osx) Я использую:

  • openshiftv3.9.0 + d0f9aed-12
  • kubernetes v1.9.1 + a0ce1bc657

Любые советы по решению этой проблемы приветствуются?

1 Ответ

0 голосов
/ 08 ноября 2018

Я знаю, что это 5-летний пост, но похоже, что не хватает информации, связанной с этой проблемой, поэтому я публикую свой ответ на тот случай, если он кому-нибудь поможет.

Похоже, что выне запускаете процесс внутри контейнера как root, в этом случае вы можете взглянуть по этой ссылке (https://github.com/minishift/minishift/issues/2836).

Поскольку похоже, что вы также используете openshift, вы можете сделать:

oc adm policy add-scc-to-user anyuid -z spark-sa -n spark

В моем случае я использую kubernetes и мне нужно использовать runAsUser: XX . Таким образом, я дал группе доступ на чтение / запись к / opt / spark внутри контейнера, и это решилопроблема, просто добавьте следующую строку в resource-manager / kubernetes / docker / src / main / dockerfiles / spark / Dockerfile.

RUN chmod g+rwx -R /opt/spark

Конечно, вам нужно пересобратьизображения докера вручную или с помощью предоставленного скрипта, как показано ниже.

./bin/docker-image-tool.sh -r YOUR_REPO  -t YOUR_TAG build
./bin/docker-image-tool.sh -r YOUR_REPO -t YOUR_TAG  push
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...