0

这是我安装 pyspark 二进制文件的一些上下文。

在我的公司,我们使用 Cloudera Data Science Workbench (CDSW)。当我们为新项目创建会话时,我猜它是来自特定 Dockerfile 的图像。并且在这个 dockerfile 中推送了 CDH 二进制文件的安装和配置。

现在我希望在 CDSW 之外使用这些配置。我有一个 Kubernetes 集群,我在其中部署 web 应用程序。我想在 Yarn 模式下使用 spark 为 webapps 部署非常小的资源。

我所做的是将 tar.gz 中的所有二进制文件和配置文件/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p4484.8795072/var/lib/cdsw/client-config/. 然后在容器或 WSL2 实例中解压缩它们。

我没有像我应该做的那样把所有东西都拆开包装,而是把它们/var/放在and中。我为什么这样做?因为我可能想在我的 kubernetes 中使用挂载的卷并在容器之间共享二进制文件。/opt/$HOME/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p4484.8795072/*$USER/etc/client-config/*

我已经sed修改了所有配置文件以适应路径:

  • 火花环境.sh
  • 拓扑.py
  • 任何 *.txt、*.sh、*.py

所以我设法beeline hadoop hdfs hbase用文件夹指向它们hadoop-conf。我可以使用pyspark,但只能在本地模式下使用。但我真正想要的是使用pysparkwith yarn

所以我设置了一堆环境变量来完成这项工作:

export HADOOP_CONF_DIR=$HOME/etc/client-config/spark-conf/yarn-conf
export SPARK_CONF_DIR=$HOME/etc/client-config/spark-conf/yarn-conf
export JAVA_HOME=/usr/local
export BIN_DIR=$HOME/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p4484.8795072/bin
export PATH=$BIN_DIR:$JAVA_HOME/bin:$PATH
export PYSPARK_PYTHON=python3.6
export PYSPARK_DRIVER_PYTHON=python3.6
export OPENBLAS_NUM_THREADS=1
export MKL_NUM_THREADS=1

export SPARK_HOME=/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p4484.8795072/lib/spark
export PYSPARK_ARCHIVES_PATH=$(ZIPS=("$CDH_DIR"/lib/spark/python/lib/*.zip); IFS=:; echo "${ZIPS[*]}"):$PYSPARK_ARCHIVES_PATH
export SPARK_DIST_CLASSPATH=$HOME/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p4484.8795072/lib/hadoop/client/accessors-smart-1.2.jar:<ALL OTHER JARS FOR EVERY BINARIES>

无论如何,所有路径都存在并且有效。而且由于我已经 sed 了所有配置文件,它们也会生成与导出的相同的路径。

我像这样启动我的 pyspark 二进制文件:

pyspark --conf "spark.master=yarn" --properties-file $HOME/etc/client-config/spark-conf/spark-defaults.conf --verbose

仅供参考,它使用的是 pyspark 2.4.0。我已经安装了Java(TM) SE Runtime Environment (build 1.8.0_131-b11). 我在 CDSW 实例上找到的相同。我用公司的公共证书添加了密钥库。而且我还为 kerberos 身份验证生成了一个密钥表。他们两个都在工作,因为我可以hdfs使用HADOOP_CONF_DIR=$HOME/etc/client-config/hadoop-conf

在详细模式下,我可以看到 spark 的所有细节和配置。当我从 CDSW 会话中比较它时,它们完全相同(修改了路径,例如:

Using properties file: /home/docker4sg/etc/client-config/spark-conf/spark-defaults.conf
Adding default property: spark.lineage.log.dir=/var/log/spark/lineage
Adding default property: spark.port.maxRetries=250
Adding default property: spark.serializer=org.apache.spark.serializer.KryoSerializer
Adding default property: spark.driver.log.persistToDfs.enabled=true
Adding default property: spark.yarn.jars=local:/home/docker4sg/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p4484.8795072/lib/spark/jars/*,local:/home/docker4sg/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p4484.8795072/lib/spark/hive/*
...

几秒钟后,它无法创建sparkSession

Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
2022-02-22 14:44:14 WARN  Client:760 - Exception encountered while connecting to the server : org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category READ is not supported in state standby. Visit https://s.apache.org/sbnn-error
2022-02-22 14:44:14 ERROR SparkContext:94 - Error initializing SparkContext.
java.lang.IllegalArgumentException: java.net.URISyntaxException: Expected scheme-specific part at index 12: pyspark.zip:
...
Caused by: java.net.URISyntaxException: Expected scheme-specific part at index 12: pyspark.zip:
...
2022-02-22 14:44:15 WARN  YarnSchedulerBackend$YarnSchedulerEndpoint:69 - Attempted to request executors before the AM has registered!
2022-02-22 14:44:15 WARN  MetricsSystem:69 - Stopping a MetricsSystem that is not running
2022-02-22 14:44:15 WARN  SparkContext:69 - Another SparkContext is being constructed (or threw an exception in its constructor).  This may indicate an error, since only one SparkContext may be running in this JVM (see SPARK-2243). The other SparkContext was created at:
org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58

据我了解,它因我不确定的原因而失败,然后尝试退回到其他模式。那也失败了。

在配置文件spark-conf/yarn-conf/yarn-site.xml中,指定它使用的是zookeeper

  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>corporate.machine.node1.name.net:9999,corporate.machine.node2.name.net:9999,corporate.machine.node3.name.net:9999</value>
  </property>

会不会是 Yarn 集群不接受来自随机 IP(kuber IP 或来自计算机的个人 IP)的流量?对我来说,我正在处理的 IP 不在白名单上,但目前我无法要求将我的 IP 添加到白名单中。我怎么能确定我正在寻找好的方向?

编辑1:

正如评论中所说,的URIpyspark.zip是错误的。我已经修改了我PYSPARK_ARCHIVES_PATH的真实位置pyspark.zip

PYSPARK_ARCHIVES_PATH=local:$HOME/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p4484.8795072/lib/spark/python/lib/py4j-0.10.7-src.zip,local:$HOME/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p4484.8795072/lib/spark/python/lib/pyspark.zip

现在我得到一个错误UnknownHostException

org.apache.spark.SparkException: Uncaught exception: org.apache.spark.SparkException: Exception thrown in awaitResult
...
Caused by: java.io.IOException: Failed to connect to <HOSTNAME>:13250
...
Caused by: java.net.UnknownHostException: <HOSTNAME>
...
4

0 回答 0