教學課程:設定 PyCharm professional 與開發端點 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:設定 PyCharm professional 與開發端點

本教學課程說明如何將您本機電腦上所執行的 PyCharm Professional Python IDE,連線到開發端點,以在部署 AWS Glue ETL (擷取、轉換及載入) 指令碼之前,先針對這些指令碼進行互動式的執行、除錯與測試作業。教學課程中的說明和螢幕截圖是根據 PyCharm Professional 2019.3 版。

若要以互動方式連線到開發端點,必須安裝 PyCharm Professional (專業版)。如果使用免費版,將無法執行這項動作。

注意

教學課程會使用 Amazon S3 做為資料來源。如果要改為使用 JDBC 資料來源,您必須在虛擬私有雲端 (VPC) 中執行您的開發端點。若要在 VPC 中使用 SSH 連線至開發端點,您必須建立一個 SSH 通道。本教學課程不包括建立 SSH 通道的說明。如需使用 SSH 在 VPC 中連線至開發端點的資訊,請參閱 AWS 安全部落格中的安全連線置在 Private Amazon VPC 中執行的 Linux 執行個體

將 PyCharm professional 連線至開發端點

  1. 在 PyCharm 中建立新的純 Python 專案,將其命名為 legislators

  2. 使用下列內容,在專案中建立名為 get_person_schema.py 的檔案:

    from pyspark.context import SparkContext from awsglue.context import GlueContext def main(): # Create a Glue context glueContext = GlueContext(SparkContext.getOrCreate()) # Create a DynamicFrame using the 'persons_json' table persons_DyF = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons_json") # Print out information about this data print("Count: ", persons_DyF.count()) persons_DyF.printSchema() if __name__ == "__main__": main()
  3. 執行下列任意一項:

    • 針對 AWS Glue 0.9 版,從 https://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl/python/PyGlue.zip 將 AWS Glue Python 程式庫檔案 PyGlue.zip 下載至您本機電腦上方便的位置。

    • 針對 AWS Glue 1.0 版和更新版本,從 https://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl-1.0/python/PyGlue.zip 將 AWS Glue Python 程式庫檔案 PyGlue.zip 下載至您本機電腦上方便的位置。

  4. 在 PyCharm 中,新增 PyGlue.zip 做為您專案的內容根:

    • 在 PyCharm 中,依序選擇 File (檔案)、Settings (設定),來開啟 Settings (設定) 對話方塊。(您也可以按 Ctrl+Alt+S。)

    • 展開 legislators 專案,然後選擇 Project Structure (專案架構)。然後在右側的窗格中,選擇 + Add Content Root (+ 新增內容根)。

    • 瀏覽至您儲存 PyGlue.zip 的位置,並選取此檔案,然後選擇 Apply (套用)。

    Settings (設定) 畫面的外觀應類似於下圖所示:

    已新增 PyGlue.zip 做為內容根的 PyCharm 設定畫面。

    在選擇 Apply (套用) 之後,讓 Settings (設定) 對話方塊保持開啟。

  5. 設定部署選項,以使用 SFTP 來將本機指令碼上傳到您的開發端點 (此功能只在 PyCharm Professional 中提供):

    • Settings (設定) 對話方塊中,展開 Build, Execution, Deployment (建置、執行、部署) 區塊。選擇 Deployment (部署) 子區塊。

    • 選擇位於中間窗格頂端的 + 圖示,來新增伺服器。將其 Type (類型) 設為 SFTP 並命名。

    • SFTP 主機設為開發端點的公用位址,如詳細資料頁面所列。(在 AWS Glue 主控台中選擇開發端點的名稱,以顯示詳細資料頁面)。如為在 VPC 中執行的開發端點,請將 SFTP 主機 設定為 SSH 通道的主機位址和開發端點的本機連接埠。

    • User name (使用者名稱) 設定為 glue

    • Auth type (驗証類型) 設定為 Key pair (OpenSSH or Putty) (金鑰對 (OpenSSH 或 Putty))。瀏覽至您開發端點私有金鑰檔案的所在位置,以設定 Private key file (私有金鑰檔案)。請注意,PyCharm 僅支援 DSA、RSA 和 ECDSA OpenSSH 金鑰類型,且不接受 Putty 私有格式的金鑰。您可以使用如下所示的語法,以最新版本的 ssh-keygen 來產生 PyCharm 可接受的金鑰對類型:

      ssh-keygen -t rsa -f <key_file_name> -C "<your_email_address>"
    • 選擇 Test connection (測試連線),並允許連線以進行測試。如果連線成功,請選擇 Apply (套用)。

    Settings (設定) 畫面的外觀現在應類似於下圖所示:

    定義了 SFTP 伺服器的 PyCharm 設定畫面。

    同樣地,在選擇 Apply (套用) 之後,讓 Settings (設定) 對話方塊保持開啟。

  6. 將本機目錄映射至部署用的遠端目錄:

    • Deployment (部署) 頁面的右側窗格中,從位於頂端的索引標籤,選擇中間的 Mappings (映射) 索引標籤。

    • Deployment Path (部署路徑) 欄位中,輸入 /home/glue/scripts/ 中的路徑,來做為部署您專案的路徑。例如:/home/glue/scripts/legislators

    • 選擇 Apply (套用)。

    Settings (設定) 畫面的外觀現在應類似於下圖所示:

    進行部署映射後的 PyCharm 設定畫面。

    選擇 OK (確定) 以關閉 Settings (設定) 對話方塊。

將指令碼部署到您的開發端點

  1. 選擇 Tools (工具)Deployment (部署),然後在您要設定開發端點使用的名稱,如下圖所示:

    用來部署指令碼的選單項目。

    在部署指令碼之後,畫面的底部應類似於下圖所示:

    部署成功後的 PyCharm 畫面 (底部)。
  2. 在功能表中,選擇 Tools (工具)Deployment (部署)Automatic Upload (always) (自動上傳 (永遠))。確認 Automatic Upload (always) (自動上傳 (永遠)) 旁出現核取記號。

    啟用此選項時,PyCharm 會自動將變更的檔案上傳到開發端點。

設定遠端解譯器

設定 PyCharm 在開發端點上使用 Python 解釋器。

  1. File (檔案) 功能表中,選擇 Open (開啟)

  2. 展開專案 Legislators (國會議員),然後選擇 Project Interpreter (專案解譯器)

  3. 選擇 Project Interpreter (專案解譯器) 清單旁的齒輪圖示,然後選擇 Add (新增)

  4. Add Python Interpreter (新增 Python 解譯器) 對話方塊中,於左窗格中選擇 SSH Interpreter (SSH 解譯器)

  5. 選擇 Existing server configuration (現有伺服器組態),然後在 Deployment configuration (部署組態) 清單中選擇您的組態。

    顯示的畫面應類似於下圖所示:

    在左窗格中選擇了 SSH 解譯器,且在右窗格中選擇了現有伺服器組態的單選按鈕。部署組態欄位包含組態名稱,以及「Remote SDK is saved in IDE settings, so it needs the deployment server to be saved there too. Which do you prefer?」 (遠端 SDK 已於 IDE 設定中儲存,因此部署伺服器也必須儲存在該處。您要選擇哪一種?) 的訊息。以下是「Create copy of this deployment server in IDE settings」(在 IDE 設定中建立此部署伺服器的副本) 及「Move this server to IDE settings」(移動此伺服器至 IDE 設定) 訊息下方的選擇。
  6. 選擇 Move this server to IDE settings (移動此伺服器至 IDE 設定),然後選擇 Next (下一步)

  7. Interpreter (解譯器) 欄位中,如果您使用 Python 2 則變更路徑為 /usr/bin/gluepython;如果您使用 Python 3 則變更路徑為 /usr/bin/gluepython3。然後選擇 Finish (完成)

在開發端點上執行您的指令碼

執行指令碼:

  • 在左窗格中,右鍵按一下檔案名稱,然後選擇 Run '<filename>' (執行 <檔案名稱>)

    在顯示過一系列的訊息後,最終輸出應顯示計數和模式。

    Count: 1961 root |-- family_name: string |-- name: string |-- links: array | |-- element: struct | | |-- note: string | | |-- url: string |-- gender: string |-- image: string |-- identifiers: array | |-- element: struct | | |-- scheme: string | | |-- identifier: string |-- other_names: array | |-- element: struct | | |-- lang: string | | |-- note: string | | |-- name: string |-- sort_name: string |-- images: array | |-- element: struct | | |-- url: string |-- given_name: string |-- birth_date: string |-- id: string |-- contact_details: array | |-- element: struct | | |-- type: string | | |-- value: string |-- death_date: string Process finished with exit code 0

設定已完成,您現在可以從遠端在您的開發端點上進行指令碼的除錯。