このトピックでは、E-MapReduce(EMR)クラスターの Trino サービスのユーザー定義関数(UDF)を動的にロードおよび削除する方法について説明します。
背景情報
V3.39.1 または V5.5.0 より前のマイナーバージョンの EMR クラスターの Trino サービスに UDF を追加する場合、UDF の JAR ファイルを EMR クラスターのすべてのノードにアップロードし、ノードを再起動する必要があります。この手順は複雑です。EMR クラスターが Container Service for Kubernetes(ACK)クラスターにデプロイされている場合は、UDF を追加するときにイメージを再パッケージ化する必要もあります。この手順はユーザーフレンドリーではありません。 V3.39.1、V5.5.0、または V3.39.1 または V5.5.0 より後のマイナーバージョンの EMR Trino クラスターでは、UDF を動的にロードおよび削除できます。
制限事項
UDF を動的にロードおよび削除できるのは、EMR Hadoop クラスター、または V3.39.1、V5.5.0、あるいは V3.39.1 または V5.5.0 より後のマイナーバージョンの EMR Trino クラスターのみです。
注意事項
DROP コマンドを実行するときに、コマンド内の
xxxxxxが hive や mysql などの既存のコネクタを指定している場合、コネクタディレクトリのすべてのコンテンツが削除され、復元できなくなります。 DROP コマンドを実行する際は注意してください。EMR クラスターをスケールアウトした後、新しいノードには、既存のノードにアップロードされた UDF JAR ファイルは含まれていません。新しいノードに UDF JAR ファイルを追加するには、スケールアウト操作を実行する前に DROP コマンドを実行し、スケールアウト操作が完了した後に ADD コマンドを実行します。
Hadoop Distributed File System(HDFS)または Object Storage Service(OSS)へのアクセスに失敗した場合は、
hadoop fs -lsコマンドを実行して、EMR クラスターの各ノードが UDF JAR ファイルに直接アクセスできるかどうかを確認します。ワーカーノードが UDF JAR ファイルにアクセスできない場合は、ワーカーノードの server.log ファイルに基づいて原因を特定できます。
手順
手順 1:準備を行う
使用するファイルシステムに UDF の JAR ファイルをアップロードします。
次のいずれかの方法を使用して、UDF の JAR ファイルをアップロードできます。
方法 1:すべての UDF コンテンツを udfjar.jar などの JAR ファイルにパッケージ化します。次に、JAR ファイルをファイルシステムにアップロードします。 OSS バケットが Hadoop クラスターまたは Trino クラスターとは異なる Alibaba Cloud アカウントに属している場合、または Hadoop クラスターまたは Trino クラスターが ACK クラスターにデプロイされている場合は、UDF JAR ファイルのパブリック読み取りアクセスが有効になっていることを確認してください。
重要JAR ファイルの名前は、既存のコネクタまたは UDF の名前と同じにすることはできません。
JAR ファイル名には英数字のみを含めることをお勧めします。そうしないと、名前が認識されない場合があります。
Trino サービスは、Presto サービスの UDF を直接使用することはできません。 JAR ファイルの名前を変更し、JAR ファイルを再コンパイルする必要があります。そうしないと、UDF を追加できない場合があります。
方法 2:追加する UDF が複数の JAR ファイルに依存しており、JAR ファイルを 1 つの JAR ファイルにパッケージ化したくない場合は、すべての JAR ファイルを udfdir などの同じディレクトリにアップロードできます。次に、ディレクトリ全体をファイルシステムにアップロードします。
重要ディレクトリの名前は、既存のコネクタまたは UDF の名前と同じにすることはできません。
ディレクトリに無関係なコンテンツを含めないでください。
このディレクトリを設定するための権限が付与されていることを確認してください。
手順 2:UDF を追加する
クライアントを起動し、クライアントを Trino サービスに接続し、次の操作を実行して、追加する UDF の JAR ファイルを追加します。
SSH モードでクラスターにログオンします。詳細については、「クラスターへのログオン」をご参照ください。
次のコマンドを実行して、Trino コンソールにログオンします。
trino --server master-1-1:9090
次のコマンドを実行して、UDF を追加します。
この手順では、Trino インストールパスの plugin ディレクトリにフォルダーが作成されます。 UDF JAR ファイルは、add コマンドで指定したファイルシステムパスから作成されたフォルダーにアップロードされ、関数リストが更新されます。
UDF を追加するための構文は、
add jar "xxxxxx"です。説明コマンドの実行時にエラーが発生した場合は、ワーカーノードの
/mnt/disk1/log/trino/var/log/server.logログファイルを確認して、原因を特定できます。手順 1:準備を行う で方法 1 を使用する場合は、次のコマンドを実行して UDF を追加します。
add jar "oss://path/udfjar.jar"手順 1:準備を行う で方法 2 を使用する場合は、次のコマンドを実行して UDF を追加します。
add jar "oss://path/udfdir"方法 2 を使用する場合、Trino はアップロードする必要があるディレクトリ全体を識別し、ディレクトリからクラスターにすべてのコンテンツをダウンロードします。
UDF JAR ファイルが HDFS に保存されている場合は、次のコマンドを実行して UDF を追加します。
add jar "hdfs://xxxxxx";UDF JAR ファイルがローカルファイルシステムに保存されている場合は、次のコマンドを実行して UDF を追加します。
add jar "file:///xxxxxx";重要ローカルファイルシステムを使用する場合は、Trino サービスが実行されているすべてのノードの必要なパスに UDF JAR ファイルをアップロードする必要があります。
fileの後に 3 つのスラッシュ(/)を指定する必要があります。
手順 3:UDF を削除する
plugin ディレクトリにある UDF JAR ファイルの名前が付いたディレクトリ全体を直接削除します。 DROP コマンドで UDF JAR ファイルの名前を指定して UDF を削除し、関数リストをリロードします。
UDF を削除するための構文は、DROP JAR xxxxxx です。
xxxxxx は、アップロードされた UDF JAR ファイルの名前を示します。 xxxxxx は、Trino サービスによって読み取られる UDF プラグインディレクトリに追加されたフォルダーの名前も示します。
DROP コマンドでは、UDF JAR ファイルの名前を引用符(")で囲む必要はありません。手順 1 で方法 1 または方法 2 のどちらを使用して UDF JAR ファイルをアップロードした場合でも、UDF JAR ファイルを削除するときに jar ファイル名拡張子を追加する必要はありません。コマンドの例:
drop jar udfjar;drop jar udfdir;