
Alexey
14.08.2018
08:36:43
Хотелось бы чтобы кто-нибудь выложил на ютуб видео по разворачиванию clickhouse кластера в самом простом варианте.
Не получится у большинства просто взять и разобраться.
Вот что например означает эта ошибка ?

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

Google

Alexey
14.08.2018
08:43:54

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} в макросе указали имя сервера ?

Kirill
14.08.2018
08:47:45

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

Alexey
14.08.2018
08:52:30

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


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

Alexey
14.08.2018
09:10:41

Павел Максимов
14.08.2018
09:20:59

Nick
14.08.2018
09:26:20

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

Kirill
14.08.2018
10:29:58

Alexey
14.08.2018
10:30:41

Kirill
14.08.2018
10:32:35

Alexey
14.08.2018
10:33:14

Kirill
14.08.2018
10:34:58

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

Pavel
14.08.2018
10:36:12

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:26:56

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> работает нормально.

Evgeny
14.08.2018
12:11:34
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 - имя пользователя

Dmitry
14.08.2018
12:15:29

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

Evgeny
14.08.2018
12:16:25

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

Google

Konstantin
14.08.2018
13:46:05

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


Alex
14.08.2018
14:21:34
Т.е. 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. не подскажите ничего?

Alex
14.08.2018
14:29:23

Roman
14.08.2018
14:30:42
18.6.0 revision 54401.

Alex
14.08.2018
14:36:26

Alex
14.08.2018
14:41:22
У вас обычное MergeTree?

Roman
14.08.2018
14:41:59
CollapsingMergeTree

Alex
14.08.2018
14:43:06

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
14:48:14
(я так понял в таблице одна партиция)

Alex
14.08.2018
14:51:19

Alex
14.08.2018
14:57:56

Alex
14.08.2018
15:00:44

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


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.)