データレイクハウス FAQ
証明書の問題
-
クエリ実行時に
curl 77: Problem with the SSL CA cert.エラーが発生する場合、現在のシステム証明書が古いため、ローカルで更新する必要があります。- 最新の CA 証明書は
https://curl.se/docs/caextract.htmlからダウンロードできます。 - ダウンロードした
cacert-xxx.pemを/etc/ssl/certs/ディレクトリに配置します。例:sudo cp cacert-xxx.pem /etc/ssl/certs/ca-certificates.crt。
- 最新の CA 証明書は
-
クエリ実行時に次のエラーが発生する場合:
ERROR 1105 (HY000): errCode = 2, detailMessage = (x.x.x.x)[CANCELLED][INTERNAL_ERROR]error setting certificate verify locations: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: none。yum install -y ca-certificates
ln -s /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt /etc/ssl/certs/ca-certificates.crt
Kerberos
-
Kerberos 認証を使用する Hive Metastore への接続時に
GSS initiate failedエラーが発生する場合。通常は Kerberos 認証情報に誤りがあります。次の手順で確認してください。
-
1.2.1 より前のバージョンでは、Doris が依存する libhdfs3 ライブラリで gsasl が有効になっていませんでした。1.2.2 以降に更新してください。
-
各コンポーネントに正しい keytab と principal が設定されていること、およびすべての FE ノードと BE ノードに keytab ファイルが存在することを確認してください。
hadoop.kerberos.keytab/hadoop.kerberos.principal: Hadoop HDFS へのアクセスに使用します。HDFS に対応する値を設定してください。hive.metastore.kerberos.principal: Hive Metastore に使用します。
-
principal 内の IP アドレスをドメイン名に置き換えてみてください。デフォルトの
_HOSTプレースホルダーは使用しないでください。 -
すべての FE ノードと BE ノードに
/etc/krb5.confファイルが存在することを確認してください。
-
-
Hive Catalog 経由で Hive データベースに接続すると、
RemoteException: SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]エラーが発生する場合。show databasesとshow tablesは正常に実行でき、クエリ中にエラーが発生する場合は、次の二つの手順を実行してください。core-site.xmlとhdfs-site.xmlをfe/confとbe/confの各ディレクトリに配置します。- BE ノードで Kerberos の
kinitを実行し、BE を再起動してからクエリを実行します。
-
Kerberos を設定したテーブルのクエリ時に
GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos Ticket)エラーが発生する場合、通常は FE ノードと BE ノードを再起動すると解決します。- すべてのノードを再起動する前に、JAVA_OPTS パラメータに
-Djavax.security.auth.useSubjectCredsOnly=falseを設定します。設定先は"${DORIS_HOME}/be/conf/be.conf"です。これにより、JAAS の認証情報をアプリケーションではなく基盤となるメカニズムから取得します。 - 一般的な JAAS エラーの解決方法については、JAAS のトラブルシューティングを参照してください。
- すべてのノードを再起動する前に、JAVA_OPTS パラメータに
-
Catalog で Kerberos を設定する際に発生する
Unable to obtain password from userエラーを解決するには、次を確認してください。klist -kt your.keytabで、使用する principal が一覧に表示されることを確認します。- Catalog の設定に
yarn.resourcemanager.principalなどの不足項目がないか確認します。 - 上記に問題がない場合、システムのパッケージマネージャーでインストールした JDK が一部の暗号化アルゴリズムに対応していない可能性があります。JDK を手動でインストールし、
JAVA_HOME環境変数を設定することを検討してください。 - Kerberos では通常、暗号化に AES-256 を使用します。Oracle JDK には JCE のインストールが必要です。一部の OpenJDK ディストリビューションには強度制限のない JCE が含まれているため、別途インストールする必要はありません。
- JCE のバージョンは JDK のバージョンに対応します。JDK のバージョンに合った JCE の zip パッケージをダウンロードし、
$JAVA_HOME/jre/lib/securityディレクトリに展開してください。
-
KMS を使用して HDFS にアクセスする際に
java.security.InvalidKeyException: Illegal key sizeエラーが発生する場合、JDK を >= Java 8 u162 にアップグレードするか、対応する JCE Unlimited Strength Jurisdiction Policy Files をインストールしてください。 -
Catalog で Kerberos を設定した際に
SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]エラーが発生する場合は、core-site.xmlファイルを"${DORIS_HOME}/be/conf"ディレクトリに配置してください。HDFS へのアクセス時に
No common protection layer between client and serverエラーが発生する場合は、クライアントとサーバーでhadoop.rpc.protectionプロパティが一致していることを確認してください。<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
</configuration> -
Kerberos を設定した Broker Load の使用時に
Cannot locate default realm.エラーが発生する場合。Broker Load 用の
-Djava.security.krb5.conf=/your-pathをJAVA_OPTS(start_broker.shスクリプト内)に追加してください。 -
Catalog で Kerberos を設定する場合、
hadoop.usernameプロパティは併用できません。 -
JDK 17 から Kerberos にアクセスする場合
JDK 17 で Doris を実行して Kerberos サービスにアクセスすると、非推奨の暗号化アルゴリズムが原因で問題が発生する場合があります。
allow_weak_crypto=trueプロパティをkrb5.confに追加するか、Kerberos の暗号化アルゴリズムを更新してください。詳細は https://seanjmullan.org/blog/2021/09/14/jdk17#kerberos を参照してください。
JDBC Catalog
-
JDBC Catalog 経由で SQLServer に接続すると
unable to find valid certification path to requested targetエラーが発生する場合。trustServerCertificate=trueオプションをjdbc_urlに追加してください。 -
JDBC Catalog 経由で MySQL データベースに接続すると、中国語の文字が文字化けするか、中国語の文字を使ったクエリ条件が正しく機能しない場合。
useUnicode=true&characterEncoding=utf-8をjdbc_urlに追加してください。注: バージョン 1.2.3 以降では、JDBC Catalog 経由で MySQL データベースに接続する際、これらのパラメータが自動的に追加されます。
-
JDBC Catalog 経由で MySQL データベースに接続すると
Establishing SSL connection without server's identity verification is not recommendedエラーが発生する場合。useSSL=trueをjdbc_urlに追加してください。 -
JDBC Catalog を使用して MySQL のデータを Doris に同期する際に日付データの同期エラーが発生する場合は、MySQL のバージョンと MySQL ドライバーパッケージが対応しているか確認してください。たとえば、MySQL 8 以降には
com.mysql.cj.jdbc.Driverドライバーが必要です。 -
単一のフィールドが大きすぎると、クエリ中に BE 側で Java メモリの OOM が発生する場合があります。
JDBC Scanner が JDBC 経由でデータを読み込む際、セッション変数
batch_sizeによって、JVM がバッチごとに処理する行数が決まります。単一のフィールドが大きすぎると、field_size * batch_size(JVM の静的メモリやデータコピーのオーバーヘッドを考慮した概算値)が JVM のメモリ上限を超え、OOM が発生する可能性があります。対処方法:
batch_sizeの値をset batch_size = 512;の実行によって小さくします。デフォルト値は 4064 です。-XmxパラメータをJAVA_OPTSで変更して BE の JVM メモリを増やします。例:-Xmx8g。
Hive Catalog
-
Hive Catalog 経由で Iceberg または Hive テーブルにアクセスすると、
failed to get schemaまたはStorage schema reading not supportedエラーが発生する場合。次の方法を試してください。
-
icebergの実行時に必要な jar パッケージを Hive のlib/ディレクトリに配置します。 -
hive-site.xmlに次のように設定します。metastore.storage.schema.reader.impl=org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader設定後、Hive Metastore を再起動する必要があります。
-
Catalog のプロパティに
"get_schema_from_table" = "true"を追加します。このパラメータはバージョン 2.1.10 および 3.0.6 以降でサポートされています。
-
-
Hive Catalog への接続時に
Caused by: java.lang.NullPointerExceptionエラーが発生する場合。fe.log に次のスタックトレースが記録されている場合:
Caused by: java.lang.NullPointerException
at org.apache.hadoop.hive.ql.security.authorization.plugin.AuthorizationMetaStoreFilterHook.getFilteredObjects(AuthorizationMetaStoreFilterHook.java:78) ~[hive-exec-3.1.3-core.jar:3.1.3]
at org.apache.hadoop.hive.ql.security.authorization.plugin.AuthorizationMetaStoreFilterHook.filterDatabases(AuthorizationMetaStoreFilterHook.java:55) ~[hive-exec-3.1.3-core.jar:3.1.3]
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.getAllDatabases(HiveMetaStoreClient.java:1548) ~[doris-fe.jar:3.1.3]
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.getAllDatabases(HiveMetaStoreClient.java:1542) ~[doris-fe.jar:3.1.3]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]"metastore.filter.hook" = "org.apache.hadoop.hive.metastore.DefaultMetaStoreFilterHookImpl"をCREATE CATALOG文に追加してみてください。 -
Hive Catalog の作成後、
show tablesは正常に実行できるものの、クエリ時にjava.net.UnknownHostException: xxxxxが発生する場合。Catalog の PROPERTIES に次を追加してください。
'fs.defaultFS' = 'hdfs://<your_nameservice_or_actually_HDFS_IP_and_port>' -
Hive 1.x の ORC 形式のテーブルでは、基になる ORC ファイルのスキーマに
_col0、_col1、_col2などのシステム列名が含まれる場合があります。この場合、Hive テーブルの列名と対応付けるため、Catalog の設定でhive.versionに 1.x.x を指定してください。CREATE CATALOG hive PROPERTIES (
'hive.version' = '1.x.x'
); -
Catalog を使用してテーブルデータをクエリする際に
Invalid method nameなどの Hive Metastore 関連のエラーが発生する場合は、hive.versionパラメータを設定してください。 -
ORC 形式のテーブルのクエリ時に FE が
Could not obtain blockまたはCaused by: java.lang.NoSuchFieldError: typesを報告する場合、デフォルトで FE がファイル情報の取得とファイル分割のために HDFS にアクセスすることが原因の可能性があります。環境によっては FE から HDFS にアクセスできません。この場合、"hive.exec.orc.split.strategy" = "BI"を追加すると解決できます。ほかの選択肢には HYBRID(デフォルト)と ETL があります。 -
Hive では Hudi テーブルのパーティションフィールドの値を取得できるのに、Doris では取得できない場合があります。現在、Doris と Hive では Hudi のクエリ方法が異なります。Doris では、Hudi テーブルの avsc ファイル構造にパーティションフィールドを追加する必要があります。追加しない場合、
hoodie.datasource.hive_sync.partition_fields=partition_valを設定していても、Doris は partition_val が空の状態でクエリします。{
"type": "record",
"name": "record",
"fields": [{
"name": "partition_val",
"type": [
"null",
"string"
],
"doc": "Preset partition field, empty string when not partitioned",
"default": null
},
{
"name": "name",
"type": "string",
"doc": "Name"
},
{
"name": "create_time",
"type": "string",
"doc": "Creation time"
}
]
} -
Hive 外部テーブルのクエリ時に
java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not foundエラーが発生する場合は、Hadoop 環境でhadoop-lzo-*.jarを探し、"${DORIS_HOME}/fe/lib/"ディレクトリに配置して FE を再起動してください。バージョン 2.0.2 以降では、このファイルを FE のcustom_lib/ディレクトリに配置できます。ディレクトリが存在しない場合は手動で作成してください。これにより、クラスタのアップグレード時にlibディレクトリが置き換わってもファイルが失われません。 -
serde に
org.apache.hadoop.hive.contrib.serde2.MultiDelimitserDeを指定して Hive テーブルを作成し、そのテーブルへのアクセス時にstorage schema reading not supportedエラーが発生する場合は、hive-site.xmlファイルに次の設定を追加して HMS サービスを再起動してください。<property>
<name>metastore.storage.schema.reader.impl</name>
<value>org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader</value>
</property> -
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-emptyエラーが発生する場合。FE ログに記録されるエラーメッセージの全文は次のとおりです。org.apache.doris.common.UserException: errCode = 2, detailMessage = S3 list path failed. path=s3://bucket/part-*,msg=errors while get file status listStatus on s3://bucket: com.amazonaws.SdkClientException: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
org.apache.doris.common.UserException: errCode = 2, detailMessage = S3 list path exception. path=s3://bucket/part-*, err: errCode = 2, detailMessage = S3 list path failed. path=s3://bucket/part-*,msg=errors while get file status listStatus on s3://bucket: com.amazonaws.SdkClientException: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
org.apache.hadoop.fs.s3a.AWSClientIOException: listStatus on s3://bucket: com.amazonaws.SdkClientException: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Caused by: com.amazonaws.SdkClientException: Unable to execute HTTP request: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Caused by: javax.net.ssl.SSLException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-emptyFE ノードで
update-ca-trust(CentOS/RockyLinux)を使用して CA 証明書を更新し、FE プロセスを再起動してみてください。 -
BE で
java.lang.InternalErrorが発生する場合。be.INFOに次のようなエラーが記録されているときは:W20240506 15:19:57.553396 266457 jni-util.cpp:259] java.lang.InternalError
at org.apache.hadoop.io.compress.zlib.ZlibDecompressor.init(Native Method)
at org.apache.hadoop.io.compress.zlib.ZlibDecompressor.<init>(ZlibDecompressor.java:114)
at org.apache.hadoop.io.compress.GzipCodec$GzipZlibDecompressor.<init>(GzipCodec.java:229)
at org.apache.hadoop.io.compress.GzipCodec.createDecompressor(GzipCodec.java:188)
at org.apache.hadoop.io.compress.CodecPool.getDecompressor(CodecPool.java:183)
at org.apache.parquet.hadoop.CodecFactory$HeapBytesDecompressor.<init>(CodecFactory.java:99)
at org.apache.parquet.hadoop.CodecFactory.createDecompressor(CodecFactory.java:223)
at org.apache.parquet.hadoop.CodecFactory.getDecompressor(CodecFactory.java:212)
at org.apache.parquet.hadoop.CodecFactory.getDecompressor(CodecFactory.java:43)Doris に組み込まれた
libz.aとシステム環境のlibz.soが競合しています。解決するには、まずexport LD_LIBRARY_PATH=/path/to/be/lib:$LD_LIBRARY_PATHを実行し、その後 BE プロセスを再起動してください。 -
Hive へのデータ挿入時に
HiveAccessControlException Permission denied: user [user_a] does not have [UPDATE] privilege on [database/table]エラーが発生する場合。データ挿入後には対応する統計情報を更新する必要があり、この更新操作には ALTER 権限が必要です。そのため、Ranger でこのユーザーに ALTER 権限を付与してください。
-
ORC ファイルのクエリ時に、次のようなエラーが
Orc row reader nextBatch failed. reason = Can't open /usr/share/zoneinfo/+08:00発生する場合。まず、現在のセッションの
time_zone設定を確認してください。Asia/Shanghaiのような地域名によるタイムゾーンを使用することを推奨します。セッションのタイムゾーンがすでに
Asia/Shanghaiに設定されていてもクエリが失敗する場合、ORC ファイルはタイムゾーン+08:00で生成されたと考えられます。クエリ実行時に ORC フッターを解析するため、このタイムゾーンが必要です。この場合、/usr/share/zoneinfo/ディレクトリ内に、+08:00から同等のタイムゾーンを指すシンボリックリンクを作成してみてください。 -
JSON SerDe(例:
org.openx.data.jsonserde.JsonSerDe)を使用する Hive テーブルのクエリ時に、failed to get schemaまたはStorage schema reading not supportedエラーが発生する場合。Hive テーブルが JSON 形式で保存されている場合(ROW FORMAT SERDE が
org.openx.data.jsonserde.JsonSerDe)、Hive Metastore がデフォルトの方法でテーブルのスキーマ情報を読み取れず、Doris からのクエリ時に次のエラーが発生することがあります。errCode = 2, detailMessage = failed to get schema for table xxx in db xxx.
reason: org.apache.hadoop.hive.metastore.api.MetaException:
java.lang.UnsupportedOperationException: Storage schema reading not supportedCatalog のプロパティに
"get_schema_from_table" = "true"を追加すると解決できます。このパラメータを設定すると、Doris は基盤となるストレージの Schema Reader に依存せず、Hive テーブルのメタデータからスキーマを直接取得します。CREATE CATALOG hive PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://x.x.x.x:9083',
'get_schema_from_table' = 'true'
);このパラメータはバージョン 2.1.10 および 3.0.6 以降でサポートされています。
-
Hive Catalog テーブルのクエリ計画が極端に遅く、
nereids cost too much timeエラーが発生し、HMS へのアクセスに毎回ほぼ同じ長い時間(例: 約 10 秒)がかかる場合。根本原因の分析:
通常、この問題は HMS RPC 自体の実行が遅いことによるものではありません。最も一般的な根本原因は、Doris FE ノードの DNS 設定が正しくないことです。 Hive Metastore Client の初期化時にはホスト名の解決が行われます。設定された DNS サーバーに到達できないか応答がない場合、新しい HMS クライアント接続を確立するたびに DNS 名前解決がタイムアウトし(通常は 10 秒)、メタデータの取得が大幅に遅くなります。
典型的な症状:
- ネットワーク接続は正常: HMS のポートには到達できるものの、Doris からのメタデータへのアクセスが極端に遅くなります。
- 一定の遅延: 遅延は毎回、一定のタイムアウト値(例: 10 秒)に達します。
- 回避策が効かない: Catalog プロパティで HMS クライアントのタイムアウト値を増やすだけではエラーを覆い隠すだけで、各接続で発生する一定の 10 秒の遅延は解消されません。
トラブルシューティング手順:
Doris FE ノードで次のコマンドを実行し、DNS とホスト名の解決を確認してください。
# Check current DNS server configuration
cat /etc/resolv.conf
# Test if the DNS server is reachable and measure resolution latency
ping <nameserver_ip>
dig @<nameserver_ip> example.com
dig @<nameserver_ip> -x <hms_ip>対処方法(いずれかを選択):
- DNS 設定を修正する(推奨):
nameserverの設定を Doris FE ノードの/etc/resolv.confで修正し、DNS サービスに到達できて迅速に応答することを確認します。ローカルネットワークで DNS が不要な場合は、無効なネームサーバーをコメントアウトすることを検討してください。 - 静的なホストマッピングを設定する: FE ノードの
/etc/hostsに HMS ノードの IP アドレスとホスト名の対応関係を追加します。 - Catalog プロパティを統一する: Catalog の作成時には、
hive.metastore.urisプロパティに IP アドレスを直接指定するのではなく、名前解決可能なホスト名を使用することを強く推奨します。
-
Hive Catalog テーブルへのクエリが時折長時間応答しなくなるか、オプティマイザーのタイムアウトエラー
nereids cost too much timeを直接報告する一方で、その直後のクエリは正常に動作する場合。問題の説明:
この問題は通常、Catalog がしばらく使用されていなかった後に発生します。HMS RPC の開始時にプール内の古い接続を再利用すると、ソケットのタイムアウト時間(デフォルトは 10 秒)が経過するまでリクエストが停止します。Hive Client の内部再試行機構により、複数回再試行すると合計の待機時間が 20~30 秒になることがあります。その結果、クエリ計画段階が極端に遅くなり、Doris FE オプティマイザーの
nereids cost too much timeタイムアウトエラーが発生しやすくなります。接続が破棄され、再確立されると、性能は正常に戻ります。根本原因の分析:
Doris は HMS Catalog ごとにクライアントプールを維持し、接続を再利用します。複雑なネットワーク環境(VPC をまたぐ場合や、ファイアウォール、NAT ゲートウェイを経由する場合など)では、アイドル状態の TCP 接続が
idle timeoutの後にネットワーク機器によって通知なしに破棄されることがあります。通常、これらの機器はエンドポイントに FIN/RST パケットを送信しないため、Doris は接続がまだ有効だと判断します。このような無効な接続を再利用すると、障害を検出して再試行を開始するまで、ソケットのタイムアウト時間が経過するのを待つ必要があります。トラブルシューティング手順:
- Doris FE と HMS の間にファイアウォール、NAT ゲートウェイ、ロードバランサーがあるか確認します。
- 診断ツール Pulse(hms-tools)を使用します。ネットワーク接続は速いのに、長時間アイドル状態が続いた後の RPC 実行で 10 秒の倍数にあたる一定の遅延が発生する場合、アイドル接続が通知なしに破棄されていることを確認できます。
対処方法:
Catalog プロパティで接続の有効期間をネットワーク機器のアイドルタイムアウトより少し短く設定します。Hive 標準のソケット有効期間プロパティの使用を推奨します。
CREATE CATALOG hive_catalog PROPERTIES (
"type" = "hms",
"hive.metastore.uris" = "thrift://<hms_host>:<port>",
-- Set a value shorter than your network's idle timeout (e.g., 300s)
"hive.metastore.client.socket.lifetime" = "300s"
);この設定を行うと、HMS Client は RPC を送信する前に接続の経過時間を確認します。
lifetimeを超えている場合は先に再接続するため、古い接続による長時間の停止やオプティマイザーのタイムアウトを回避できます。
HDFS
-
HDFS 3.x へのアクセス時に
java.lang.VerifyError: xxxエラーが発生する場合、1.2.1 より前のバージョンの Doris は Hadoop 2.8 に依存しています。2.10.2 に更新するか、Doris を 1.2.2 より後のバージョンにアップグレードする必要があります。 -
Hedged Read を使用して HDFS の読み取り遅延を改善する場合。HDFS の負荷が高いと、特定の HDFS 上のデータレプリカの読み取りに時間がかかり、クエリ全体の効率が低下することがあります。HDFS Client は Hedged Read 機能を提供しています。読み取りリクエストが一定時間内に応答しない場合、この機能は同じデータを読み取る別のスレッドを起動し、先に返ってきた結果を使用します。
注: この機能は HDFS クラスタの負荷を増やす可能性があるため、慎重に使用してください。
この機能は次のように有効にできます。
CREATE CATALOG regression PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://172.21.16.47:7004',
'dfs.client.hedged.read.threadpool.size' = '128',
'dfs.client.hedged.read.threshold.millis' = '500'
);dfs.client.hedged.read.threadpool.sizeは Hedged Read に使用するスレッド数を表します。これらのスレッドは HDFS Client で共有されます。通常、一つの HDFS クラスタに対して BE ノードは HDFS Client を共有します。dfs.client.hedged.read.threshold.millisは読み取りのしきい値をミリ秒単位で指定します。読み取りリクエストが応答しないままこのしきい値を超えると、Hedged Read が起動します。有効にすると、Query Profile に関連する指標が表示されます。
TotalHedgedRead: Hedged Read を開始した回数。HedgedReadWins: Hedged Read が成功した回数(起動した追加リクエストが元のリクエストより早く結果を返した回数)。これらの値は単一のクエリではなく、単一の HDFS Client に対する累計値です。同じ HDFS Client が複数のクエリで再利用される場合があります。
-
Couldn't create proxy provider class org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProviderFE と BE の起動スクリプトでは、環境変数
HADOOP_CONF_DIRが CLASSPATH に追加されます。HADOOP_CONF_DIRが存在しないパスや誤ったパスを指している場合、誤ったxxx-site.xmlファイルが読み込まれ、設定情報を正しく取得できないことがあります。HADOOP_CONF_DIRが正しく設定されているか確認するか、この環境変数を削除してください。 -
BlockMissingExcetpion: Could not obtain block: BP-XXXXXXXXX No live nodes contain current block考えられる対処方法は次のとおりです。
-
hdfs fsck file -files -blocks -locationsを使用して、ファイルに問題がないか確認します。 -
telnetを使用して DataNode との接続を確認します。エラーログに次のエラーが出力される場合があります。
No live nodes contain current block Block locations: DatanodeInfoWithStorage[10.70.150.122:50010,DS-7bba8ffc-651c-4617-90e1-6f45f9a5f896,DISK]まず、Doris クラスタと
10.70.150.122:50010の間の接続を確認してください。また、HDFS クラスタが内部 IP と外部 IP の二つのネットワークを使用している場合があります。この場合は通信にドメイン名が必要なため、Catalog のプロパティに
"dfs.client.use.datanode.hostname" = "true"を追加してください。あわせて、
hdfs-site.xml(fe/confとbe/confに配置済み)でも、このパラメータが true に設定されているか確認してください。 -
DataNode のログを確認します。
次のエラーが発生する場合:
org.apache.hadoop.hdfs.server.datanode.DataNode: Failed to read expected SASL data transfer protection handshake from client at /XXX.XXX.XXX.XXX:XXXXX. Perhaps the client is running an older version of Hadoop which does not support SASL data transfer protection現在の HDFS では暗号化通信が有効になっていますが、クライアント側では有効になっていないことを示しています。
次のいずれかの方法で対処してください。
hdfs-site.xmlとcore-site.xmlをfe/confとbe/confにコピーします。(推奨)hdfs-site.xmlで該当するdfs.data.transfer.protectionの設定を確認し、そのパラメータを Catalog に設定します。
-
-
Hive Catalog テーブルのクエリ時に
RPC response has a length of xxx exceeds maximum data lengthエラーが発生する場合。例:
RPC response has a length of 1213486160 exceeds maximum data length1213486160を十六進数で表すと0x48545450となり、ASCII 文字列の"HTTP"に相当します。これは、Doris FE が HDFS NameNode の RPC ポートへの接続を試みたものの、代わりに HTTP 応答を受信したことを示しています。根本原因は、Catalog または
hdfs-site.xmlに設定された HDFS NameNode のポートが誤っており、RPC ポートが必要な箇所に HTTP ポートが指定されていることです。HDFS NameNode は通常、次の二種類のポートを公開します。- RPC ポート(デフォルト:
8020または9000): HDFS クライアントの通信に使用します。Doris に指定するのはこちらです。 - HTTP ポート(デフォルト:
9870または50070): NameNode Web UI に使用します。
Catalog のプロパティ、または
hdfs-site.xml(fe/confとbe/confに配置)の HDFS NameNode ポート設定を確認し、RPC ポート(dfs.namenode.rpc-address)が指定され、HTTP ポート(dfs.namenode.http-address)が指定されていないことを確認してください。 - RPC ポート(デフォルト:
DLF Catalog
-
DLF Catalog の使用時に BE が JindoFS データを読み取る際、
Invalid addressエラーが発生する場合は、ログに表示されたドメイン名と IP アドレスの対応関係を/etc/hostsに追加してください。 -
データを読み取る権限がない場合は、
hadoop.usernameプロパティで権限のあるユーザーを指定してください。 -
DLF Catalog のメタデータは DLF と一致している必要があります。DLF でメタデータを管理する場合、Hive に新しく取り込まれたパーティションが DLF に同期されず、DLF と Hive のメタデータに不一致が生じることがあります。これを解決するには、Hive のメタデータが DLF に完全に同期されていることを確認してください。
その他の問題
-
Binary 型を Doris にマッピングした後、クエリ結果が文字化けする場合。
Doris は Binary 型をネイティブにサポートしていません。そのため、各種データレイクやデータベースの Binary 型を Doris にマッピングする際は、通常 String 型を使用します。String 型では印字可能な文字しか表示できません。Binary データの内容をクエリする必要がある場合は、
TO_BASE64()関数で Base64 にエンコードしてから処理できます。 -
Parquet ファイルを分析する場合。
Parquet ファイルのクエリでは、生成したシステムによって RowGroup の数やインデックス値など、ファイル形式の細部が異なる場合があります。そのため、問題の特定や性能分析のために Parquet ファイルのメタデータを確認する必要があることがあります。次のツールを使用すると、Parquet ファイルを分析できます。
-
Apache Parquet Cli 1.14.0 をダウンロードして展開します。
-
分析する Parquet ファイルをローカルマシンにダウンロードします。ここでは、パスを
/path/to/file.parquetとします。 -
次のコマンドで Parquet ファイルのメタデータを分析します。
./parquet-tools meta /path/to/file.parquet -
その他の機能については、Apache Parquet Cli のドキュメントを参照してください。
-
診断ツール
Pulse
Pulse は、データレイク環境でインフラストラクチャへの依存関係を診断するための軽量な接続テストツールキットです。複数の専用ツールを備え、外部テーブルへのアクセスに関する環境由来の問題を素早く特定できます。
Pulse には主に次のツール群があります。
-
HMS 診断ツール(
hms-tools):- Hive Metastore(HMS)の問題を調査するために設計されています。
- ヘルスチェック、ping テスト、オブジェクトのメタデータ取得、設定診断をサポートします。
- 性能ベンチマーク:
benchモードで HMS の応答時間の分布とレイテンシーを測定し、メタデータ層がボトルネックかどうかを判断できます。
-
Kerberos 診断ツール(
kerberos-tools):- Kerberos 認証を使用する環境で
krb5.confの設定を検証します。 - KDC への到達確認、keytab ファイルの調査、ログインテストをサポートし、セキュリティ層が接続を妨げていないか確認できます。
- Kerberos 認証を使用する環境で
-
オブジェクトストレージ診断ツール(
s3-tools、gcs-tools、azure-blob-cpp):- 主要なクラウドストレージサービス(AWS S3、Google GCS、Azure Blob Storage)向けの診断ツールです。
- "Access Denied" や "Bucket Not Found" など、外部テーブルへのアクセス時によくある問題を調査します。
- 認証情報の取得元や STS ID の検証、バケット単位の操作テストをサポートします。
コマンド例(HMS):
# Test basic HMS connectivity and latency details using hms-tools
java -jar hms-tools.jar ping --uris thrift://<hms_host>:<port> --count 3 --verbose
# Benchmark actual metadata RPC response distribution using hms-tools
java -jar hms-tools.jar bench --uris thrift://<hms_host>:<port> --rpc get_all_databases --iterations 10
メタデータへのアクセスが遅い場合や外部テーブルに接続できない場合は、問題の種類(認証失敗、メタデータ取得の遅延、ストレージへの到達可否など)に応じた Pulse ツールで調査することを推奨します。connect フェーズは非常に速いのに初期化全体で大きな一定の遅延が発生する場合は、上記の FAQ を参照して FE ノードの DNS とホスト名の解決設定を確認してください。