@clickhouse_ru

Страница 621 из 723
Alexey
14.08.2018
08:36:43
Хотелось бы чтобы кто-нибудь выложил на ютуб видео по разворачиванию clickhouse кластера в самом простом варианте.

Не получится у большинства просто взять и разобраться.

Вот что например означает эта ошибка ?

Nick
14.08.2018
08:39:56
Всем привет. Пробую настроить репликацию. Сделал два шарда по две реплики на каждом. Создание таблицы на одной ноде раскидывают таблицу на все ноды кластера. Это ок. А вот если делать alter table , то изменения появляются только в границах одного шарда. Подскажите это это норм или что-то недонастроил?

Google
Nick
14.08.2018
08:45:26
CREATE TABLE IF NOT EXISTS test_db.events_shard ON CLUSTER test_cluster ( event_date Date DEFAULT toDate(now()), company_id UInt32, product_id UInt32 ) ENGINE=ReplicatedMergeTree( '/clickhouse/tables/{shard}/events_shard', '{replica}', event_date, (company_id), 8192 );

Alexey
14.08.2018
08:46:16
Спасибо, а в {replica} в макросе указали имя сервера ?

Alexey
14.08.2018
08:50:22
@kshvakov Скажите пожалуйста <macros> <shard>01</shard> <replica>example05-02-1.yandex.ru</replica> </macros> в поле реплика, должен быть указан ip адрес сервера ?

или hostname ?

или не имеет значения что указанно в этом поле, главное чтобы оно отличалось от того же поля на другом сервере ?

Kirill
14.08.2018
08:52:08
@kshvakov Скажите пожалуйста <macros> <shard>01</shard> <replica>example05-02-1.yandex.ru</replica> </macros> в поле реплика, должен быть указан ip адрес сервера ?
Всеравно что - это просто идентификатор таблицы внутри шарда, чтоб понимать какие куски где есть

Kirill
14.08.2018
08:53:49
В рамках шарда он должен быть уникален для таблиц, если таблицы находятся на разных серверах то, обычно, пишут hostname чтоб понятнее было

Alexey
14.08.2018
08:54:40
А так называемая шарда должна быть указана обязательно ? Нельзя на первом сервере указать просто: <macros> <replica>my_server_1</replica> </macros> А на втором сервере: <macros> <replica>my_server_2</replica> </macros>

Kirill
14.08.2018
08:58:19
А так называемая шарда должна быть указана обязательно ? Нельзя на первом сервере указать просто: <macros> <replica>my_server_1</replica> </macros> А на втором сервере: <macros> <replica>my_server_2</replica> </macros>
Это просто макросы для подстановки, в Engine первый параметр нужен для "регистрации" реплики (таблицы которую нужно реплицировать, туда можно вписать что угодно и как угодно, с макроcами просто удобнее), второй параметр это идентификтор копии таблици для репликации, каждая копия получает задание не репликацию и тащит куски, если они будут одинаковые на разных серверах то у вас будет непонятно что;)

Alexey
14.08.2018
09:02:13
Это просто макросы для подстановки, в Engine первый параметр нужен для "регистрации" реплики (таблицы которую нужно реплицировать, туда можно вписать что угодно и как угодно, с макроcами просто удобнее), второй параметр это идентификтор копии таблици для репликации, каждая копия получает задание не репликацию и тащит куски, если они будут одинаковые на разных серверах то у вас будет непонятно что;)
Вот я на первом сервере выполнил: create table test_table_1 (MyDate Date, MyDateTime_1 DateTime, MyDateTime_2 DateTime) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_table_1', '{replica}', MyDate, MyDateTime_1, 8192) где shard=01, replica=server1 А на втором сервере выполнил: create table test_table_1 (MyDate Date, MyDateTime_1 DateTime, MyDateTime_2 DateTime) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_table_1', '{replica}', MyDate, MyDateTime_1, 8192) где shard=01, replica=server2 ================================ Все правильно сделал ? просто когда инсертнул в таблицу инфу, то вместо синхронизации я вижу только ошибки

Google
Alexey
14.08.2018
09:03:05
<Error> InterserverIOHTTPHandler: Code: 221, e.displayText() = DB::Exception: No interserver IO endpoint named DataPartsExchange:/clickhouse/tables/01/test_table_1/replicas/server_2, e.what() = DB::Exception, Stack trace:

а потом следующая ошибка: 2018.08.14 10:25:25.266948 [ 13 ] <Error> default.test_table_1 (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 33, e.displayText() = DB::Exception: Cannot read all data. Bytes read: 0. Bytes expected: 8., e.what() = DB::Exception, Stack trace:

и так по кругу идут, друг за дружкой

Tima
14.08.2018
09:06:25
и так по кругу идут, друг за дружкой
Вот и у меня так же было. Поэтому мы у себя пока не используем удаление

Alexey
14.08.2018
09:07:13
Вот и у меня так же было. Поэтому мы у себя пока не используем удаление
Так я ничего не удалял. Просто создал на обоих серверах одну и ту же таблицу, и вставил в нее данные.

insert into default.test_table_1 (MyDate, MyDateTime_1, MyDateTime_2) VALUES ('1990.01.01', '1990.01.01 12:00:00', '1990.01.01 12:00:00')

Kirill
14.08.2018
09:10:11
<Error> InterserverIOHTTPHandler: Code: 221, e.displayText() = DB::Exception: No interserver IO endpoint named DataPartsExchange:/clickhouse/tables/01/test_table_1/replicas/server_2, e.what() = DB::Exception, Stack trace:
У вас там еще в ZK что-то лежит после "экспериментов" с созданием реплики. Если просто играетесь то удалите все таблици из КХ и удалите /clickhouse/ в ZK, потом снова стартаните сервер и создайте таблицы.

Nick
14.08.2018
09:26:20
Спасибо, а в {replica} в макросе указали имя сервера ?
<macros> <shard>01</shard> <replica>clickhouse_shard1_replica1</replica> </macros>

Alexey
14.08.2018
09:27:31
Вдруг кому то пригодится... Для удаления конфигурации ClickHous'a из Apache Zookeper: 1) остановите все сервера clickhouse 2) войдите в клиент Apache Zookeeper /opt/zookeeper/bin/zkCli.sh 3) выполните рекурсивное удаление дерева rmr /clickhouse 4) Готово quit #zookeeper #удалить из zookeeper #удалить /clickhouse/ в ZK

У вас там еще в ZK что-то лежит после "экспериментов" с созданием реплики. Если просто играетесь то удалите все таблици из КХ и удалите /clickhouse/ в ZK, потом снова стартаните сервер и создайте таблицы.
Дропнул таблицу в кликхаус, выключил сервера CH, дропнул дерево в ZK, включил сервера CH. Затем создал таблицу на обоих серверах. Никаких ошибок не появилось. Потом сделал инсерт в созданную таблицу на первом сервере, после чего на втором сервере посыпались бесконечные такие ошибки:

Alexey
14.08.2018
10:30:41
А машины видят друг-друга по хостнейму ?
Да, телнет, в обе стороны проходит по портам 9000, 8123 и 9009

Kirill
14.08.2018
10:32:35
Да, телнет, в обе стороны проходит по портам 9000, 8123 и 9009
так, вот это странно No interserver IO endpoint named, я на такое еще не натыкался, надо посмотреть почему так может быть, но @milovidov_an может знать наверняка :)

Kirill
14.08.2018
10:34:58
Почему он ? Он разработчик?
Да, он может дать ответы на большинство вопросов, главное не злоупотреблять;)

Alexey
14.08.2018
10:35:21
Спасибо за совет, попробую с ним связаться.

Google
Pavel
14.08.2018
10:36:38
и достаточно часто отвечает на вопросы

Alexey
14.08.2018
10:37:14
и достаточно часто отвечает на вопросы
Значит задам ему вопрос тут)

Только покопаюсь немного, может сам смогу понять в чем дело.

Nick
14.08.2018
10:43:08
ага, а если alter сделать так alter table test_db.events_shard on cluster test_cluster add column name3 String; то выдает An error occured before execution: Code: 371, e.displayText() = DB::Exception: Table events_shard is replicated, but shard #1 isn't replicated according to its cluster definition. Possibly <internal_replication>true</internal_replication> is forgotten in the cluster config., e.what() = DB::Exception

Roman
14.08.2018
11:00:39
Всем привет, подскажите по ALTER DELETE есть таблица, в которой event_date Date MATERIALIZED toDate(timestamp) ENGINE = CollapsingMergeTree(event_date, (affiliate_id, event_date, event_id), 8192, sign) пытался сделать DELETE WHERE (player_id = 54182449) AND ((event_date >= '2018-08-06') AND (event_date <= '2018-08-07')) получаю в лог кучу ошибок <Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 10, e.displayText() = DB::Exception: Not found column event_date in block. баг? и можно ли как то отменить эту мутацию, чтобы не летела куча ошибок в лог?

Ivan
14.08.2018
11:26:10
подскажите пожалуйста, как посмотреть Primary Key таблицы

Ivan
14.08.2018
11:27:23
спасибо

Николай
14.08.2018
12:10:47
Пытаюсь сделать доступным кликхаус только для одного ip-адреса. В config.xml добавляю <listen_host>some_ip</listen_host> Получаю ошибку <Error> Application: Net Exception: Cannot assign requested address: some_ip:8124 Подскажите, пожалуйста, что не так. <listen_host>::</listen_host> работает нормально.

Николай
14.08.2018
12:13:06
А как быть тогда? У меня приложение на другом сервере, которое должно коннектиться к кликхаусу, соответсвенно, я хочу разрешить только коннект с этого сервера и всё.

Evgeny
14.08.2018
12:14:57
users.xml секция <users>-><username> в ней определяем секцию <networks><ip>1.2.3.4/32</ip></networks>

username - имя пользователя

Николай
14.08.2018
12:15:45
Спасибо

Konstantin
14.08.2018
13:29:56
подскажите, создал дистриб таблицу, при SELECT ругается что DB::Exception: Password required for user default. пароль для default задан на всех нодах и везде одинаковый

и еще 1 вопрос - зависают запросы вида SELECT ... FROM mysql(), после выполнения запрос висит в processlist

Artem
14.08.2018
13:45:07
подскажите, создал дистриб таблицу, при SELECT ругается что DB::Exception: Password required for user default. пароль для default задан на всех нодах и везде одинаковый
можно задать пользователя и пароль в секции <remote_servers> в конфиге https://clickhouse.yandex/docs/en/operations/table_engines/distributed/

Google
Egor
14.08.2018
13:50:43
а по какой причине positionCaseInsensitive(haystack, 'needle') ничего не находит, хотя Like '%needle%' находит довольно таки много строк? Разве результат выполнения like в данном случае не должен быть подмножеством результата positionCaseInsensitive()?



Alex
14.08.2018
14:11:54
Вопрос на тему мутаций. Запустил для датасета размером ~100 Gb мутацию. Селект из таблицы system.mutations не очень репрезентативный. Куда ещё поглазеть можно? В Zoo куда-нибудь, например, или ещё что SELECT *, (now() - create_time) / 60 AS minutes_running FROM system.mutations Row 1: ────── database: user_split table: .inner.user_settings mutation_id: 0000000000 command: DELETE WHERE settings_id = 0 create_time: 2018-08-14 13:33:59 block_numbers.partition_id: ['200101'] block_numbers.number: [3528023] parts_to_do: 2 is_done: 0 minutes_running: 37.63333333333333

Alex
14.08.2018
14:19:36
Вопрос на тему мутаций. Запустил для датасета размером ~100 Gb мутацию. Селект из таблицы system.mutations не очень репрезентативный. Куда ещё поглазеть можно? В Zoo куда-нибудь, например, или ещё что SELECT *, (now() - create_time) / 60 AS minutes_running FROM system.mutations Row 1: ────── database: user_split table: .inner.user_settings mutation_id: 0000000000 command: DELETE WHERE settings_id = 0 create_time: 2018-08-14 13:33:59 block_numbers.partition_id: ['200101'] block_numbers.number: [3528023] parts_to_do: 2 is_done: 0 minutes_running: 37.63333333333333
Больше особо некуда. Для реплицируемых таблиц есть столбец part_mutations_in_queue в system.replicas (плюс можно смотреть за задачами типа MUTATE_PART в system.replication_queue) - задания на мутацию кусков в очереди. И ещё есть системная метрика PartMutation - количество выполняемых в данный момент мутаций кусков.

Alex
14.08.2018
14:21:34
Больше особо некуда. Для реплицируемых таблиц есть столбец part_mutations_in_queue в system.replicas (плюс можно смотреть за задачами типа MUTATE_PART в system.replication_queue) - задания на мутацию кусков в очереди. И ещё есть системная метрика PartMutation - количество выполняемых в данный момент мутаций кусков.
Спасибо за ответ, но этой инфы не хватает для дебага ( SELECT database, table, engine, is_leader, merges_in_queue, part_mutations_in_queue FROM replicas WHERE table = '.inner.user_settings' Row 1: ────── database: user_split table: .inner.user_settings engine: ReplicatedAggregatingMergeTree is_leader: 1 merges_in_queue: 0 part_mutations_in_queue: 0

Т.е. part_mutations_in_queue пустой для этой таблицы

Очередь реплики для всей схемы этой таблицы: SELECT * FROM system.replication_queue WHERE database = 'user_split' Ok. 0 rows in set. Elapsed: 0.096 sec. И метрика нулевая: SELECT * FROM metrics WHERE metric = 'PartMutation' ┌─metric───────┬─value─┐ │ PartMutation │ 0 │ └──────────────┴───────┘ 1 rows in set. Elapsed: 0.108 sec.

Roman
14.08.2018
14:26:38
@ztlpn а по моему вопросу с Not found column event_date in block. не подскажите ничего?

Roman
14.08.2018
14:30:42
18.6.0 revision 54401.

Alex
14.08.2018
14:36:26
Можно ещё попробовать посмотреть, какие именно куски ещё осталось помутировать запросом вида select name from system.parts where active and table = '.inner.user_settings' and data_version < 3528023
Что-то дало! SELECT sum(rows), if(data_version < 3528023, 'old', 'new') AS version FROM system.parts WHERE active AND (table = '.inner.user_settings') GROUP BY version ┌──sum(rows)─┬─version─┐ │ 4574899817 │ new │ │ 6522625858 │ old │ └────────────┴─────────┘ Чтобы не значила магическая версия 3528023, уже какой-то результат. Если new - это результат работы мутации (а не новые данные, которые льются в таблицу), то значит за час у меня намутировало партиций на 4B строк, и надо подождать ещё пару часов. Доложусь по прошествии времени!

Alex
14.08.2018
14:41:22
18.6.0 revision 54401.
Да, это баг - в помутированных кусках не сохраняются materialized столбцы.

У вас обычное MergeTree?

Roman
14.08.2018
14:41:59
CollapsingMergeTree

Alex
14.08.2018
14:43:06
Да, это баг - в помутированных кусках не сохраняются materialized столбцы.
Видимо этот баг и на мой случай распространяется, т.к. я пытаюсь мутировать вьюху

Alex
14.08.2018
14:45:11
CollapsingMergeTree
Тогда удалите из data-директории таблицы файл с мутацией ( /var/lib/clickhouse/data/<database>/<table>/mutation_<что-то>.txt ) и сделайте DETACH/ATTACH таблице

Видимо этот баг и на мой случай распространяется, т.к. я пытаюсь мутировать вьюху
Вряд ли, т.к. тогда задачи всё-таки бы создавались в очереди

Roman
14.08.2018
14:46:06
ок, попробую, спасибо

Google
Alex
14.08.2018
15:00:44
New это как раз могут быть как свежие данные, которые льются в таблицу, так и успешно помутированные данные. А сколько вообще в таблице активных кусков с data_version < 3528023 и c data_version != min_block_number?
SELECT count(), if(data_version != min_block_number, 1, 0) AS version_equality FROM system.parts WHERE (table = '.inner.user_settings') AND active AND (data_version < 3528023) GROUP BY version_equality ┌─count()─┬─version_equality─┐ │ 2 │ 0 │ └─────────┴──────────────────┘

Alex
14.08.2018
15:04:15
Значит вообще почему-то не назначаются мутации индивидуальных кусков. Надо искать причину в логах по ключевому слову mergeSelectingTask

Alex
14.08.2018
15:05:33
На сервере-инициаторе, или по всем репликам?

Alex
14.08.2018
15:06:21
на лидере

Alexey
14.08.2018
15:21:37
так, вот это странно No interserver IO endpoint named, я на такое еще не натыкался, надо посмотреть почему так может быть, но @milovidov_an может знать наверняка :)
Короче как только заменил все ip адреса в config.xml на имена, прописал соответствие имен ip адресам в /etc/hosts на обоих нодах, перезапустил сервера, и создал новые реплицируемые таблицы - все завелось. правда пока не понял, в каком месте замена ip адреса на имя помогла... буду методом тыка сейчас проверять, чтобы отловить момент.

Yuran
14.08.2018
15:27:25
Но почти час для мутации датасета в 100 Гб это как-то долго кажется, хотя, может, я придираюсь :).

У меня вот вообще получается заставить кликхаус крепко призадуматься довольно простыми, на первый взгляд, запросами: -- CREATE TABLE stats ( date Date, metric_id Int32, uniq_state AggregateFunction(uniq, Int64)); SELECT toStartOfDay(timestamp) AS dt, uniqMerge(uniq_state) FROM stats WHERE (metric_id = 1234) AND date >= '2018-07-13' AND date <= '2018-08-13' GROUP BY dt; Показывает такие цифры: 30 rows in set. Elapsed: 0.927 sec. Processed 425.98 thousand rows, 61.98 MB (459.43 thousand rows/s., 66.85 MB/s.)

Страница 621 из 723