本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 EMR Studio 中的magic命令增強核心
概觀
EMR Studio 和 EMR Notebooks 支援 magic 命令。Magic 命令或 magics是 IPython 核心提供的增強功能,可協助您執行和分析資料。IPython 是使用 Python 建置的交互式 Shell 環境。
Amazon EMR 也支援 Sparkmagic,這是一個套件,它使用特定 magic 命令提供 Spark 相關核心 (PySpark、SparkR 和 Scala 核心),並在叢集上使用 Livy 來提交 Spark 作業。
只要您的 EMR 筆記本中有 Python 核心,就可以使用 magic 命令。同樣,任何與 Spark 相關的核心都支援 Sparkmagic 命令。
Magic 命令 (也稱為 magics) 有兩種類型:
-
行 magics - 這些 magic 命令由單個
%
字首表示,並在單行程式碼上進行操作 -
儲存格 magics - 這些 magic 命令由雙
%%
字首表示,並在多行程式碼上進行操作
如需所有可用的 magics,請參閱 列出 magic 和 Sparkmagic 命令。
考量與限制
-
EMR Serverless 不支援
%%sh
執行spark-submit
。它不支援 EMR Notebooks magics。 -
Amazon EMR on EKS 叢集不支援 EMR Studio 的 Sparkmagic 命令。這是因為與受管端點搭配使用的 Spark 核心建置於 Kubernetes 中,而且 Sparkmagic 和 Livy 不支援它們。可以將 Spark 組態直接設定到 SparkContext 物件中,作為一種解決方法,如下列範例所示。
spark.conf.set("spark.driver.maxResultSize", '6g')
-
下列magic命令和動作是 禁止的 AWS:
-
%alias
-
%alias_magic
-
%automagic
-
%macro
-
使用
%configure
修改proxy_user
-
使用
%env
或%set_env
修改KERNEL_USERNAME
-
列出 magic 和 Sparkmagic 命令
使用以下命令,列出可用的 magic 命令:
-
%lsmagic
列出所有目前可用的 magic 函數。 -
%%help
列出 Sparkmagic 套件提供的目前可用的 Spark 相關 magic 函數。
使用 %%configure
設定 Spark
其中一個最有用的 Sparkmagic 命令是 %%configure
命令,它會設定工作階段建立參數。使用 conf
設定,可設定 Apache Spark 組態文件
範例 將外部 JAR 檔案從 Maven 儲存庫或 Amazon S3 新增至 EMR Notebooks
可以使用下列方法,將外部 JAR 檔案相依性新增至 Sparkmagic 支援的任何 Spark 相關核心。
%%configure -f {"conf": { "spark.jars.packages": "com.jsuereth:scala-arm_2.11:2.0,ml.combust.bundle:bundle-ml_2.11:0.13.0,com.databricks:dbutils-api_2.11:0.0.3", "spark.jars": "s3://
amzn-s3-demo-bucket
/my-jar.jar" } }
範例 :設定 Hudi
可使用筆記本編輯器來設定 EMR 筆記本以使用 Hudi。
%%configure { "conf": { "spark.jars": "hdfs://apps/hudi/lib/hudi-spark-bundle.jar,hdfs:///apps/hudi/lib/spark-spark-avro.jar", "spark.serializer": "org.apache.spark.serializer.KryoSerializer", "spark.sql.hive.convertMetastoreParquet":"false" } }
使用 %%sh
執行 spark-submit
%%sh
magic 會在已附接的叢集的執行個體上執行子程序中的 Shell 命令。通常,您會使用其中一個與 Spark 相關的核心,在附接的叢集上執行 Spark 應用程式。但是,如果要使用 Python 核心提交 Spark 應用程式,則可以使用以下 magic,將儲存貯體名稱取代為小寫的儲存貯體名稱。
%%sh spark-submit --master yarn --deploy-mode cluster s3://
amzn-s3-demo-bucket
/test.py
在此範例中,叢集需要存取 s3://
的位置,否則命令將失敗。amzn-s3-demo-bucket
/test.py
可以搭配使用任何 Linux 命令與 %%sh
magic。如果想要執行任何 Spark 或 YARN 命令,請使用下列其中一個選項來建立 emr-notebook
Hadoop 使用者,並為使用者授予許可以執行命令:
-
可透過執行下列命令,明確建立新使用者。
hadoop fs -mkdir /user/emr-notebook hadoop fs -chown emr-notebook /user/emr-notebook
-
可以在 Livy 中開啟使用者模擬,這會自動建立使用者。如需更多資訊,請參閱啟用使用者模擬以監視 Spark 使用者和作業活動。
使用 %%display
來可視化 Spark 資料框架
可以使用 %%display
magic 來可視化 Spark 資料框架。若要使用此 magic,請執行以下命令。
%%display df
選擇檢視資料表格式的結果,如下圖顯示。

也可以選擇使用五種類型的圖表將資料可視化。您的選項包括圓餅圖、散佈圖、折線圖、區域圖和長條圖。

使用 EMR Notebooks magics
Amazon EMR 提供下列 EMR Notebooks magics,可與 Python3 和 Spark 型核心搭配使用:
-
%mount_workspace_dir
- 將工作區目錄掛載到叢集,以便可以從工作區中的其他檔案中匯入和執行程式碼注意
使用
%mount_workspace_dir
,只有 Python 3 核心可以存取您的本機檔案系統。Spark 執行者將無法使用此核心存取掛載的目錄。 -
%umount_workspace_dir
- 從叢集中卸載您的工作區目錄 -
%generate_s3_download_url
- 在 Amazon S3 物件的筆記本輸出中產生暫時下載連結
先決條件
安裝 EMR Notebooks magics 之前,請先完成以下任務:
-
確保 叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔) 擁有 Amazon S3 的讀取權限。具有
AmazonElasticMapReduceforEC2Role
受管政策的EMR_EC2_DefaultRole
符合此要求。如果您使用自訂角色或政策,請確定它具有必要的 S3 許可。注意
EMR Notebooks magics 以筆記本使用者身分在叢集上執行,並使用 EC2 執行個體設定檔與 Amazon S3 互動。當您在 EMR 叢集上掛載工作區目錄時,所有具有附接至該叢集之許可的工作區和 EMR 筆記本都可以存取掛載的目錄。
依預設,目錄會以唯讀方式掛載。雖然
s3fs-fuse
和goofys
允許讀寫掛載,但強烈建議您不要修改掛載參數,以便以讀寫模式掛載目錄。如果您允許寫入存取,則對目錄所做的任何變更都會寫入 S3 儲存貯體。為避免意外刪除或覆寫,可以為 S3 儲存貯體啟用版本控制。若要進一步了解,請參閱在 S3 儲存貯體中使用版本控制。 -
在叢集上執行下列其中一個指令碼,以安裝 EMR Notebooks magics 的相依性。若要執行指令碼,當您已經擁有執行中的叢集時,可以 使用自訂引導操作 或遵循在 Amazon EMR 叢集上執行命令和指令碼中的指示。
可以選擇要安裝的相依性。s3fs-fuse
和 goofys 都是 FUSE (Filesystem in Userspace) 工具,可讓您將 Amazon S3 儲存貯體作為本機檔案系統掛載在叢集上。該 s3fs
工具提供類似於 POSIX 的體驗。當您偏好效能勝於 POSIX 相容檔案系統時,goofys
工具是一個很好的選擇。Amazon EMR 7.x 系列使用不支援 EPEL 儲存庫的 Amazon Linux 2023。如果您正在執行 Amazon EMR 7.x,請遵循 s3fs-fuse GitHub
說明安裝 s3fs-fuse
。如果您使用 5.x 或 6.x 系列,請使用下列命令來安裝s3fs-fuse
。#!/bin/sh # Install the s3fs dependency for EMR Notebooks magics sudo amazon-linux-extras install epel -y sudo yum install s3fs-fuse -y
或
#!/bin/sh # Install the goofys dependency for EMR Notebooks magics sudo wget https://github.com/kahing/goofys/releases/latest/download/goofys -P /usr/bin/ sudo chmod ugo+x /usr/bin/goofys
安裝 EMR Notebooks magics
注意
使用 Amazon EMR 6.0 到 6.9.0 版本以及 5.0 到 5.36.0 版本,只有 emr-notebooks-magics
套件版本 0.2.0 及更高版本支援 %mount_workspace_dir
magic。
完成以下步驟來安裝 EMR Notebooks magics。
-
在筆記本中,執行下列命令來安裝
emr-notebooks-magics
套件。 %pip install boto3 --upgrade %pip install botocore --upgrade %pip install emr-notebooks-magics --upgrade
-
重新啟動核心以載入 EMR Notebooks magics。
-
使用以下命令驗證您的安裝,該命令應該顯示
%mount_workspace_dir
的輸出說明文字。%mount_workspace_dir?
使用 %mount_workspace_dir
掛載工作區目錄
%mount_workspace_dir
magic 可讓您將工作區目錄掛載到 EMR 叢集,以便匯入和執行目錄中儲存的其他檔案、模組或套件。
下列範例會將整個工作區目錄掛載到叢集上,並指定選用
引數以使用 goofys 掛載目錄。<--fuse-type>
%mount_workspace_dir .
<--fuse-type goofys>
若要確認工作區目錄已裝載,請使用下列範例透過 ls
命令顯示目前的工作目錄。輸出應該會顯示工作區中的所有檔案。
%%sh ls
當您在工作區中完成變更後,可以使用下列命令卸載工作區目錄:
注意
即使工作區已停止或分離,工作區目錄仍會保持掛載至叢集。必須明確地卸載您的工作區目錄。
%umount_workspace_dir
使用 %generate_s3_download_url
下載 Amazon S3 物件
generate_s3_download_url
命令會為 Amazon S3 中儲存的物件建立預先簽章的 URL。可以使用預先簽章的 URL 將物件下載到本機。例如,可以執行 generate_s3_download_url
來下載程式碼寫入到 Amazon S3 的 SQL 查詢結果。
預先簽章的 URL 預設有效期為 60 分鐘。可以指定 --expires-in
標記的秒數來變更到期時間。例如,--expires-in 1800
會建立一個有效期為 30 分鐘的 URL。
下列範例透過指定完整的 Amazon S3 路徑來產生物件的下載連結:
。s3://EXAMPLE-DOC-BUCKET/path/to/my/object
%generate_s3_download_url
s3://EXAMPLE-DOC-BUCKET/path/to/my/object
若要進一步了解如何使用 generate_s3_download_url
,請執行下列命令以顯示說明文字。
%generate_s3_download_url?
使用 %execute_notebook
,在無頭模式下執行筆記本
使用 %execute_notebook
magic,可以在無頭模式下執行另一個筆記本,並檢視您執行的每個儲存格的輸出。此 magic 需要 Amazon EMR 和 Amazon EC2 共用的執行個體角色的額外許可。如需有關如何授予其他許可的詳細資訊,請執行命令 %execute_notebook?
。
在長時間執行的作業中,系統可能會因為閒置而進入休眠狀態,或可能暫時失去網際網路連線。這可能會中斷瀏覽器與 Jupyter 伺服器之間的連線。在這種情況下,您可能會丟失從 Jupyter 伺服器執行和傳送的儲存格的輸出。
如果使用 %execute_notebook
magic 以無頭模式執行筆記本,EMR Notebooks 會從已執行的儲存格中擷取輸出,即使本機網路發生中斷。EMR Notebooks 會以遞增方式將輸出儲存在新筆記本中,其名稱與您執行的筆記本相同。EMR Notebooks 接著會將筆記本放入工作區內的新資料夾中。無頭執行發生在相同叢集上,並使用服務角色 EMR_Notebook_DefaultRole
,但其他引數可以改變預設值。
若要以無頭模式執行筆記本,請使用下列命令:
%execute_notebook
<relative-file-path>
若要為無頭執行指定叢集 ID 和服務角色,請使用下列命令:
%execute_notebook
<notebook_name>
.ipynb --cluster-id <emr-cluster-id> --service-role <emr-notebook-service-role>
當 Amazon EMR 和 Amazon EC2 共用執行個體角色時,角色需要以下額外許可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:StartNotebookExecution", "elasticmapreduce:DescribeNotebookExecution", "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::<AccoundId>:role/EMR_Notebooks_DefaultRole" } ] }
注意
要使用 %execute_notebook
magic,請安裝 emr-notebooks-magics
套件版本 0.2.3 或更高版本。