背景
OBServerにJNIフレームワークを導入して外部データレイクとの接続を実現した後、環境初期化に関連するさまざまな問題が発生する可能性があります。
問題1:HDFS/ODPS JNI外部テーブルの作成時にエラーが表示される
エラー1:ERROR 11056 : JNI env could not be found
原因
JNI Envの環境初期化が失敗する原因は以下の可能性があります:
ob_java_homeの設定が誤っているため、libjvm.soダイナミックライブラリを正しくロードできません。このダイナミックライブラリは、環境初期化時にJVMを起動するための重要なものです。ob_java_optsの設定が誤っています。現在、CPPフレームワークとJNIフレームワークの接続には一定の制限があるため、多くの使用設定上の問題を避けるために、JVMプロセスを起動するために関連するプロパティパラメータを強制的に設定する必要があります。パラメータの設定については、ob_java_optsを参照してください。JNI Env環境に依存する
libhdfs.soライブラリファイル(OceanBaseデータベースとJVM間の通信ブリッジ)の配置パスと_ob_additional_lib_pathがマッチしておらず、正確に設定する必要があります。
解決策
現在の
java homeの設定が存在するかどうか手動で確認し、特に現在のユーザーがそのパスへのアクセス権限を持っているかどうかを確認します。java homeは存在するものの、OBServerの起動ユーザーにそのパスへのアクセス権限がない場合があります。ob_java_optsを参照して、
ob_java_optsに必須の項目が漏れていないかどうか確認します。_ob_additional_lib_pathの設定パスが存在するかどうか、またOBServerの起動ユーザーがそのパスへのアクセス権限を持っているかどうかを確認します。
エラー2:ERROR 11032: HDFS: path not found
原因
HDFS: path not foundエラーが発生する一般的なシナリオは以下のとおりです:
Kerberos認証を有効にしたHDFS環境で、特定のHDFS外部テーブルにアクセスする際、権限不足によりアクセスできない場合、-11032エラーが発生します。
Kerberos認証の設定が正しいにもかかわらず、HDFS: path not foundが発生する場合、外部テーブル作成ステートメントで指定された外部テーブルのパスが誤っており、存在しないパスを指している可能性があります。
外部テーブルへのアクセスは初期に正常だったものの、クエリ実行後しばらくしてから11032エラーが発生する場合、HDFSの対応する外部テーブルパス下の特定のファイルに不良ブロックが存在する可能性があります。これは、HDFS DataNodeがそのデータブロックにエラーが発生し、アクセスできないと報告することで、エラーがトリガーされることを意味します。
解決策
Kerberos認証のkeytabとprincipalが有効であり、対応するユーザーがHDFSクラスタへのアクセス権限を持っていることを確認し、外部テーブルの権限を再設定してKerberos認証を設定します。
対応するHDFSパスが正しく存在することを確認し、外部テーブルのHDFSパスマッピングを再構築します。
顧客の運用保守チームにフィードバックし、データの不良ブロック状況を確認した後、不良ブロックの調整または環境の変更を選択して引き続き検証を行うことができます。
エラー3:ERROR 4016: Internal Error
原因
Internal Errorが発生する原因は以下の可能性があります:
- 外部テーブルクエリを実行する際にInternal Errorが発生する場合、外部テーブルの実際の設定タイプが予想と異なる可能性があります。例えば、
Stringタイプの列をIntタイプにマッピングすると、一部のフィールドデータの変換に失敗します。 - その他の予期しないプログラム実行パスがInternal Errorを引き起こしています。
解決策
外部テーブル作成ステートメントおよび対応する外部テーブルデータファイルのメタデータ型マッピングが正しいかどうか確認します。
関連ログを確認し、エラーログスタックを取得して、エラーが発生した具体的な詳細を確認します。