HDFS
このドキュメントでは、HDFSにアクセスするために必要なパラメータについて説明します。これらのパラメータは以下に適用されます:
- Catalogプロパティ
- Table Valued Functionプロパティ
- Broker Loadプロパティ
- Exportプロパティ
- Outfileプロパティ
- バックアップとリストア
パラメータ概要
| プロパティ名 | レガシー名 | 説明 | デフォルト値 | 必須 |
|---|---|---|---|---|
| hdfs.authentication.type | hadoop.security.authentication | 認証タイプを指定します。オプション値はkerberosまたはsimpleです。kerberosが選択された場合、システムはKerberos認証を使用してHDFSと連携します。simpleが使用された場合、認証が使用されないことを意味し、オープンなHDFSクラスターに適しています。kerberosを選択するには、対応するprincipalとkeytabの設定が必要です。 | simple | No |
| hdfs.authentication.kerberos.principal | hadoop.kerberos.principal | 認証タイプがkerberosの場合、Kerberos principalを指定します。Kerberos principalは、通常サービス名、ホスト名、ドメイン名を含む一意の識別文字列です。 | - | No |
| hdfs.authentication.kerberos.keytab | hadoop.kerberos.keytab | このパラメータは、Kerberos認証のkeytabファイルパスを指定します。keytabファイルは暗号化された認証情報を保存し、ユーザーが手動でパスワードを入力することなく、システムが自動的に認証を行えるようにします。 | - | No |
| hdfs.impersonation.enabled | - | trueの場合、HDFS impersonation機能を有効にします。core-site.xmlで設定されたproxyユーザーを使用して、Dorisログインユーザーの代理としてHDFS操作を実行します | まだサポートされていません | - |
| hadoop.username | - | 認証タイプがsimpleの場合、このユーザーがHDFSへのアクセスに使用されます。デフォルトでは、Dorisプロセスを実行しているLinuxシステムユーザーがアクセスに使用されます | - | - |
| hadoop.config.resources | - | HDFS設定ファイルディレクトリ(hdfs-site.xmlとcore-site.xmlを含む必要があります)を相対パスで指定します。デフォルトディレクトリは(FE/BE)デプロイメントディレクトリ下の/plugins/hadoop/conf/です(fe.conf/be.confのhadoop_config_dirを変更することでデフォルトパスを変更できます)。すべてのFEとBEノードで同じ相対パスを設定する必要があります。例:hadoop/conf/core-site.xml,hadoop/conf/hdfs-site.xml | - | - |
| dfs.nameservices | - | HDFS高可用性クラスターパラメータを手動で設定します。hadoop.config.resources設定を使用している場合、パラメータはhdfs-site.xmlから自動的に読み込まれます。以下のパラメータと合わせて使用する必要があります:dfs.ha.namenodes.your-nameservice、dfs.namenode.rpc-address.your-nameservice.nn1、dfs.client.failover.proxy.providerなど。 | - | - |
3.1より前のバージョンでは、レガシー名を使用してください。
認証設定
HDFSは2つの認証方法をサポートしています:
- Simple
- Kerberos
Simple認証
Simple認証は、Kerberosを有効にしていないHDFSクラスターに適しています。
Simple認証を使用する場合、以下のパラメータを設定するか、直接デフォルト値を使用できます:
"hdfs.authentication.type" = "simple"
Simple認証モードでは、hadoop.usernameパラメータを使用してユーザー名を指定できます。指定されない場合、現在のプロセスのユーザー名がデフォルトになります。
例:
lakersユーザー名を使用してHDFSにアクセスする
"hdfs.authentication.type" = "simple",
"hadoop.username" = "lakers"
デフォルトのシステムユーザーを使用してHDFSにアクセスする
"hdfs.authentication.type" = "simple"
Kerberos認証
Kerberos認証は、Kerberosが有効になっているHDFSクラスターに適しています。
Kerberos認証を使用する場合、以下のパラメータを設定する必要があります:
"hdfs.authentication.type" = "kerberos",
"hdfs.authentication.kerberos.principal" = "<your_principal>",
"hdfs.authentication.kerberos.keytab" = "<your_keytab>"
Kerberos認証モードでは、Kerberosプリンシパルとkeytabファイルパスを設定する必要があります。
Dorisはhdfs.authentication.kerberos.principalプロパティで指定されたアイデンティティでHDFSにアクセスし、keytabで指定されたkeytabを使用してプリンシパルを認証します。
注意:
keytabファイルは、すべてのFEおよびBEノードで同じパスに存在する必要があり、Dorisプロセスを実行するユーザーはkeytabファイルに対する読み取り権限を持つ必要があります。
Example:
"hdfs.authentication.type" = "kerberos",
"hdfs.authentication.kerberos.principal" = "hdfs/hadoop@HADOOP.COM",
"hdfs.authentication.kerberos.keytab" = "/etc/security/keytabs/hdfs.keytab",
一般的な Kerberos 設定の問題のトラブルシューティングについては、Kerberos FAQ を参照してください。
HDFS HA Configuration
HDFS HA モードが有効になっている場合、dfs.nameservices 関連のパラメータを設定する必要があります:
'dfs.nameservices' = '<your-nameservice>',
'dfs.ha.namenodes.<your-nameservice>' = '<nn1>,<nn2>',
'dfs.namenode.rpc-address.<your-nameservice>.<nn1>' = '<nn1_host:port>',
'dfs.namenode.rpc-address.<your-nameservice>.<nn2>' = '<nn2_host:port>',
'dfs.client.failover.proxy.provider.<your-nameservice>' = 'org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider',
例:
'dfs.nameservices' = 'nameservice1',
'dfs.ha.namenodes.nameservice1' = 'nn1,nn2',
'dfs.namenode.rpc-address.nameservice1.nn1' = '172.21.0.2:8088',
'dfs.namenode.rpc-address.nameservice1.nn2' = '172.21.0.3:8088',
'dfs.client.failover.proxy.provider.nameservice1' = 'org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider',
設定ファイル
この機能はバージョン3.1.0以降でサポートされています
Dorisはhadoop.config.resourcesパラメータを通じてHDFS設定ファイルディレクトリの指定をサポートしています。
設定ファイルディレクトリにはhdfs-site.xmlとcore-site.xmlファイルが含まれている必要があります。デフォルトディレクトリは(FE/BE)デプロイメントディレクトリ下の/plugins/hadoop_conf/です。すべてのFEおよびBEノードは同じ相対パスを設定する必要があります。
設定ファイルにこのドキュメントで言及されている上記のパラメータが含まれている場合、ユーザーが明示的に設定したパラメータが優先されます。設定ファイルは複数のファイルを指定でき、hadoop/conf/core-site.xml,hadoop/conf/hdfs-site.xmlのようにカンマで区切ります。
例:
-- Multiple configuration files
'hadoop.config.resources'='hdfs-cluster-1/core-site.xml,hdfs-cluster-1/hdfs-site.xml'
-- Single configuration file
'hadoop.config.resources'='hdfs-cluster-2/hdfs-site.xml'
HDFS IO 最適化
場合によっては、HDFS負荷が高いとHDFS上のデータレプリカの読み取りに長時間を要し、全体的なクエリ効率が低下することがあります。以下では、関連する最適化設定について説明します。
Hedged Read
HDFSクライアントはHedged Read機能を提供しています。この機能は、読み取り要求が一定の閾値を超えても戻らない場合に、同じデータを読み取る別の読み取りスレッドを開始し、最初に戻った方を使用することができます。
注意:この機能はHDFSクラスターの負荷を増加させる可能性があります。慎重に使用してください。
この機能は以下の方法で有効にできます:
"dfs.client.hedged.read.threadpool.size" = "128",
"dfs.client.hedged.read.threshold.millis" = "500"
-
dfs.client.hedged.read.threadpool.sizeHedged Readに使用されるスレッド数を表します。これらのスレッドは1つのHDFS Clientで共有されます。通常、1つのHDFSクラスターに対して、BEノードは1つのHDFS Clientを共有します。
-
dfs.client.hedged.read.threshold.millisミリ秒単位の読み取り閾値です。読み取り要求がこの閾値を超えても返らない場合、Hedged Readがトリガーされます。
有効化後、Query Profileで関連パラメータを確認できます:
-
TotalHedgedReadHedged Readが開始された回数。
-
HedgedReadWinsHedged Readの成功回数(開始され、元の要求よりも高速に返った回数)。
ここでの値は単一のHDFS Clientの累積値であり、単一クエリの値ではないことに注意してください。同じHDFS Clientは複数のクエリで再利用されます。
dfs.client.socket-timeout
dfs.client.socket-timeoutはHadoop HDFSのクライアント設定パラメータで、クライアントがDataNodeまたはNameNodeとの接続を確立する際やデータを読み取る際のソケットタイムアウトをミリ秒単位で設定するために使用されます。このパラメータのデフォルト値は通常60,000ミリ秒です。
このパラメータ値を下げることで、ネットワーク遅延、DataNodeの応答の遅さ、または接続例外に遭遇した際に、クライアントがより迅速にタイムアウトし、再試行や他のノードへの切り替えを行うことができます。これにより待機時間を短縮し、システムの応答速度を向上させることができます。例えば、いくつかのテストでは、dfs.client.socket-timeoutをより小さな値(5000ミリ秒など)に設定することで、DataNodeの遅延や故障を迅速に検出し、長時間の待機を回避できます。
注意:
-
タイムアウトを小さく設定しすぎると、ネットワークの変動やノードの高負荷時に頻繁なタイムアウトエラーが発生し、タスクの安定性に影響を与える可能性があります。
-
実際のネットワーク環境とシステム負荷条件に基づいて、応答速度とシステム安定性のバランスを取るため、このパラメータ値を適切に調整することを推奨します。
-
このパラメータは、クライアントがHDFSとの通信時に正しいタイムアウトを使用するよう、クライアント設定ファイル(
hdfs-site.xmlなど)に設定する必要があります。
要約すると、dfs.client.socket-timeoutパラメータを適切に設定することで、システムの安定性と信頼性を確保しながらI/O応答速度を向上させることができます。
HDFSアクセスポート要件(NameNodeとDataNodeのみ)
DorisがHDFSにアクセスするには、以下のポートが開いている必要があります:
| サービス | ポート用途 | デフォルトポート | プロトコル |
|---|---|---|---|
| NameNode | RPC(クライアント/メタデータアクセス) | 8020 | TCP |
| DataNode | データ転送(ブロックI/O) | 9866 | TCP |
注意:
- ポートは
core-site.xmlとhdfs-site.xmlでカスタマイズされる場合があります。実際の設定を使用してください。 - Kerberos認証が有効な場合、DorisはKerberos KDCサービスにも到達できる必要があります。KDCはデフォルトでTCPポート88をリッスンしますが、実際のポートはKDC設定に従う必要があります。
HDFSのデバッグ
Hadoop環境設定は複雑で、場合によっては接続問題やアクセスパフォーマンスの低下が発生することがあります。ユーザーが接続問題と基本的なパフォーマンス問題を迅速にトラブルシューティングするのに役立つサードパーティツールをいくつか紹介します。
HDFS Client
この2つのツールは、HDFS接続と読み取りパフォーマンスを迅速に検証するために使用できます。これらのHadoop依存関係の大部分はDoris自体のHadoop依存関係と同じであるため、DorisのHDFSアクセスシナリオを最大限にシミュレートできます。
Javaバージョンは、JavaでHDFSにアクセスし、Doris FE側のHDFSアクセスロジックをシミュレートできます。
CPPバージョンは、C++でlibhdfsを呼び出してHDFSにアクセスし、Doris BE側のHDFSアクセスロジックをシミュレートできます。
具体的な使用方法については、各コードリポジトリのREADMEを参照してください。