HDFS
このエンジンは、ClickHouse経由でHDFS上のデータを管理することにより、Apache Hadoopエコシステムとの統合を提供します。このエンジンは、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_column
はDate型の日付を含むカラムです。ここでのパーティション名は"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までの範囲の任意の数を置き換えます(両端を含む)。
{}
を使用した構造は、リモートテーブル関数に似ています。
例
-
HDFS上に以下のURIを持つTSV形式のいくつかのファイルがあるとします:
- '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'
-
すべての6つのファイルを含むテーブルを作成する方法はいくつかあります:
別の方法:
テーブルは両方のディレクトリ内のすべてのファイルで構成されます(すべてのファイルは、クエリで説明されている形式およびスキーマに一致する必要があります):
ファイルのリストに先頭ゼロを伴う数値範囲が含まれている場合、それぞれの桁に対して波括弧を使うか、?
を使用してください。
例
file000
, file001
, ... , file999
という名前のファイルを持つテーブルを作成します:
設定
GraphiteMergeTreeに似て、HDFSエンジンはClickHouse設定ファイルを使った拡張設定をサポートしています。使用できる設定キーは2つあります:グローバル(hdfs
)とユーザーレベル(hdfs_*
)。グローバル設定が最初に適用され、その後ユーザーレベルの設定が存在する場合に適用されます。
設定オプション
libhdfs3によってサポートされている
パラメータ | デフォルト値 |
---|---|
rpc_client_connect_tcpnodelay | true |
dfs_client_read_shortcircuit | true |
output_replace-datanode-on-failure | true |
input_notretry-another-node | false |
input_localread_mappedfile | true |
dfs_client_use_legacy_blockreader_local | false |
rpc_client_ping_interval | 10 * 1000 |
rpc_client_connect_timeout | 600 * 1000 |
rpc_client_read_timeout | 3600 * 1000 |
rpc_client_write_timeout | 3600 * 1000 |
rpc_client_socket_linger_timeout | -1 |
rpc_client_connect_retry | 10 |
rpc_client_timeout | 3600 * 1000 |
dfs_default_replica | 3 |
input_connect_timeout | 600 * 1000 |
input_read_timeout | 3600 * 1000 |
input_write_timeout | 3600 * 1000 |
input_localread_default_buffersize | 1 * 1024 * 1024 |
dfs_prefetchsize | 10 |
input_read_getblockinfo_retry | 3 |
input_localread_blockinfo_cachesize | 1000 |
input_read_max_retry | 60 |
output_default_chunksize | 512 |
output_default_packetsize | 64 * 1024 |
output_default_write_retry | 10 |
output_connect_timeout | 600 * 1000 |
output_read_timeout | 3600 * 1000 |
output_write_timeout | 3600 * 1000 |
output_close_timeout | 3600 * 1000 |
output_packetpool_size | 1024 |
output_heartbeat_interval | 10 * 1000 |
dfs_client_failover_max_attempts | 15 |
dfs_client_read_shortcircuit_streams_cache_size | 256 |
dfs_client_socketcache_expiryMsec | 3000 |
dfs_client_socketcache_capacity | 16 |
dfs_default_blocksize | 64 * 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 Configuration Referenceは、一部のパラメータについて説明しています。
ClickHouseの追加機能
パラメータ | デフォルト値 |
---|---|
hadoop_kerberos_keytab | "" |
hadoop_kerberos_principal | "" |
libhdfs3_conf | "" |
制限事項
hadoop_security_kerberos_ticket_cache_path
およびlibhdfs3_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_keytab
、hadoop_kerberos_principal
またはhadoop_security_kerberos_ticket_cache_path
が指定されている場合、Kerberos認証が使用されます。この場合、hadoop_kerberos_keytab
とhadoop_kerberos_principal
は必須です。
HDFS Namenode HAサポート
libhdfs3はHDFS namenode HAをサポートしています。
- HDFSノードから
hdfs-site.xml
を/etc/clickhouse-server/
へコピーします。 - ClickHouse設定ファイルに以下の部分を追加します:
- その後、
hdfs-site.xml
のdfs.nameservices
タグの値をHDFS URIのnamenodeアドレスとして使用します。たとえば、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 - 読み取り時に空のファイルをスキップすることを許可します。デフォルトでは無効です。
関連項目