我正在嘗試使用 pyspark 和 delta Lake 在 docker 中設定本地開發環境。
我在這里完成了 delta Lake 和 spark 之間版本的兼容性。
我的 Pipfile 中有以下內容(使用 pipenv)
pyspark = {version = "==3.2.2", index = "artifactory-pypi"}
delta-spark={version= "==2.0.0", index = "artifactory-pypi"}
pytest = {version = "==7.1.2", index = "artifactory-pypi"}
pytest-cov ={version= "==3.0.0", index = "artifactory-pypi"}
...other packages
artifactory-pypi 是 pypi 的鏡像。
我已經完成了這個并嘗試設定一個用于單元測驗的 python 專案。代碼已經有了這個
_builder = (
SparkSession.builder.master("local[1]")
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
.config(
"spark.sql.catalog.spark_catalog",
"org.apache.spark.sql.delta.catalog.DeltaCatalog",
)
)
spark: SparkSession = configure_spark_with_delta_pip(_builder).getOrCreate()
當我嘗試使用 pytest 運行單元測驗時,它總是失敗
configure_spark_with_delta_pip(_builder).getOrCreate()
出現無法連接到 maven repo 下載的錯誤
delta-core_2.12;2.0.0
我對 Java 不是很精通,但我已經做了一些挖掘以了解它
/usr/local/lib/python3.9/site-packages/pyspark/jars/
檔案夾中有一個ivy2.jar
檔案,其中顯然包含有關需要哪些 jar 的資訊,并且它試圖聯系 maven 坐標。此連接被拒絕,因為我在公司代理后面。我試過設定
ENV HTTP_PROXY=proxyurl
ENV HTTPS_PROXY=proxyurl
根據this SO post,Maven不尊重http_proxy env變數,答案建議OP在一些組態檔中設定它們。但是在那里,OP 使用的是 Maven 映像,因此已經有了這些 conf 檔案。我沒有這樣的檔案或檔案夾,因為我只是使用 python 影像。只是幕后的那些python包(pyspark)去下載jar。
我還嘗試查看spark 運行時 env 變數, 特別是spark.jars.repositories
看看我是否可以在我的docker-compose.yml
但不起作用的事件中設定它們。
我怎樣才能讓它作業?有人可以建議嗎
- 如果有可能讓這個下載通過一個組織工件去?如果是這樣,我在哪里建議它。例如,對于我所有的 python 包,我使用的是 pypi 鏡像。
- 我也可以手動下載 jars,但是如何以及在哪里復制它們以及設定哪些環境變數以使其作業,例如 PATH ?
順便說一句,這是完整的堆疊跟蹤
:: loading settings :: url = jar:file:/usr/local/lib/python3.9/site-packages/pyspark/jars/ivy-2.4.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
Ivy Default Cache set to: /root/.ivy2/cache
The jars for the packages stored in: /root/.ivy2/jars
io.delta#delta-core_2.12 added as a dependency
:: resolving dependencies :: org.apache.spark#spark-submit-parent-63bca6fa-4932-4c6d-b13f-4a339629fc26;1.0
confs: [default]
:: resolution report :: resolve 84422ms :: artifacts dl 0ms
:: modules in use:
---------------------------------------------------------------------
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| default | 1 | 0 | 0 | 0 || 0 | 0 |
---------------------------------------------------------------------
:: problems summary ::
:::: WARNINGS
module not found: io.delta#delta-core_2.12;2.0.0
==== local-m2-cache: tried
file:/root/.m2/repository/io/delta/delta-core_2.12/2.0.0/delta-core_2.12-2.0.0.pom
-- artifact io.delta#delta-core_2.12;2.0.0!delta-core_2.12.jar:
file:/root/.m2/repository/io/delta/delta-core_2.12/2.0.0/delta-core_2.12-2.0.0.jar
==== local-ivy-cache: tried
/root/.ivy2/local/io.delta/delta-core_2.12/2.0.0/ivys/ivy.xml
-- artifact io.delta#delta-core_2.12;2.0.0!delta-core_2.12.jar:
/root/.ivy2/local/io.delta/delta-core_2.12/2.0.0/jars/delta-core_2.12.jar
==== central: tried
https://repo1.maven.org/maven2/io/delta/delta-core_2.12/2.0.0/delta-core_2.12-2.0.0.pom
-- artifact io.delta#delta-core_2.12;2.0.0!delta-core_2.12.jar:
https://repo1.maven.org/maven2/io/delta/delta-core_2.12/2.0.0/delta-core_2.12-2.0.0.jar
==== spark-packages: tried
https://repos.spark-packages.org/io/delta/delta-core_2.12/2.0.0/delta-core_2.12-2.0.0.pom
-- artifact io.delta#delta-core_2.12;2.0.0!delta-core_2.12.jar:
https://repos.spark-packages.org/io/delta/delta-core_2.12/2.0.0/delta-core_2.12-2.0.0.jar
::::::::::::::::::::::::::::::::::::::::::::::
:: UNRESOLVED DEPENDENCIES ::
::::::::::::::::::::::::::::::::::::::::::::::
:: io.delta#delta-core_2.12;2.0.0: not found
::::::::::::::::::::::::::::::::::::::::::::::
:::: ERRORS
Server access error at url https://repo1.maven.org/maven2/io/delta/delta-core_2.12/2.0.0/delta-core_2.12-2.0.0.pom (java.net.ConnectException: Connection refused (Connection refused))
Server access error at url https://repo1.maven.org/maven2/io/delta/delta-core_2.12/2.0.0/delta-core_2.12-2.0.0.jar (java.net.ConnectException: Connection refused (Connection refused))
Server access error at url https://repos.spark-packages.org/io/delta/delta-core_2.12/2.0.0/delta-core_2.12-2.0.0.pom (java.net.ConnectException: Connection refused (Connection refused))
Server access error at url https://repos.spark-packages.org/io/delta/delta-core_2.12/2.0.0/delta-core_2.12-2.0.0.jar (java.net.ConnectException: Connection refused (Connection refused))
:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
Exception in thread "main" java.lang.RuntimeException: [unresolved dependency: io.delta#delta-core_2.12;2.0.0: not found]
任何問題,我可以嘗試詳細說明。
uj5u.com熱心網友回復:
感謝 SO 社區,我已經能夠解決這個問題——基本上是通過組合來自多個 SO 帖子和答案的資訊。
所以,這就是:
- 正如我在問題中提到的,我已經有了代理集的環境變數
ENV HTTP_PROXY=proxyurl
ENV HTTPS_PROXY=proxyurl
- 然后正如這篇文章中提到的,尤其是 Thomas Decaux 的回答。
- 然后這篇關于通過 pip 安裝 pyspark 時在哪里可以找到 spark-defaults.config 檔案的帖子。
- 然后這篇關于設定相關環境變數的帖子。
所以,結合所有這些,這就是我在 dockerfile 中的做法
ENV HTTP_PROXY=proxyurl
ENV HTTPS_PROXY=proxyurl
WORKDIR /usr/local/lib/python3.9/site-packages/pyspark
RUN mkdir conf
WORKDIR /usr/local/lib/python3.9/site-packages/pyspark/conf
RUN echo "spark.driver.extraJavaOptions=-Djava.net.useSystemProxies=true" > spark-defaults.conf
ENV SPARK_HOME=/usr/local/lib/python3.9/site-packages/pyspark
ENV SPARK_PYTHON=python3
Other app specific stuffs
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/504823.html
標籤:Python 行家 阿帕奇火花 pyspark 三角洲湖