叢集指令碼的作用

叢集,特別是訂用帳戶叢集,在使用過程中,可能會有新的安裝第三方軟體,修改叢集運行環境的需求。叢集指令碼功能可以在叢集建立好後批量選擇節點,運行您指定的指令碼,以實現個人化的需求。

叢集指令碼類似引導操作,您可以在叢集建立好後安裝很多目前叢集尚未支援的軟體到您的叢集上,例如:

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

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

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

  • 安裝並運行一個服務,例如 Flink 或者 Impala,但需要編寫的指令碼會複雜些。

強烈建議您先用單個節點進行叢集指令碼的測試,測試都正確以後再在整個叢集上操作。

如何使用

  1. 叢集狀態是空閑或者運行中的叢集可以運行叢集指令碼,叢集列表頁面點擊對應叢集的查看詳情按鈕
  2. 左側菜單單擊叢集指令碼,即會進入該叢集的叢集指令碼執行介面,右側是已經執行過的叢集指令碼列表。
  3. 單擊右上方建立並執行,進入建立介面。
  4. 填寫建立介面上的配置項,選擇執行的節點,點擊執行,完成添加並執行操作。
  5. 叢集指令碼列表可以看到新建立的叢集指令碼,點擊重新整理可以更新叢集指令碼的狀態。
  6. 單擊查看詳情可以看到指令碼在各個節點上的運行情況,單擊重新整理可以更新指令碼在各個節點上的運行狀態。

只有空閑或者運行中的可用叢集才能使用叢集指令碼功能。叢集指令碼適用於長期存在的叢集,對按需建立的臨時叢集,應使用引導操作來完成叢集初始化工作。

叢集指令碼會在您指定的節點上下載oss上的指令碼並運行,根據傳回值是否為0判斷執行成功還是失敗。如果運行狀態是失敗,您可以登入到各個節點上查看作業記錄,作業記錄記錄在每個節點的/var/log/cluster-scripts/clusterScriptId目錄下。如果叢集配置了oss日誌目錄,作業記錄也會上傳到osslogpath/clusterId/ip/cluster-scripts/clusterScriptId目錄下方便查看。

預設會使用 root 賬戶執行您指定的指令碼,您可以在指令碼中使用 su hadoop 切換到 Hadoop 賬戶。

叢集指令碼可能在部分節點上運行成功,部分節點上運行失敗,例如節點重啟導致的指令碼運行失敗。您可以在解決異常問題後,單獨指定失敗的節點再次運行。當叢集擴容後,您也可以指定擴容的節點單獨運行叢集指令碼。

1個叢集同一時間只能運行一個叢集指令碼,如果有正在啟動並執行叢集指令碼,無法提交執行新的叢集指令碼。每個叢集最多保留10個叢集指令碼記錄,超過10個需要將之前的記錄刪除才能建立新的叢集指令碼。

指令碼的例子

類似引導操作的指令碼,您可以在指令碼中指定從 OSS 下載需要的檔案,下面的例子會將 oss://yourbucket/myfile.tar.gz 這個檔案下載到本地,並解壓到 /yourdir目錄下:
#!/bin/bash
osscmd --id=<yourid> --key=<yourkey> --host=oss-cn-hangzhou-internal.aliyuncs.com get oss://<yourbucket>/<myfile>.tar.gz ./<myfile>.tar.gz
mkdir -p /<yourdir>
tar -zxvf <myfile>.tar.gz -C /<yourdir>

osscmd 已預先安裝在節點上,可以直接調用來下載檔案。

说明 OSS 地址 host 有內網地址、外網地址和 VPC 網路地址之分。如果用傳統網路,需要指定內網地址,杭州是 oss-cn-hangzhou-internal.aliyuncs.com。如果用 VPC 網路,要指定 VPC 內網可訪問的網域名稱,杭州是 vpc100-oss-cn-hangzhou.aliyuncs.com。
指令碼也可以通過 yum 安裝額外的系統軟體包,下面的例子會安裝 ld-linux.so.2:
#!/bin/bash
yum install -y ld-linux.so.2