添加引導操作,可以安裝您需要的第三方軟體或者修改叢集運行環境。本文為您介紹如何添加引導操作及其樣本。
背景資訊
引導操作功能可以在叢集擴容或Auto Scaling時自動在新增節點上運行指定指令碼。手動執行功能可以批量選擇在已有節點上運行指定指令碼,以實現個人化需求,手動執行指令碼的詳情,請參見手動執行指令碼。
引導操作類似手動執行,在叢集建立時或者建立完成後,您可以通過引導操作功能,完成很多目前E-MapReduce叢集尚未支援的操作,例如:
使用Yum安裝已經提供的軟體。
直接下載公網上的一些公開的軟體。
讀取OSS中您的自有資料。
安裝並運行一個服務,例如Flink或者Impala。
使用限制
您最多可以添加10個引導操作。添加的引導操作會按照您指定的順序執行。
您指定的指令碼預設使用root賬戶執行,您也可以在指令碼中使用
su - hadoop
命令,切換為hadoop使用者執行。
添加引導操作
添加引導操作支援以下兩種方式。
方式一:建立叢集時添加引導操作
進入叢集管理頁面。
在頂部功能表列處,根據實際情況選擇地區和資源群組。
在EMR on ECS頁面,單擊建立叢集。
在基礎配置的進階設定地區,單擊引導操作所在行的添加引導操作。
填寫以下配置項。
參數
描述
操作名稱
引導操作的名稱。
指令碼地址
選擇指令碼所在OSS的路徑。
指令碼路徑格式必須為oss://**/*.sh格式。
參數
引導操作指令碼的參數,指定指令碼中所引用的變數的值。
執行時間
組件安裝前:組件安裝前執行該指令碼。
組件啟動後:組件啟動後執行該指令碼。
執行失敗策略
繼續執行:如果該指令碼執行失敗,繼續執行下一個指令碼。
停止執行:如果該指令碼執行失敗,停止當前指令碼。
執行範圍
取值範圍如下:
叢集:此引導操作適用於整個叢集。
節點群組類型:此操作引導僅適用於您選擇的節點群組的類型。
引導操作樣本請參見樣本。
說明引導操作可能會執行失敗,但引導操作失敗並不會影響叢集的建立。
建立叢集詳情,請參見建立叢集。叢集建立成功後,您可以在叢集的指令碼操作頁面,查看是否有異常發生。如果有異常,請參見查看指令碼執行日誌。
方式二:建立叢集後添加引導操作
進入指令碼操作頁面。
在頂部功能表列處,根據實際情況選擇地區和資源群組。
單擊目的地組群的叢集ID。
單擊上方的指令碼操作頁簽。
在引導操作頁面,單擊添加引導操作。
在添加引導操作對話方塊中,填寫配置項。
參數
描述
名稱
引導操作的名稱。
指令碼位置
選擇指令碼所在OSS的位置。
指令碼路徑格式必須為oss://**/*.sh格式。
參數
引導操作指令碼的參數,指定指令碼中所引用的變數的值。
執行範圍
取值範圍如下:
叢集:此引導操作適用於整個叢集。
節點群組類型:此操作引導僅適用於您選擇的節點群組的類型。
指定節點群組:此引導操作僅適用於您選擇的節點群組。
執行時間
組件安裝前:組件安裝前執行該指令碼。
組件啟動後:組件啟動後執行該指令碼。
執行失敗策略
繼續執行:如果該指令碼執行失敗,繼續執行下一個指令碼。
停止執行:如果該指令碼執行失敗,停止當前指令碼。
單擊確定。
引導操作樣本請參見樣本。
您可以對已有的引導操作進行以下操作:
編輯引導操作:單擊目標引導操作所在行的編輯。
複製引導操作:單擊目標引導操作所在行的複製。
刪除引導操作:單擊目標引導操作所在行的刪除。
查看指令碼執行日誌
建議您在指令碼中關鍵位置增加日誌列印邏輯,以便通過作業記錄輔助您排查指令碼運行情況。
您可以通過操作歷史查看引導操作指令碼的執行日誌。具體步驟如下:
進入叢集服務頁面。
在左側導覽列,單擊EMR on ECS。
在頂部功能表列處,根據實際情況選擇地區和資源群組。
在EMR on ECS頁面,單擊目的地組群操作列的叢集服務。
單擊右上方的操作歷史。
在操作歷史面板中,找到執行指令碼的操作,查看詳情。
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
之間有一個空格。