EMR集群JindoSDK升级流程

本文为您介绍在EMR集群环境中,针对不同应用场景升级JindoSDK的详细步骤。

前提条件

已创建EMR集群,详情请参见创建集群

场景一:升级已有集群

如果您创建的EMR-5.6.0及以上版本或EMR-3.40.0及以上版本集群,在使用过程中遇到JindoData版本已知问题,或者需要使用JindoSDK的新功能,可以按照以下步骤升级JindoSDK。JindoSDK的版本说明,请参见JindoSDK版本记录

重要

如果从JindoSDK 4.6.8或更低版本升级到4.6.9或以上版本、或者升级到6.x系列时,由于JindoCommitter默认使用的作业临时路径已更改。为了避免升级过程中数据丟失,请在升级前确保通过在Hadoop-Commoncore-site.xml中设置fs.jdo.committer.allow.concurrent=false,或在Spark配置中加入spark.hadoop.fs.jdo.committer.allow.concurrent=false。一旦您的集群中的所有节点,包括Gateway节点,都完成了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.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

步骤二:配置升级节点信息

  • 手动配置节点信息

    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.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的升级操作,以高效、准确地完成集群扩容与升级任务。

步骤一:制作引导升级包

  1. 执行以下命令,下载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
  2. 执行以下命令,制作升级包。

    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命令上传,也可以通过阿里云对象存储OSS控制台、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

执行范围

选择集群

集群

执行时间

选择组件启动后

组件启动后

执行失败策略

选择继续执行

继续执行

步骤四:重启服务

重启相关服务,确保加载到最新的修复。

  • 如果是新建集群,则需要重启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

步骤五:重启服务

说明

对于已经在运行的YARN作业(Application,例如:Spark Streaming或Flink作业),需要停止作业后,批量滚动重启YARN NodeManager。

Hive、Presto、Impala、Flink、Ranger、Spark和Zeppelin等服务需要重启后才能完成回滚。

以Hive服务为例,在EMR集群的Hive服务页面,选择右上角的更多操作 > 重启