本文介紹在DataWorks Notebook中使用PySpark時的配置方法,包括自訂配置、OSS儲存訪問、第三方Python包、JAR資源、Livy參數等。
使用自訂配置
如果執行%%maxcompute_spark後提示dataworks-magic版本需要升級,請確保升級後再使用以下功能,否則可能不生效。
啟動時設定SparkConf,例如設定Livy最長空閑時間(
config表示和Livy相關的參數)和開啟Schema級文法開關(spark_conf表示和Spark相關的參數),其餘參數同理。%%maxcompute_spark { "config": { # cpu 和 memory 預設為1核4G "cpu": 1, "memory": "4096M", "livy.server.max.idle.time": "10m" }, "quota": "XXX", "spark_conf": { "spark.sql.catalog.odps.enableNamespaceSchema": "true" } }如果需要修改配置,只需重新執行上述代碼即可。但是重啟Spark Session會丟失之前的工作階段狀態。
使用OSS儲存
配置OSS訪問參數:
oss_endpoint必須使用Internal內網地址,例如:oss-cn-shanghai-internal.aliyuncs.com請不要在Notebook中設定
spark.hadoop.fs.oss.impl和spark.hadoop.fs.AbstractFileSystem.oss.impl這兩個參數,否則可能導致無法訪問OSS。
%%maxcompute_spark
{
"spark_conf": {
"spark.hadoop.odps.cupid.trusted.services.access.list": "<bucket-name>.<oss-endpoint>",
"spark.hadoop.fs.oss.accessKeyId": "***",
"spark.hadoop.fs.oss.accessKeySecret": "***",
"spark.hadoop.fs.oss.endpoint": "<oss-endpoint>"
}
}使用第三方Python包
打包依賴:推薦使用pyodps-pack,強烈建議指定Python版本為3.11,因為Livy Spark Session預設使用Python 3.11,保持一致可避免相容性問題。參考PySpark Python版本和依賴。
# 安裝pyodps pip install pyodps # 準備requirements.txt,然後打包 pyodps-pack -r requirements.txt --python-version=3.11 -o <package-name>上傳包到MaxCompute Project:
-- 在odpscmd中執行 ADD archive /path/to/<package-name> -f;配置Spark使用該包:
說明如果有多個
cupid.resources用逗號(",")隔開,該參數具體效果請參考資料互連配置。如果有多個
PYTHONPATH路徑用冒號(":")隔開。當前樣本中PYTHONPATH帶packages子目錄是因為pyodps-pack打包會自動包含該子目錄,如果是其他方式打包請明確目錄結構再填寫PYTHONPATH。關於PYTHONPATH更多詳情請參考引用使用者自訂的python包。
%%maxcompute_spark { "spark_conf": { "spark.hadoop.odps.cupid.resources": "<your_project>.<package-name>", "spark.executorEnv.PYTHONPATH": "./<your_project>.<package-name>/packages", "spark.yarn.appMasterEnv.PYTHONPATH": "./<your_project>.<package-name>/packages" } }
使用JAR或其他資源套件
上傳資源(以tar.gz為例):
add archive /path/to/<package-name> -f;配置Spark載入資源,多個資源用英文逗號(",")分隔:
%%maxcompute_spark { "spark_conf": { "spark.hadoop.odps.cupid.resources": "<your_project>.<package-name>" } }
可與Python包配置合并使用,都填寫在spark_conf參數中。
進階配置
指定Spark版本
支援的版本如下:
spark-3.1.1-odps0.47.0spark-3.4.2-odps0.48.0(預設)spark-3.5.2-odps0.49.0
設定方式:
%%maxcompute_spark { "spark_conf": { "spark.hadoop.odps.spark.version": "spark-3.4.2-odps0.48.0" } }
禁用預設Python 3.11環境
如需自訂Python環境:
%%maxcompute_spark
{
"spark_conf": {
"spark.hadoop.odps.spark.alinux3.enabled": "false"
}
}使用Matplotlib繪圖
先將Matplotlib打包並上傳,參考使用第三方Python包,然後在Notebook中繪圖:
%%spark
import matplotlib.pyplot as plt
import io, base64, json
import matplotlib
# 非必須
matplotlib.use('Agg')
# 必須在此處先建立figure(關鍵步驟)
fig = plt.figure()
# 樣本繪圖
x = [1, 2, 3, 4]
y = [20, 22, 19, 23]
plt.plot(x, y, marker='o', linestyle='--', color='b')
plt.title("Temperature Change Over Time")
plt.xlabel("Time")
plt.ylabel("Temperature")
# 渲染映像到Notebook(Livy魔法命令)
%matplot pltLivy相關配置
以下列出可以控制的Livy參數:
參數名 | 預設值 | 說明 |
| true | 是否開啟許可權控制,預設開啟,不推薦關閉。 |
| 3d | Livy Server最長存活時間,預設3天。單位支援s、m、h、d。 |
| 1h | Livy Server最長空閑時間,預設1小時,超過該時間沒有任何Spark Session就會自動關閉。 |
| 12h | Spark Session最長空閑時間,預設12小時,超過該時間沒有任何Spark任務執行就會自動關閉。 |
| 12h | Spark Session到期後最長保留時間,預設12小時,關閉後超過該時間未重啟將徹底銷毀。 |
| 50 | 單個Livy Server可以同時存在的Session數量上限,預設50個。 |