メインコンテンツまでスキップ
メインコンテンツまでスキップ

HDFS

Not supported in ClickHouse Cloud

このエンジンは、Apache Hadoop エコシステムとの統合を提供し、ClickHouse を介して HDFS 上のデータを管理することを可能にします。このエンジンは、File エンジンおよび URL エンジンに似ていますが、Hadoop 特有の機能を提供します。

この機能は ClickHouse エンジニアによってサポートされていないため、品質が不安定であることが知られています。問題が発生した場合は、自分で修正し、プルリクエストを提出してください。

使用法

エンジンパラメータ

  • URI - HDFS の全ファイル URI。URI のパス部分にはグロブを含めることができます。この場合、テーブルは読み取り専用になります。
  • format - 利用可能なファイル形式のいずれかを指定します。SELECT クエリを実行するには、形式が入力用にサポートされている必要があり、INSERT クエリを実行するには出力用にサポートされている必要があります。利用可能な形式は、Formats セクションにリストされています。
  • [PARTITION BY expr]

PARTITION BY

PARTITION BY — オプションです。ほとんどのケースではパーティションキーは必要ありませんが、必要な場合は一般的に月単位のそれよりも細かいパーティションキーは必要ありません。パーティショニングはクエリの速度を向上させません(ORDER BY 式と対照的です)。あまりにも細かいパーティショニングは使用しないでください。クライアント識別子や名前でデータをパーティショニングしないでください(代わりに、クライアント識別子または名前を ORDER BY 式の最初のカラムにしてください)。

月単位でのパーティショニングには、toYYYYMM(date_column) 式を使用します。ここで、date_columnDate 型の日付を持つカラムです。ここでのパーティション名は "YYYYMM" 形式です。

例:

1. hdfs_engine_table テーブルを設定します:

2. ファイルを埋めます:

3. データをクエリします:

実装の詳細

  • 読み込みと書き込みは並列で行えます。

  • サポートされていないもの:

    • ALTER および SELECT...SAMPLE 操作。
    • インデックス。
    • ゼロコピー 複製は可能ですが、推奨されません。
    ゼロコピー複製は生産準備が整っていません

    ゼロコピー複製は ClickHouse バージョン 22.8 以降でデフォルトで無効です。この機能は本番環境での使用は推奨されません。

パス内のグロブ

複数のパスコンポーネントにグロブを使用できます。処理されるファイルは、存在し、全パターンと一致する必要があります。ファイルのリストは SELECT 中に決定されます(CREATE 時ではありません)。

  • */ を除く任意の数の任意の文字(空文字列を含む)の代わりに使用できます。
  • ? — 任意の一文字の代わりに使用できます。
  • {some_string,another_string,yet_another_one} — 文字列 'some_string', 'another_string', 'yet_another_one' のいずれかの代わりに使用できます。
  • {N..M} — N から M までの範囲内の任意の数の代わりに使用できます(両端を含む)。

{} を使用した構文は、remote テーブル関数に似ています。

  1. HDFS 上に次の URIs を持つ TSF 形式のファイルがいくつかあるとします:

    • 'hdfs://hdfs1:9000/some_dir/some_file_1'
    • 'hdfs://hdfs1:9000/some_dir/some_file_2'
    • 'hdfs://hdfs1:9000/some_dir/some_file_3'
    • 'hdfs://hdfs1:9000/another_dir/some_file_1'
    • 'hdfs://hdfs1:9000/another_dir/some_file_2'
    • 'hdfs://hdfs1:9000/another_dir/some_file_3'
  2. これらの6つのファイルで構成されるテーブルを作成する方法はいくつかあります:

もう一つの方法:

テーブルは両方のディレクトリ内の全ファイルで構成されます(すべてのファイルは、クエリで記述された形式とスキーマに適合している必要があります):

注記

ファイルのリストに先頭ゼロのある数値範囲が含まれる場合は、各桁ごとに中括弧を使用する構文を使用するか、? を使用してください。

file000, file001, ... , file999 というファイルを持つテーブルを作成します:

設定

GraphiteMergeTree と同様に、HDFS エンジンは ClickHouse 設定ファイルを使用して拡張設定をサポートしています。使用できる2つの設定キーがあります:グローバル(hdfs)およびユーザーレベル(hdfs_*)。グローバル設定が最初に適用され、次にユーザーレベルの設定が適用されます(存在する場合)。

設定オプション

libhdfs3 でサポートされている

parameterdefault value
rpc_client_connect_tcpnodelaytrue
dfs_client_read_shortcircuittrue
output_replace-datanode-on-failuretrue
input_notretry-another-nodefalse
input_localread_mappedfiletrue
dfs_client_use_legacy_blockreader_localfalse
rpc_client_ping_interval10 * 1000
rpc_client_connect_timeout600 * 1000
rpc_client_read_timeout3600 * 1000
rpc_client_write_timeout3600 * 1000
rpc_client_socket_linger_timeout-1
rpc_client_connect_retry10
rpc_client_timeout3600 * 1000
dfs_default_replica3
input_connect_timeout600 * 1000
input_read_timeout3600 * 1000
input_write_timeout3600 * 1000
input_localread_default_buffersize1 * 1024 * 1024
dfs_prefetchsize10
input_read_getblockinfo_retry3
input_localread_blockinfo_cachesize1000
input_read_max_retry60
output_default_chunksize512
output_default_packetsize64 * 1024
output_default_write_retry10
output_connect_timeout600 * 1000
output_read_timeout3600 * 1000
output_write_timeout3600 * 1000
output_close_timeout3600 * 1000
output_packetpool_size1024
output_heartbeat_interval10 * 1000
dfs_client_failover_max_attempts15
dfs_client_read_shortcircuit_streams_cache_size256
dfs_client_socketcache_expiryMsec3000
dfs_client_socketcache_capacity16
dfs_default_blocksize64 * 1024 * 1024
dfs_default_uri"hdfs://localhost:9000"
hadoop_security_authentication"simple"
hadoop_security_kerberos_ticket_cache_path""
dfs_client_log_severity"INFO"
dfs_domain_socket_path""

HDFS 設定リファレンス では、いくつかのパラメータについて説明されているかもしれません。

ClickHouse の特別オプション

parameterdefault value
hadoop_kerberos_keytab""
hadoop_kerberos_principal""
libhdfs3_conf""

制限

  • hadoop_security_kerberos_ticket_cache_pathlibhdfs3_conf は、ユーザー特有ではなくグローバルのみで設定できます。

Kerberos サポート

hadoop_security_authentication パラメータが kerberos の値を持つ場合、ClickHouse は Kerberos を介して認証を行います。 パラメータは ここ にあり、hadoop_security_kerberos_ticket_cache_path は役立つ場合があります。 libhdfs3 の制限により、古典的なアプローチのみがサポートされており、データノード間の通信は SASL で保護されていません(HADOOP_SECURE_DN_USER はそのようなセキュリティアプローチの信頼できる指標です)。参照用に tests/integration/test_storage_kerberized_hdfs/hdfs_configs/bootstrap.sh を使用してください。

hadoop_kerberos_keytabhadoop_kerberos_principal または hadoop_security_kerberos_ticket_cache_path が指定されている場合、Kerberos 認証が使用されます。この場合、hadoop_kerberos_keytabhadoop_kerberos_principal は必須です。

HDFS Namenode HA サポート

libhdfs3 は HDFS namenode HA をサポートしています。

  • HDFS ノードから hdfs-site.xml/etc/clickhouse-server/ にコピーします。
  • ClickHouse 設定ファイルに次の部分を追加します:
  • 次に、HDFS URI 内の namenode アドレスとして hdfs-site.xmldfs.nameservices タグの値を使用します。例えば、hdfs://[email protected]:8020/abc/hdfs://appadmin@my_nameservice/abc/ に置き換えます。

仮想カラム

  • _path — ファイルへのパス。型: LowCardinality(String)
  • _file — ファイル名。型: LowCardinality(String)
  • _size — ファイルのサイズ(バイト単位)。型: Nullable(UInt64)。サイズが不明な場合、値は NULL になります。
  • _time — ファイルの最終更新時刻。型: Nullable(DateTime)。時刻が不明な場合、値は NULL になります。

ストレージ設定

  • hdfs_truncate_on_insert - 挿入前にファイルを切り詰めることを可能にします。デフォルトでは無効です。
  • hdfs_create_new_file_on_insert - 各挿入時に新しいファイルを作成することを可能にします。形式にサフィックスがある場合に適用されます。デフォルトでは無効です。
  • hdfs_skip_empty_files - 読み込み時に空のファイルをスキップすることを可能にします。デフォルトでは無効です。

関連項目