全部產品
Search
文件中心

E-MapReduce:管理引導操作

更新時間:Jul 10, 2024

添加引導操作,可以安裝您需要的第三方軟體或者修改叢集運行環境。本文為您介紹如何添加引導操作及其樣本。

背景資訊

引導操作功能可以在叢集擴容或Auto Scaling時自動在新增節點上運行指定指令碼。手動執行功能可以批量選擇在已有節點上運行指定指令碼,以實現個人化需求,手動執行指令碼的詳情,請參見手動執行指令碼

引導操作類似手動執行,在叢集建立時或者建立完成後,您可以通過引導操作功能,完成很多目前E-MapReduce叢集尚未支援的操作,例如:

  • 使用Yum安裝已經提供的軟體。

  • 直接下載公網上的一些公開的軟體。

  • 讀取OSS中您的自有資料。

  • 安裝並運行一個服務,例如Flink或者Impala。

使用限制

  • 您最多可以添加10個引導操作。添加的引導操作會按照您指定的順序執行。

  • 您指定的指令碼預設使用root賬戶執行,您也可以在指令碼中使用su - hadoop命令,切換為hadoop使用者執行。

添加引導操作

添加引導操作支援以下兩種方式。

方式一:建立叢集時添加引導操作

  1. 進入叢集管理頁面。

    1. 登入E-MapReduce控制台

    2. 在頂部功能表列處,根據實際情況選擇地區和資源群組

  2. EMR on ECS頁面,單擊建立叢集

  3. 基礎配置進階設定地區,單擊引導操作所在行的添加引導操作

  4. 填寫以下配置項。

    參數

    描述

    操作名稱

    引導操作的名稱。

    指令碼地址

    選擇指令碼所在OSS的路徑。

    指令碼路徑格式必須為oss://**/*.sh格式。

    參數

    引導操作指令碼的參數,指定指令碼中所引用的變數的值。

    執行時間

    • 組件安裝前:組件安裝前執行該指令碼。

    • 組件啟動後:組件啟動後執行該指令碼。

    執行失敗策略

    • 繼續執行:如果該指令碼執行失敗,繼續執行下一個指令碼。

    • 停止執行:如果該指令碼執行失敗,停止當前指令碼。

    執行範圍

    取值範圍如下:

    • 叢集:此引導操作適用於整個叢集。

    • 節點群組類型:此操作引導僅適用於您選擇的節點群組的類型。

    引導操作樣本請參見樣本

    說明

    引導操作可能會執行失敗,但引導操作失敗並不會影響叢集的建立。

    建立叢集詳情,請參見建立叢集。叢集建立成功後,您可以在叢集的指令碼操作頁面,查看是否有異常發生。如果有異常,請參見查看指令碼執行日誌

方式二:建立叢集後添加引導操作

  1. 進入指令碼操作頁面。

    1. 登入E-MapReduce控制台

    2. 在頂部功能表列處,根據實際情況選擇地區和資源群組

    3. 單擊目的地組群的叢集ID。

    4. 單擊上方的指令碼操作頁簽。

  2. 引導操作頁面,單擊添加引導操作

  3. 添加引導操作對話方塊中,填寫配置項。

    參數

    描述

    名稱

    引導操作的名稱。

    指令碼位置

    選擇指令碼所在OSS的位置。

    指令碼路徑格式必須為oss://**/*.sh格式。

    參數

    引導操作指令碼的參數,指定指令碼中所引用的變數的值。

    執行範圍

    取值範圍如下:

    • 叢集:此引導操作適用於整個叢集。

    • 節點群組類型:此操作引導僅適用於您選擇的節點群組的類型。

    • 指定節點群組:此引導操作僅適用於您選擇的節點群組。

    執行時間

    • 組件安裝前:組件安裝前執行該指令碼。

    • 組件啟動後:組件啟動後執行該指令碼。

    執行失敗策略

    • 繼續執行:如果該指令碼執行失敗,繼續執行下一個指令碼。

    • 停止執行:如果該指令碼執行失敗,停止當前指令碼。

  4. 單擊確定

    引導操作樣本請參見樣本

    您可以對已有的引導操作進行以下操作:

    • 編輯引導操作:單擊目標引導操作所在行的編輯

    • 複製引導操作:單擊目標引導操作所在行的複製

    • 刪除引導操作:單擊目標引導操作所在行的刪除

查看指令碼執行日誌

說明

建議您在指令碼中關鍵位置增加日誌列印邏輯,以便通過作業記錄輔助您排查指令碼運行情況。

您可以通過操作歷史查看引導操作指令碼的執行日誌。具體步驟如下:

  1. 進入叢集服務頁面。

    1. 登入E-MapReduce控制台

    2. 在左側導覽列,單擊EMR on ECS

    3. 在頂部功能表列處,根據實際情況選擇地區和資源群組

    4. EMR on ECS頁面,單擊目的地組群操作列的叢集服務

  2. 單擊右上方的操作歷史

  3. 操作歷史面板中,找到執行指令碼的操作,查看詳情。

    • DataLake、DataFlow、OLAP、DataServing和自訂叢集:在建立叢集(create)或擴容(increaseNodeGroup)操作記錄中,單擊展開查看任務詳情。其中RUN_BOOTSTRAP_CLUSTER_SCRIPT_<引導操作名稱>_<引導操作ID>開頭的任務為執行引導操作的任務,可查看執行Stdout和Stderr日誌。操作歷史

    • Hadoop、Data Science和EMR Studio叢集:在建立叢集(CREATE_CLUSTER)或擴容(RESIZE_CLUSTER)操作記錄中,單擊展開查看任務詳情。pollDeployTaskStatusActivity下的RUN_SCRIPT_HOST_**開頭的任務即為執行引導操作的任務,可查看執行Stdout和Stderr日誌。

樣本

引導操作需要指定引導操作的名稱和執行指令碼在OSS上的位置,根據需要指定指令碼的參數。執行引導操作時各個節點會下載您指定的OSS指令碼,直接執行或者附加上選擇性參數執行。引導操作樣本如下:

  • 樣本1

    您可以在指令碼中指定需要從OSS下載的檔案。例如,添加以下指令碼,將oss://<yourBucket>/<myFile>.tar.gz檔案下載到本地,並解壓到/<yourDir>目錄下。

    重要

    OSS地址有內網地址、外網地址和VPC網路地址之分。如果使用傳統網路,則需要指定內網地址,例如杭州是oss-cn-hangzhou-internal.aliyuncs.com。如果使用VPC網路,則需要指定VPC內網可訪問的網域名稱,例如杭州是vpc100-oss-cn-hangzhou.aliyuncs.com

    • 資料湖(DataLake)、即時資料流(DataFlow)、資料分析(OLAP)、資料服務(DataServing)和自訂情境的叢集

      #!/bin/bash
      ossutil64 cp oss://<yourBucket>/<myFile>.tar.gz  ./  -e oss-cn-hangzhou-internal.aliyuncs.com -i <yourAccessKeyId>  -k <yourAccessKeySecret>
      mkdir -p /<yourDir>
      tar -zxvf <myFile>.tar.gz -C /<yourDir>
    • 舊版資料湖(Hadoop)叢集

      #!/bin/bash
      osscmd --id=<yourAccessKeyId> --key=<yourAccessKeySecret> --host=oss-cn-hangzhou-internal.aliyuncs.com get oss://<yourBucket>/<myFile>.tar.gz ./
      mkdir -p /<yourDir>
      tar -zxvf <myFile>.tar.gz -C /<yourDir>
  • 樣本2

    您可以通過Yum安裝額外的系統軟體包,例如安裝ld-linux.so.2

    #!/bin/bash
    yum install -y ld-linux.so.2

常見問題

  • Q:EMR引導指令碼執行中斷,但日誌內沒有報錯資訊。

    A:建議您在指令碼中的關鍵位置增加日誌列印邏輯,以便通過作業記錄輔助您排查指令碼運行情況。目前叢集指令碼最常見的報錯原因有以下四類:

    • 網路連接性問題。ECS執行個體和對應的OSS需要在同一地區下。例如,北京地區下的ECS執行個體串連不上非北京地區下的OSS。

    • ECS擷取AccessKey資訊失敗問題。通常是由於ECS執行個體未綁定AliyunECSInstanceForEMRRole導致的。

    • 指令碼中使用了nohup,但又未重新導向輸出,將導致Task長時間無法退出。正確用法為nohup ... >*** 2>&1

    • 指令碼在Windows環境下編輯會帶有Windows的分行符號號,導致指令碼在Linux環境下運行出錯。您可以在操作歷史報錯日誌中查看是否有^M字樣。如果有的話建議您在Linux環境下重新編輯指令碼並上傳OSS。

  • Q:EMR引導指令碼執行無YARN、HDFS等命令。

    A:目前EMR管控執行叢集指令碼時預設不帶有任何profile資訊,如果您需要使用YARN、HDFS等相關命令,請在指令碼開頭加入. /etc/profile載入,便可以使用上述命令。

    重要

    . /etc/profile中,./etc/profile之間有一個空格。