как передать --packages на spark-submit в управляемый кластер Kubernetes? - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь использовать пакеты со снежинным соединителем в spark-submit, используя --packages

, когда я работаю в локальном режиме, он работает нормально. Я могу подключиться к Snowflake table и вернуть Spark DataFrame.

spark-submit --packages net.snowflake:snowflake-jdbc:2.8.1,net.snowflake:spark-snowflake_2.10:2.0.0 test_sf.py

, но когда я пытаюсь передать аргумент --master, он не может указать, что класс Snowflake недоступен.

spark-submit --packages net.snowflake:snowflake-jdbc:2.8.1,net.snowflake:spark-snowflake_2.10:2.0.0 --master spark://spark-master.cluster.local:7077 test_sf.py

Обновление:

Я перепробовал все параметры, такие как --jars, extraClassPath для драйвера и исполнителя и --packages, но, похоже, ничего не работает. Это потому, что какая-то проблема в автономном кластере Spark

Последнее обновление:

Это работает, когда я указываю repository URL в --jars вместо пути к файлу. Поэтому в основном я должен загрузить файлы jar в некоторый репозиторий и указать на это.

журнал ошибок:

Caused by: java.lang.ClassNotFoundException: net.snowflake.spark.snowflake.io.SnowflakePartition
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:67)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2287)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2211)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2069)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
    at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:75)
    at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:114)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    ... 1 more

1 Ответ

1 голос
/ 18 октября 2019

Я отправляю сообщение от имени коллеги, который кое-что понял по этому поводу:

Когда вы запускаете spark-submit со своего ноутбука для запуска рабочей нагрузки на Kubernetes (управляемой или другой), она требует от вас предоставитьОсновной URL-адрес k8s, а не основной URL-адрес искры. Независимо от того, что этот URL-адрес указывает на «spark: //spark-master.cluster.local: 7077», не имеет прямой видимости с вашей машины, возможно, он даже не существует в вашей первоначальной проблеме. При использовании spark submit он создает узлы исполнителя и драйвера внутри k8s, и в это время основной URL-адрес spark будет доступен, но даже тогда основной URL-адрес spark будет доступен только внутри k8s, если линия прямой видимости не станет доступной

В разделе «Обновление»: для передачи пакетов поиск пакетов в локальном репозитории maven или в удаленном репо, если указан путь к удаленному репо, можно использовать параметры --jars. Где вы можете испечь банки внутри контейнера, который будет запускать задание spark, а затем указать локальный путь в переменной --jars

Относится ли что-нибудь из этого к обновлениям и выводам, которые вы сделали в своем обновленном вопросе?

...