このトピックでは、x86 ベースの EMR クラスターで JindoSDK をアップグレードする方法を、さまざまなシナリオに沿って説明します。
前提条件
x86 ベースの EMR クラスターを作成済みであること。詳細については、「クラスターの作成」をご参照ください。
シナリオ1:既存クラスターのアップグレード
EMR v5.6.0 以降、または EMR v3.40.0 以降を実行している EMR クラスターで、JindoData の既知の問題を解決したり、新しい JindoSDK 機能を使用したりする必要がある場合は、次の手順に従って JindoSDK をアップグレードしてください。
JindoSDK 4.6.8 以前から 4.6.9 以降、または 6.x バージョンにアップグレードすると、JindoCommitter がジョブで使用するデフォルトの一時パスが変更されます。アップグレード中のデータ損失を防ぐため、アップグレード前にクラスターの Services ページにログインし、次のいずれかの設定項目を追加してください。
-
Hadoop-Common サービスの Configure タブで、
fs.jdo.committer.allow.concurrent=false設定項目を core-site.xml に追加します。 -
[Configure] サービスの Configure タブで、
spark.hadoop.fs.jdo.committer.allow.concurrent=false設定項目を spark-defaults.conf に追加します。
ゲートウェイノードを含むクラスター内のすべてのノードで JindoSDK をアップグレードした後、パラメーターを true に設定します。
ステップ1:パッケージとアップグレードスクリプトの準備
アップグレードに必要な JindoSDK のバージョンを判断します。
-
OSS/OSS-HDFS への直接アクセス:
JindoSDK を Object Storage Service (OSS) または OSS-HDFS への直接アクセスにのみ使用する場合は、ローカルの Hadoop 依存関係がバージョン 2.7 未満などの古いバージョンでないか確認します。該当する場合は、追加の互換性調整が必要になることがあります。
-
セミマネージドサービスの使用:
JindoCache、JindoAuth、JindoFSx などのセミマネージドサービスを使用する場合は、Alibaba Cloud EMR の技術サポートチームに連絡して JindoSDK のバージョン互換性を確認し、アップグレードが円滑に行われるようにしてください。
-
EMR クラスターのマスターノードにログインします。詳細については、「クラスターへのログイン」をご参照ください。
-
emr-userのホームディレクトリにパッチパッケージをダウンロードし、パッケージを解凍します。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.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 -ljindosdk-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
ステップ2:ノード情報の設定
-
手動でのノード情報の設定
-
パッチパッケージ内の
hostsファイルを編集します。vim hosts -
master-1-1やcore-1-1など、クラスター内のすべてのノードのホスト名を 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
ステップ3:アップグレードの実行
apply_all.sh スクリプトを実行して、JindoSDK を指定のバージョンにアップグレードします。
./apply_all.sh $NEW_JINDOSDK_VERSION # 指定されたバージョン ($NEW_JINDOSDK_VERSION) に 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
ステップ4:クラスター設定の変更 (旧 EMR OSS Ranger 認証との互換性のため)
EMR OSS Ranger 認証が有効で、JindoSDK を EMR v3.51.2/v5.17.2 以前から 6.5.0~6.7.2 のバージョンにアップグレードする場合、互換性の問題が発生する可能性があります。JindoSDK をバージョン 6.7.3 以降にアップグレードし、次のようにクラスター設定を変更することを推奨します。
-
HADOOP-COMMON サービスの Configure ページで、[core-site.xml] タブをクリックします。
-
[core-site.xml] タブで、次の設定項目を見つけて変更します。
パラメーター
説明
fs.jdo.plugin.dir
プラグインの読み込みディレクトリを新しい JindoSDK バージョンのプラグインパスに設定します。値を
/opt/apps/RANGER/jindoauth-current/pluginsから/opt/apps/JINDOSDK/jindosdk-current/pluginsに変更します。
ステップ5:特殊なノードの処理
-
EMR CLI を使用して作成されたゲートウェイノードのアップグレード
-
ゲートウェイノードが EMR コンソールで作成された場合は、上記の手順で対応済みです。
-
EMR CLI を使用してゲートウェイノードを作成した場合は、そのノードは独立しているため、アップグレードスクリプトを手動で実行する必要があります。また、エラスティックノードを初期化する際は、事前にアップグレードする必要があります。
-
-
Trino、Presto、Impala などのサービス用 JindoSDK の置換
EMR v3.53.0 または v5.19.0 より前のバージョンを実行している EMR クラスターでは、Trino、Presto、Impala などのサービス用の JindoSDK は自動的にアップグレードされません。これらのサービスの
pluginsパスにある JindoSDK JAR ファイルをターゲットバージョンに手動で置き換え、サービスを再起動して変更を適用する必要があります。
ステップ6:アップグレードの確認
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
ステップ7:サービスの再起動
Spark Streaming や Flink ジョブなど、実行中の YARN ジョブ (アプリケーション) を停止してから、YARN NodeManager サービスをローリング再起動します。
アップグレードを適用するには、Hive、Presto、Impala、Flink、Ranger、Spark、Zeppelin などのサービスを再起動してください。
たとえば、Hive サービスを再起動するには、EMR クラスターの Hive サービスページに移動し、右上隅にある を選択します。
シナリオ2:スケールアウトまたはクラスターの作成
既存クラスターをスケールアウトし、新しい JindoSDK バージョンをデプロイする必要がある場合は、EMR コンソールのブートストラップアクションを使用してプロセスを自動化できます。これにより、新規クラスターの作成時や既存クラスターへのノード追加時に、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 -
次のコマンドを実行して、アップグレードパッケージを作成します。
bash bootstrap_jindosdk.sh -gen $NEW_JINDOSDK_VERSION # 指定されたバージョン ($NEW_JINDOSDK_VERSION) のアップグレードパッケージを生成します。説明-
既存クラスターをスケールアウトするには、
-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ビルドが完了すると、パッチパッケージ
jindosdk-bootstrap-patches.tar.gzが生成されます。 -
ステップ2:ブートストラップパッケージのアップロード
パッチパッケージとブートストラップスクリプトを OSS にアップロードします。EMR クラスター内から Hadoop コマンドを使用するか、Alibaba Cloud 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
ステップ3:ブートストラップアクションの追加
EMR コンソールでブートストラップアクションを追加します。詳細については、「ブートストラップアクションの管理」をご参照ください。
次の表の設定でブートストラップアクションを設定します。
|
パラメーター |
説明 |
例 |
|
名前 |
ブートストラップアクションの名前。例:JindoSDK のアップグレード。 |
update_jindosdk |
|
スクリプトの場所 |
スクリプトが保存されている OSS パス。スクリプトパスは |
|
|
引数 |
ブートストラップアクションスクリプトの引数。これらの引数は、スクリプトが参照する変数の値を指定します。 |
|
|
実行範囲 |
Cluster を選択します。 |
クラスター |
|
実行タイミング |
After Component Startup を選択します。 |
コンポーネント起動後 |
|
失敗ポリシー |
Proceed を選択します。 |
続行 |
ステップ4:特殊なノードの処理
-
EMR CLI を使用して作成されたゲートウェイノードのアップグレード
-
ゲートウェイノードが EMR コンソールで作成された場合は、上記の手順で対応済みです。
-
EMR CLI を使用してゲートウェイノードを作成した場合は、そのノードは独立しているため、アップグレードスクリプトを手動で実行する必要があります。また、エラスティックノードを初期化する際は、事前にアップグレードする必要があります。
-
-
Trino、Presto、Impala などのサービス用 JindoSDK の置換
EMR v3.53.0 または v5.19.0 より前のバージョンを実行している EMR クラスターでは、Trino、Presto、Impala などのサービス用の JindoSDK は自動的にアップグレードされません。これらのサービスの
pluginsパスにある JindoSDK JAR ファイルをターゲットバージョンに手動で置き換え、サービスを再起動して変更を適用する必要があります。
ステップ5:サービスの再起動
関連サービスを再起動して、最新の修正を適用してください。
-
新規クラスターを作成している場合は、Hive、Presto、Impala、Flink、Ranger、Spark、Zeppelin などのサービスを再起動します。
-
新規ノードを追加してスケールアウトしている場合は、それらのノード上のサービスを再起動します。
シナリオ3:JindoSDK のロールバック
クラスターが EMR v5.6.0 以降、または EMR v3.40.0 以降を実行していて、アップグレード中に問題が発生し、デフォルトの JindoSDK バージョンにロールバックする必要がある場合は、次の手順に従ってください。
ステップ1:ロールバックスクリプトの準備
-
EMR クラスターのマスターノードにログインします。詳細については、「クラスターへのログイン」をご参照ください。
-
emr-userのホームディレクトリにパッチパッケージをダウンロードし、パッケージを解凍します。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
ステップ2:ノード情報の設定
-
手動でのノード情報の設定
-
パッチパッケージ内の
hostsファイルを編集します。vim hosts -
master-1-1やcore-1-1など、クラスター内のすべてのノードのホスト名を 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
ステップ3:ロールバックの実行
次のコマンドを実行して、すべての変更をロールバックします。
./revert_all.sh
出力に ### DONE が含まれている場合は、スクリプトは完了です。
>>> updating ... master-1-1
>>> updating ... core-1-1
>>> updating ... core-1-2
### DONE
ステップ4:ロールバックの確認
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
ステップ5:特殊なノードの処理
-
EMR CLI を使用して作成されたゲートウェイノードのアップグレード
-
ゲートウェイノードが EMR コンソールで作成された場合は、上記の手順で対応済みです。
-
EMR CLI を使用してゲートウェイノードを作成した場合は、そのノードは独立しているため、アップグレードスクリプトを手動で実行する必要があります。また、エラスティックノードを初期化する際は、事前にアップグレードする必要があります。
-
-
Trino、Presto、Impala などのサービス用 JindoSDK の置換
EMR v3.53.0 または v5.19.0 より前のバージョンを実行している EMR クラスターでは、Trino、Presto、Impala などのサービス用の JindoSDK は自動的にロールバックされません。これらのサービスの
pluginsパスにある JindoSDK JAR ファイルをデフォルトバージョンに手動で置き換え、サービスを再起動して変更を適用する必要があります。
ステップ6:サービスの再起動
Spark Streaming や Flink ジョブなど、実行中の YARN ジョブ (アプリケーション) を停止してから、YARN NodeManager サービスをローリング再起動します。
ロールバックを適用するには、Hive、Presto、Impala、Flink、Ranger、Spark、Zeppelin などのサービスを再起動してください。
たとえば、Hive サービスを再起動するには、EMR クラスターの Hive サービスページに移動し、右上隅にある を選択します。