本文為您介紹在EMR叢集環境中,針對不同應用情境升級JindoSDK的詳細步驟。
前提條件
已建立EMR叢集,詳情請參見建立叢集。
情境一:升級已有叢集
如果您建立的EMR-5.6.0及以上版本或EMR-3.40.0及以上版本叢集,在使用過程中遇到JindoData版本已知問題,或者需要使用JindoSDK的新功能,可以按照以下步驟升級JindoSDK。
如果從JindoSDK 4.6.8或更低版本升級到4.6.9或以上版本、或者升級到6.x系列時,由於JindoCommitter預設使用的作業臨時路徑已更改。為了避免升級過程中資料遺失,請在升級前確保通過在Hadoop-Common的core-site.xml
中設定fs.jdo.committer.allow.concurrent=false
,或在Spark配置中加入spark.hadoop.fs.jdo.committer.allow.concurrent=false
。一旦您的叢集中的所有節點,包括Gateway節點,都完成了JindoSDK的升級,您便可以選擇移除該設定。
步驟一:準備軟體包和升級指令碼
登入EMR叢集的Master節點,詳情請參見登入叢集。
將下載的patch包放在emr-user使用者的HOME目錄下,然後解壓縮patch包。
su - emr-user cd /home/emr-user/ wget https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/resources/emr-taihao/jindosdk-patches.tar.gz tar zxf jindosdk-patches.tar.gz
下載JindoSDK軟體包jindosdk-{VERSION}.tar.gz,放在解壓後的目錄。
本文樣本是將叢集中的JindoSDK升級到6.3.4版本。
cd jindosdk-patches wget https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/6.3.4/jindosdk-6.3.4-linux.tar.gz ls -l
jindosdk-patches內容樣本如下所示。
-rwxrwxr-x 1 emr-user emr-user 2439 May 01 00:00 apply_all.sh -rwxrwxr-x 1 emr-user emr-user 7315 May 01 00:00 apply.sh -rw-rw-r-- 1 emr-user emr-user 40 May 01 00:00 hosts -rw-r----- 1 emr-user emr-user xxxxxxxxx May 01 00:00 jindosdk-6.3.4-linux.tar.gz -rwxrwxr-x 1 emr-user emr-user 1112 May 01 00:00 revert_all.sh -rwxrwxr-x 1 emr-user emr-user 2042 May 01 00:00 revert.sh
步驟二:配置升級節點資訊
手動設定節點資訊
編輯patch包中的hosts檔案。
vim hosts
添加叢集所有節點的hostname,例如master-1-1或core-1-1,檔案內容以行分割。
例如,本文hosts檔案內容如下。
master-1-1 core-1-1 core-1-2
自動填滿節點資訊
您也可以執行以下命令擷取全部節點資訊,如果
hosts
擷取失敗,則需要手動補全。cat /usr/local/taihao-executor-all/data/cache/.cluster_context | jq --raw-output '.nodes[].hostname.alias[]' > hosts
步驟三:執行升級操作
通過apply_all.sh指令碼,升級JindoSDK版本至指定的新版本。
./apply_all.sh $NEW_JINDOSDK_VERSION # 使用指定的$NEW_JINDOSDK_VERSION執行apply_all.sh指令碼,以升級到該版本的JindoSDK。
例如,升級叢集中的JindoSDK至6.3.4版本。
./apply_all.sh 6.3.4
返回資訊中包含### DONE
時,表示指令碼執行完成。
>>> updating ... master-1-1
>>> updating ... core-1-1
>>> updating ... core-1-2
### DONE
步驟四:確認升級情況
ls -l /opt/apps/JINDOSDK/jindosdk-current/lib
以從叢集預設版本6.2.0升級為6.3.4版本為例,返回樣本如下。
lrwxrwxrwx 1 emr-user emr-user 64 Apr 12 11:08 jindo-core-6.2.0.jar -> /opt/apps/JINDOSDK/jindosdk-6.3.4-linux/lib/jindo-core-6.3.4.jar
lrwxrwxrwx 1 emr-user emr-user 82 Apr 12 11:08 jindo-core-linux-el7-aarch64-6.2.0.jar -> /opt/apps/JINDOSDK/jindosdk-6.3.4-linux/lib/jindo-core-linux-el7-aarch64-6.3.4.jar
lrwxrwxrwx 1 emr-user emr-user 63 Apr 12 11:08 jindo-sdk-6.2.0.jar -> /opt/apps/JINDOSDK/jindosdk-6.3.4-linux/lib/jindo-sdk-6.3.4.jar
lrwxrwxrwx 1 emr-user emr-user 50 Apr 12 11:08 native -> /opt/apps/JINDOSDK/jindosdk-6.3.4-linux/lib/native
lrwxrwxrwx 1 emr-user emr-user 57 Apr 12 11:08 site-packages -> /opt/apps/JINDOSDK/jindosdk-6.3.4-linux/lib/site-packages
步驟五:升級後重啟服務
對於已經在啟動並執行YARN作業(Application,例如:Spark Streaming或Flink作業),需要停止作業後,批量滾動重啟YARN NodeManager。
Hive、Presto、Impala、Flink、Ranger、Spark和Zeppelin等服務需要重啟後才能完成升級。
以Hive服務為例,在EMR叢集的Hive服務頁面,選擇右上方的
。情境二:擴容已有叢集或建立叢集
當對現有叢集進行擴容並需部署新版JindoSDK時,可通過EMR控制台的引導操作功能來自動化完成這一過程,確保無論是建立新叢集還是向現有叢集添加節點時,JindoSDK都能被順利升級至最新版本。請遵循以下詳細步驟實施JindoSDK的升級操作,以高效、準確地完成叢集擴容與升級任務。
步驟一:製作引導升級包
執行以下命令,下載jindosdk-patches.tar.gz、jindosdk-{VERSION}-{PLATFORM}.tar.gz和bootstrap_jindosdk.sh。
本文樣本是將叢集中的JindoSDK升級到6.3.4版本。
mkdir jindo-patch cd jindo-patch wget https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/resources/emr-taihao/jindosdk-patches.tar.gz wget https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/6.3.4/jindosdk-6.3.4-linux.tar.gz wget https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/resources/emr-taihao/bootstrap_jindosdk.sh ls -l
返回內容樣本如下所示。
-rw-r----- 1 hadoop hadoop xxxx May 01 00:00 bootstrap_jindosdk.sh -rw-r----- 1 hadoop hadoop xxxxxxxxx May 01 00:00 jindosdk-6.3.4-linux.tar.gz -rw-r----- 1 hadoop hadoop xxxx May 01 00:00 jindosdk-patches.tar.gz
執行以下命令,製作升級包。
bash bootstrap_jindosdk.sh -gen $NEW_JINDOSDK_VERSION # 使用指定的$NEW_JINDOSDK_VERSION執行bootstrap_jindosdk.sh指令碼,以升級到該版本的JindoSDK。
說明對於擴容現有叢集,請使用
-gen
選項以產生輕量級升級包。對於建立叢集,使用
-gen-full
選項以產生包含完整內容的升級包。
例如,升級JindoSDK到6.3.4版本。
bash bootstrap_jindosdk.sh -gen 6.3.4
升級包製作成功後,顯示以下內容。
Generated patch at /home/emr-user/jindo-patch/jindosdk-bootstrap-patches.tar.gz
步驟二:上傳引導升級包
將patch包和bootstrap指令碼上傳到OSS上。EMR叢集內可以通過Hadoop命令上傳,也可以通過阿里雲Object Storage Service控制台、ossutil或OSS Browser等工具上傳。
例如,上傳到OSS的路徑為oss://<bucket-name>/path/to/bootstrap_jindosdk.sh
和oss://<bucket-name>/path/to/jindosdk-bootstrap-patches.tar.gz
。
hadoop dfs -mkdir -p oss://<bucket-name>/path/to/patch/
cd /home/hadoop/patch/
hadoop dfs -put jindosdk-bootstrap-patches.tar.gz oss://<bucket-name>/path/to/patch/
hadoop dfs -put bootstrap_jindosdk.sh oss://<bucket-name>/path/to/patch/
hadoop dfs -ls oss://<bucket-name>/path/to/patch/
返回內容樣本如下所示。
Found 2 items
-rw-rw-rw- 1 2634 2022-05-13 14:07 oss://<bucket-name>/.../bootstrap_jindosdk.sh
-rw-rw-rw- 1 597342992 2022-05-13 13:41 oss://<bucket-name>/.../jindosdk-bootstrap-patches.tar.gz
步驟三:添加引導操作
在EMR控制台添加引導操作。具體步驟,請參見管理引導操作。
需添加的配置項如下表所示。
參數 | 描述 | 樣本 |
名稱 | 引導操作的名稱。例如:升級JindoSDK。 | update_jindosdk |
指令碼位置 | 選擇指令碼所在OSS的位置。指令碼路徑格式必須為 |
|
參數 | 引導操作指令碼的參數,指定指令碼中所引用的變數的值。 |
|
執行範圍 | 選擇叢集。 | 叢集 |
執行時間 | 選擇組件啟動後。 | 組件啟動後 |
執行失敗策略 | 選擇繼續執行。 | 繼續執行 |
步驟四:重啟服務
重啟相關服務,確保載入到最新的修複。
如果是建立叢集,則需要重啟Hive、Presto、Impala、Flink、Ranger、Spark和Zeppelin等服務。
如果是擴容新節點,則需要重啟對應節點上的Hive、Presto、Impala、Flink、Ranger、Spark和Zeppelin等服務。
情境三:將JindoSDK復原至叢集預設版本
如果您的叢集為EMR-5.6.0及以上或EMR-3.40.0及以上版本,在升級過程中遇到問題需要將叢集恢複至預設的JindoSDK版本,可以按照以下步驟操作。
步驟一:準備復原指令碼
登入EMR叢集的Master節點,詳情請參見登入叢集。
將下載的patch包放在emr-user使用者的HOME目錄下,然後解壓縮patch包。
su - emr-user cd /home/emr-user/ wget https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/resources/emr-taihao/jindosdk-patches.tar.gz tar zxf jindosdk-patches.tar.gz cd jindosdk-patches ls -l
返回資訊如下所示。
-rwxrwxr-x 1 emr-user emr-user 2439 May 01 00:00 apply_all.sh -rwxrwxr-x 1 emr-user emr-user 7315 May 01 00:00 apply.sh -rw-rw-r-- 1 emr-user emr-user 40 May 01 00:00 hosts -rwxrwxr-x 1 emr-user emr-user 1112 May 01 00:00 revert_all.sh -rwxrwxr-x 1 emr-user emr-user 2042 May 01 00:00 revert.sh
步驟二:配置復原節點資訊
手動設定節點資訊
編輯patch包中的hosts檔案。
vim hosts
添加叢集所有節點的hostname,例如master-1-1或core-1-1,檔案內容以行分割。
例如,本文hosts檔案內容如下。
master-1-1 core-1-1 core-1-2
自動填滿節點資訊
您也可以執行以下命令擷取全部節點資訊,如果
hosts
擷取失敗,則需要手動補全。cat /usr/local/taihao-executor-all/data/cache/.cluster_context | jq --raw-output '.nodes[].hostname.alias[]' > hosts
步驟三:執行復原操作
執行以下命令復原所有更改。
./revert_all.sh
返回資訊中包含### DONE
時,表示指令碼執行完成。
>>> updating ... master-1-1
>>> updating ... core-1-1
>>> updating ... core-1-2
### DONE
步驟四:確認復原情況
ls -l /opt/apps/JINDOSDK/jindosdk-current/lib
以復原到6.2.0版本為例,返回樣本如下。
-rw-r--r-- 1 emr-user emr-user 1253740 Apr 24 17:40 jindo-core-6.2.0.jar
-rw-r--r-- 1 emr-user emr-user 13110547 Apr 24 17:40 jindo-core-linux-el7-aarch64-6.2.0.jar
-rw-r--r-- 1 emr-user emr-user 4432227 Apr 24 17:40 jindo-sdk-6.2.0.jar
drwxr-xr-x 2 emr-user emr-user 4096 Apr 24 17:40 native
步驟五:重啟服務
對於已經在啟動並執行YARN作業(Application,例如:Spark Streaming或Flink作業),需要停止作業後,批量滾動重啟YARN NodeManager。
Hive、Presto、Impala、Flink、Ranger、Spark和Zeppelin等服務需要重啟後才能完成復原。
以Hive服務為例,在EMR叢集的Hive服務頁面,選擇右上方的
。