本文为您介绍在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命令上传,也可以通过阿里云对象存储OSS控制台、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服务页面,选择右上角的
。