全部產品
Search
文件中心

E-MapReduce:EMR叢集JindoSDK升級和復原流程(X86)

更新時間:Jun 24, 2025

本文為您介紹X86架構機型的EMR叢集,針對不同應用情境升級JindoSDK的詳細步驟。

前提條件

已建立X86架構機型的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-defaults.conf中新增配置項spark.hadoop.fs.jdo.committer.allow.concurrent=false

一旦您的叢集中的所有節點,包括Gateway節點,都完成了JindoSDK的升級,請將上述參數設定為true。

步驟一:準備軟體包和升級指令碼

說明

請確定您升級所需的JindoSDK版本:

  • 直接存取OSS/OSS-HDFS的情境:

    如果您僅使用JindoSDK直接存取OSS或OSS-HDFS,請確認本地Hadoop依賴版本是否特殊(例如低於 2.7)。如果版本較低,可能需要額外的相容性處理。

  • 使用半託管服務的情境:

    如果您正在使用JindoCache、JindoAuth或JindoFSx等半託管服務,建議先聯絡阿里雲EMR支援人員團隊,確認JindoSDK的版本相容性,以確保升級過程順利。

  1. 登入EMR叢集的Master節點,詳情請參見登入叢集

  2. 將下載的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
  3. 下載JindoSDK軟體包jindosdk-{VERSION}.tar.gz,放在解壓後的目錄。

    本文樣本是將叢集中的JindoSDK升級到6.8.2版本。

    cd jindosdk-patches
    
    wget https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/6.8.2/jindosdk-6.8.2-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.8.2-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

步驟二:配置升級節點資訊

  • 手動設定節點資訊

    1. 編輯patch包中的hosts檔案。

      vim hosts
    2. 添加叢集所有節點的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.8.2版本。

./apply_all.sh 6.8.2

返回資訊中包含### DONE時,表示指令碼執行完成。

>>> updating ...  master-1-1
>>> updating ...  core-1-1
>>> updating ...  core-1-2
### DONE

步驟四:修改叢集配置(相容老版本EMR OSS Ranger鑒權

如果開啟了EMR OSS Ranger鑒權,並且從EMR-3.51.2/EMR-5.17.2及之前版本升級JindoSDK到 [6.5.0, 6.7.2] 版本區間時可能存在相容性問題。建議將JindoSDK升級到6.7.3及以上版本,並按照以下步驟修改叢集配置。

  1. 在HADOOP-COMMON服務的配置頁面,單擊core-sites.xml頁簽。

  2. core-sites.xml頁面,搜尋並修改以下配置項。

    參數

    描述

    fs.jdo.plugin.dir

    把載入plugin的目錄指向新版JindoSDK下的plugin路徑,即把/opt/apps/RANGER/jindoauth-current/plugins修改為/opt/apps/JINDOSDK/jindosdk-current/plugins

步驟五:特殊節點處理

  1. 升級通過EMR CLI建立的Gateway節點。

    • 如果是通過EMR控制台建立的Gateway節點,上述步驟已涵蓋相關內容。

    • 如果是通過EMR CLI建立的Gateway節點,由於這些節點是獨立建立的,因此需要手動執行升級指令碼以完成升級操作。此外,在彈性節點初始化時,應提前通過指令碼完成升級。

  2. 替換Trino、Presto、Impala等服務的JindoSDK。

    對於EMR-3.53.0之前的版本、EMR-5.19.0(不含)之前的版本,Trino、Presto、Impala等服務使用的JindoSDK不會在上述步驟中自動升級,需要您手動替換這些服務的plugins路徑中的JindoSDK JAR包為目標版本,並重啟服務以使更改生效。

步驟六:確認升級情況

ls -l /opt/apps/JINDOSDK/jindosdk-current/lib

以從叢集預設版本6.2.0升級為6.8.2版本為例,返回樣本如下。

lrwxrwxrwx 1 emr-user emr-user 64 Apr 12 11:08 jindo-core-6.2.0.jar -> /opt/apps/JINDOSDK/jindosdk-6.8.2-linux/lib/jindo-core-6.8.2.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.8.2-linux/lib/jindo-core-linux-el7-aarch64-6.8.2.jar
lrwxrwxrwx 1 emr-user emr-user 63 Apr 12 11:08 jindo-sdk-6.2.0.jar -> /opt/apps/JINDOSDK/jindosdk-6.8.2-linux/lib/jindo-sdk-6.8.2.jar
lrwxrwxrwx 1 emr-user emr-user 50 Apr 12 11:08 native -> /opt/apps/JINDOSDK/jindosdk-6.8.2-linux/lib/native
lrwxrwxrwx 1 emr-user emr-user 57 Apr 12 11:08 site-packages -> /opt/apps/JINDOSDK/jindosdk-6.8.2-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的升級操作,以高效、準確地完成叢集擴容與升級任務。

步驟一:製作引導升級包

  1. 執行以下命令,下載jindosdk-patches.tar.gz、jindosdk-{VERSION}-{PLATFORM}.tar.gz和bootstrap_jindosdk.sh。

    本文樣本是將叢集中的JindoSDK升級到6.8.2版本。

    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.8.2/jindosdk-6.8.2-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.8.2-linux.tar.gz
    -rw-r----- 1 hadoop hadoop      xxxx May 01 00:00 jindosdk-patches.tar.gz
  2. 執行以下命令,製作升級包。

    bash bootstrap_jindosdk.sh -gen $NEW_JINDOSDK_VERSION  # 使用指定的$NEW_JINDOSDK_VERSION執行bootstrap_jindosdk.sh指令碼,以升級到該版本的JindoSDK。
    說明
    • 對於擴容現有叢集,請使用-gen選項以產生輕量級升級包。

    • 對於建立叢集,使用-gen-full選項以產生包含完整內容的升級包。

    例如,升級JindoSDK到6.8.2版本。

    bash bootstrap_jindosdk.sh -gen 6.8.2

    升級包製作成功後,顯示以下內容。

    Generated patch at /home/emr-user/jindo-patch/jindosdk-bootstrap-patches.tar.gz

    製作完成,產生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.shoss://<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的位置。指令碼路徑格式必須為oss://**/*.sh格式。

oss:///path/to/patch/bootstrap_jindosdk.sh

參數

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

-bootstrap oss:///path/to/patch/jindosdk-bootstrap-patches.tar.gz

執行範圍

選擇叢集

叢集

執行時間

選擇組件啟動後

組件啟動後

執行失敗策略

選擇繼續執行

繼續執行

步驟四:特殊節點處理

  1. 升級通過EMR CLI建立的Gateway節點。

    • 如果是通過EMR控制台建立的Gateway節點,上述步驟已涵蓋相關內容。

    • 如果是通過EMR CLI建立的Gateway節點,由於這些節點是獨立建立的,因此需要手動執行升級指令碼以完成升級操作。此外,在彈性節點初始化時,應提前通過指令碼完成升級。

  2. 替換Trino、Presto、Impala等服務的JindoSDK。

    對於EMR-3.53.0之前的版本、EMR-5.19.0(不含)之前的版本,Trino、Presto、Impala等服務使用的JindoSDK不會在上述步驟中自動升級,需要您手動替換這些服務的plugins路徑中的JindoSDK JAR包為最新版本,並重啟服務以使更改生效。

步驟五:重啟服務

重啟相關服務,確保載入到最新的修複。

  • 如果是建立叢集,則需要重啟Hive、Presto、Impala、Flink、Ranger、Spark和Zeppelin等服務。

  • 如果是擴容新節點,則需要重啟對應節點上的Hive、Presto、Impala、Flink、Ranger、Spark和Zeppelin等服務。

情境三:將JindoSDK復原至叢集預設版本

如果您的叢集為EMR-5.6.0及以上或EMR-3.40.0及以上版本,在升級過程中遇到問題需要將叢集恢複至預設的JindoSDK版本,可以按照以下步驟操作。

步驟一:準備復原指令碼

  1. 登入EMR叢集的Master節點,詳情請參見登入叢集

  2. 將下載的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

步驟二:配置復原節點資訊

  • 手動設定節點資訊

    1. 編輯patch包中的hosts檔案。

      vim hosts
    2. 添加叢集所有節點的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

步驟五:特殊節點處理

  1. 升級通過EMR CLI建立的Gateway節點。

    • 如果是通過EMR控制台建立的Gateway節點,上述步驟已涵蓋相關內容。

    • 如果是通過EMR CLI建立的Gateway節點,由於這些節點是獨立建立的,因此需要手動執行升級指令碼以完成升級操作。此外,在彈性節點初始化時,應提前通過指令碼完成升級。

  2. 替換Trino、Presto、Impala等服務的JindoSDK。

    對於EMR-3.53.0之前的版本、EMR-5.19.0(不含)之前的版本,Trino、Presto、Impala等服務使用的JindoSDK不會在上述步驟中自動升級,需要您手動替換這些服務的plugins路徑中的JindoSDK JAR包為預設版本,並重啟服務以使更改生效。

步驟六:重啟服務

說明

對於已經在啟動並執行YARN作業(Application,例如:Spark Streaming或Flink作業),需要在停止作業後,批量滾動重啟YARN NodeManager。

Hive、Presto、Impala、Flink、Ranger、Spark和Zeppelin等服務需要重啟後才能完成復原。

以Hive服務為例,在EMR叢集的Hive服務頁面,選擇右上方的更多操作 > 重啟