【问题标题】:Spark on Kubernetes with Minio - Postgres -> Minio -unable to create executor due toSpark on Kubernetes with Minio - Postgres -> Minio - 无法创建执行器,因为
【发布时间】:2021-12-22 10:05:40
【问题描述】:

您好,我在为 kubernetes 中的 spark-submit 提供依赖项 jar 时遇到错误。

/usr/middleware/spark-3.1.1-bin-hadoop3.2/bin/spark-submit --master k8s://https://112.23.123.23:6443 --deploy-mode cluster --name spark-postgres-minio-kubernetes  --jars file:///AirflowData/kubernetes/externalJars/postgresql-42.2.14.jar  --driver-class-path file:///AirflowData/kubernetes/externalJars/postgresql-42.2.14.jar --conf spark.executor.instances=1 --conf spark.kubernetes.namespace=spark --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark --conf spark.kubernetes.file.upload.path=s3a://daci-dataintegration/spark-operator-on-k8s/code --conf spark.hadoop.fs.s3a.fast.upload=true --conf spark.kubernetes.container.image=hostname:5000/spark-py:spark3.1.2  file:///AirflowData/kubernetes/python/postgresminioKube.py

下面是要执行的代码。 S3 minio 和配置所需的 jars 放在 spark_home/conf 和 spark_home/jars 中,并创建 docker 映像。

from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql import functions as F
spark = SparkSession.builder.appName("Postgres-Minio-Kubernetes").getOrCreate()
import json
#spark = SparkSession.builder.config('spark.driver.extraClassPath', '/hadoop/externalJars/db2jcc4.jar').getOrCreate()
jdbcUrl = "jdbc:postgresql://{0}:{1}/{2}".format("hosnamme", "port", "db")
connectionProperties = {
  "user" : "username",
  "password" : "password",
  "driver": "org.postgresql.Driver",
  "fetchsize" : "100000"
}
pushdown_query = "(select * from public.employees) emp_als"
df = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, column="employee_id", lowerBound=1, upperBound=100, numPartitions=2, properties=connectionProperties)
df.write.format('csv').options(delimiter=',').mode('overwrite').save('s3a://daci-dataintegration/spark-operator-on-k8s/data/postgres-minio-csv/')
df.write.format('parquet').options(delimiter='|').options(header=True).mode('overwrite').save('s3a://daci-dataintegration/spark-operator-on-k8s/data/postgres-minio-csv/')

错误如下。出于某种原因,它正在尝试执行 jar

21/11/09 17:05:44 INFO SparkContext: Added JAR file:/tmp/spark-d987d7e7-9d49-4523-8415-1e438da1730e/postgresql-42.2.14.jar at spark://spark-postgres-minio-kubernetes-49d7d77d05a980e5-driver-svc.spark.svc:7078/jars/postgresql-42.2.14.jar with timestamp 1636477543573

21/11/09 17:05:49 ERROR TaskSchedulerImpl: Lost executor 1 on 192.168.216.12: Unable to create executor due to ./postgresql-42.2.14.jar

【问题讨论】:

  • 是否有属于 ERROR 行的堆栈跟踪?
  • 路径 /AirflowData/kubernetes/externalJars/postgresql-42.2.14.jar 是在您提交的机器上还是在 hostname:5000/spark-py:spark3.1.2 容器映像内或其他地方?
  • ...无论哪种方式,请仔细查看 Spark on Kubernetes 文档的 Dependency Management section
  • 路径挂载在所有节点上。但它只有在 jar 内置在图像中时才有效。
  • 您还在使用您最初发布的命令吗?根据我引用的文档部分更改它可能会有所帮助。

标签: apache-spark kubernetes pyspark minio


【解决方案1】:

外部 jar 被添加到 /opt/spark/work-dir 并且它没有访问权限。所以我更改了 dockerfile 以访问该文件夹,然后它就可以工作了。

RUN chmod 777 /opt/spark/work-dir

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多