الاستخدام
URI- معرّف URI الكامل للملف في HDFS. قد يحتوي جزءpathمنURIعلى أنماط glob. في هذه الحالة سيكون الجدول للقراءة فقط.format- يحدّد أحد تنسيقات الملفات المتاحة. لتنفيذ استعلاماتSELECT، يجب أن يكون التنسيق مدعومًا للإدخال، ولتنفيذ استعلاماتINSERT— يجب أن يكون مدعومًا للإخراج. التنسيقات المتاحة مُدرجة في قسم التنسيقات.- [PARTITION BY expr]
PARTITION BY
PARTITION BY — اختياري. في معظم الحالات، لن تحتاج إلى مفتاح تقسيم، وحتى إذا احتجت إليه، فلن تحتاج عادةً إلى مفتاح تقسيم أكثر تفصيلاً من التقسيم الشهري. لا يؤدي التقسيم إلى تسريع الاستعلامات (على عكس تعبير ORDER BY). ويجب ألا تستخدم تقسيمًا مفرط التفصيل إطلاقًا. لا تقسّم بياناتك حسب معرّفات العملاء أو أسمائهم (واجعل بدلًا من ذلك معرّف العميل أو اسمه هو العمود الأول في تعبير ORDER BY).
للتقسيم حسب الشهر، استخدم التعبير toYYYYMM(date_column)، حيث إن date_column عمود يحتوي على تاريخ من النوع Date. تكون أسماء الأقسام هنا بالتنسيق "YYYYMM".
مثال:
1. أعدّ الجدول hdfs_engine_table:
تفاصيل التنفيذ
- يمكن تنفيذ عمليتَي القراءة والكتابة بالتوازي.
- غير مدعوم:
- عمليتا
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.
مثال
-
لنفترض أن لدينا عدة ملفات بتنسيق TSV مع معرّفات URI التالية على HDFS:
- ‘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’
- توجد عدة طرق لإنشاء جدول يتكوّن من الملفات الستة جميعًا:
إذا كانت قائمة الملفات تتضمن نطاقات رقمية تبدأ بأصفار، فاستخدم الصيغة التي تعتمد على الأقواس المعقوفة لكل رقم على حدة، أو استخدم
?.file000 وfile001 و… وfile999:
الإعداد
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 | "" |
إضافات 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، لا يُدعَم سوى الأسلوب القديم،
كما أن اتصالات datanode غير مؤمّنة بواسطة 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
- انسخ
hdfs-site.xmlمن إحدى عقد HDFS إلى/etc/clickhouse-server/. - أضف المقطع التالي إلى ملف إعداد ClickHouse:
- ثم استخدم قيمة الوسم
dfs.nameservicesفي ملفhdfs-site.xmlكعنوانnamenodeفي URI الخاص بـ HDFS. على سبيل المثال، استبدلhdfs://appadmin@192.168.101.11: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 - يسمح بتجاوز الملفات الفارغة أثناء القراءة. يكون معطّلًا افتراضيًا.