
Alex
14.08.2018
15:33:27
так тут как раз в перфе будет хорошо видно HLL* функции

Yuran
14.08.2018
15:34:36
Возможно, при хранении агрегатных функций стоит поставить размер блока поменьше, чтобы мерж состояний мог в большее число потоков идти, но это моё предположение.


Alexey
14.08.2018
15:58:54
Короче если кто то еще нактнется на проблему что репликация не работает, и видит ошибки типа:
DB::Exception: No interserver IO endpoint named DataPartsExchange
DB::StorageReplicatedMergeTree::queueTask() DB::Exception: Cannot read all data.
Решение простое:
Выключайте сервера ClickHouse.
в /etc/clickhouse-server/config.xml на серверах пропишете следующую строку:
<interserver_http_host>this_server_hostname</interserver_http_host>
где вместо this_server_hostname напишите реальное имя хоста.
Например если у вас есть два сервера которые называются server_1 и server_2
То соостветственно на первом сервере в конфиге пишите:
<interserver_http_host>server_1</interserver_http_host>
На втором сервере в конфиге пропишите:
<interserver_http_host>server_2</interserver_http_host>
на обоих серверах в /etc/hosts добавьте строки типа:
192.168.1.10 server_1
192.168.1.11 server_2
чтобы реальные hostname соотвествовали реальным ip адресам.
Включите сервера ClickHouse.
Теперь проверим что все работает.
Создаем на обоих серверах ReplicatedMergeTree таблицу и на одном из серверов производим наполнение в нашу таблицу. После чего проверяем что на втором сервере в таблице появилась информация тоже.
На всякий случай напишу, что если у вас все равно останутся такие же ошибки, попробуйте заменить все ip адреса упоминающиеся в файле /etc/clickhouse/config.xml на доменные имена. После чего не забудьте прописать все что нужно в /etc/hosts.
#инструкция #manual #решение проблемы #настройка репликации #репликация

Google

Alexander Nairashvili
14.08.2018
16:01:50
я к тому, что у меня вообще нет такой настройки и, тфу тфу, всё работает как часы


Alexey
14.08.2018
16:05:09
Если я комментирую или удаляю данный параметр, и перезапускаю сервер, репликация перестает работать, и сервер пишет ошибки
получается типа, если данного параметра нет, сервер 1 не знает как называется сервер 2, и сервер 2 не знает как называется сервер 1.
Иначе я не знаю как это обьяснить
Вот что сказано в документации:
interserver_http_host
Имя хоста, которое могут использовать другие серверы для обращения к этому.
я думал слово "могут" здесь ключевое, и данный параметр не обязателен

Denis
14.08.2018
16:34:52
>uniqMerge
миллионы строк свернуты в несколько тысяч, при uniqMerge эти несколько тысяч схлапываются, получается скорость тысяча в секунду вместо млн.
aaaaa
bbbb
cccc
ddd
aaaaa,bbbb,cccc,ddd

Kirill
14.08.2018
16:43:44

Timur
14.08.2018
17:26:12
собрал c openjdk 1.8

Google

Oleg
15.08.2018
03:26:46
Обновился до последней версии Application: Net Exception: Address already in use: [::]:8123
<!-- <listen_host>::</listen_host> -->
<listen_host>::</listen_host>
<listen_host>::</listen_host>

?
15.08.2018
03:50:17
а вы поиск по listen_host тут сделайте :)

Wolf
15.08.2018
03:52:00
слишком много листен хостов )))

Oleg
15.08.2018
04:11:10
слишком много листен хостов )))
с прошлого года не менялось, во 2-й строке только 127.0.0.1 был. Оставил :: после обновления и ошибок. Сейчас 1 строку оставил, взлетело


Vadim
15.08.2018
06:42:51
Привет.
После обновления кластера до актуальной версии на одной из реплик появилась проблема с мерджем очень старых данных. Мердж идет, в итоге возникает ошибка - и он повторяется заново, в цикле. Почему-то с другой реплики этот part не скачивается. На второй реплике этого шарда никаких проблем нет.
2018.08.03 16:56:02.583570 [ 12 ] <Error> SrcData.TTStatBase (StorageReplicatedMergeTree): Code: 40, e.displayText() = DB::Exception: Checksums of parts don't match: hash of uncompressed files doesn't match, uncompressed hash of compressed files doesn't match, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.
Вот выдержка из лога по этому треду.
2018.08.03 16:56:02.352540 [ 12 ] <Debug> SrcData.TTStatBase (MergerMutator): Merge sorted 118552713 rows, containing 166 columns (6 merged, 160 gathered) in 234.24 sec., 506113.87 rows/sec., 649.20 MB/sec.
2018.08.03 16:56:02.356438 [ 12 ] <Trace> SrcData.TTStatBase (Data): Renaming temporary part tmp_merge_201709_63076_64611_5 to 201709_63076_64611_5.
2018.08.03 16:56:02.356510 [ 12 ] <Trace> SrcData.TTStatBase (MergerMutator): Merged 3 parts: from 201709_63076_63675_4 to 201709_64197_64611_4
2018.08.03 16:56:02.583501 [ 12 ] <Debug> SrcData.TTStatBase (Data): Undoing transaction. Removing parts: 201709_63076_64611_5.
2018.08.03 16:56:02.583570 [ 12 ] <Error> SrcData.TTStatBase (StorageReplicatedMergeTree): Code: 40, e.displayText() = DB::Exception: Checksums of parts don't match: hash of uncompressed files doesn't match, uncompressed hash of compressed files doesn't match, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.
2018.08.03 16:56:02.583670 [ 12 ] <Debug> MemoryTracker: Peak memory usage: 39.87 MiB.
2018.08.03 16:56:02.753503 [ 12 ] <Debug> SrcData.TTStatBase (StorageReplicatedMergeTree): Part 201709_63076_64611_5 (state Outdated) should be deleted after previous attempt before fetch
2018.08.03 16:56:02.753556 [ 12 ] <Trace> SrcData.TTStatBase (StorageReplicatedMergeTree): Executing log entry to merge parts 201709_63076_63675_4, 201709_63676_64196_4, 201709_64197_64611_4 to 201709_63076_64611_5
2018.08.03 16:56:02.753587 [ 22 ] <Trace> SrcData.TTStatBase (Data): Found 1 old parts to remove.
2018.08.03 16:56:02.753614 [ 12 ] <Debug> SrcData.TTStatBase (MergerMutator): Merging 3 parts: from 201709_63076_63675_4 to 201709_64197_64611_4 into tmp_merge_201709_63076_64611_5
2018.08.03 16:56:02.753622 [ 22 ] <Debug> SrcData.TTStatBase (StorageReplicatedMergeTree): Removing 1 old parts from ZooKeeper
2018.08.03 16:56:02.755014 [ 12 ] <Debug> SrcData.TTStatBase (MergerMutator): Selected MergeAlgorithm: Vertical
2018.08.03 16:56:02.755235 [ 12 ] <Trace> MergeTreeBlockInputStream: Reading 1 ranges from part 201709_63076_63675_4, approx. 46530560 rows starting from 0
Приветствую, Михаил. Как решили проблему?


Mikhail
15.08.2018
06:44:37
На разных шардах были разные проблемы.


Vadim
15.08.2018
06:45:27
Аналогичная ошибка, встречалась уже не первый раз, и ругается всегда на поле с установленным значением DEAFULT (но может так совпало).
Но, насколько я понимаю по тексту ошибки, КХ сам должен привести данные в соответствие (We will download merged part from replica to force byte-identical result)?
Не всегда ругается на конкретное поле. Удалил таблицу на 2м сервере, пересоздал, реплика шла и в проессе появились:
<Error> default.graphite (StorageReplicatedMergeTree): Code: 40, e.displayText() = DB::Exception: Checksums of parts don't match: hash of uncompressed files doesn't match, uncompressed hash of compressed files doesn't match, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.
и оно не проходит. На 2м сервере данные с 1го, что откудаКХ должен скачать?


Mikhail
15.08.2018
06:47:37
Я делал optimize на втором, насколько я помню. Это заставит первый скачать новые данные или сделать аналогичный альтер после фейла очередного мерджа.

Vadim
15.08.2018
06:53:57
ок, спасибо,попробую. Иначе застревает, одни и те же мерджи делает. откатываеет, ни одной строки за 8 часов не вставляет ни одна из реплик

Юрий
15.08.2018
06:54:56
Всем привет.
У меня вопрос по импорту CSV tab separated в КХ.
Возникает проблема постоянно, что
1) КХ зажирает оперативу и не отпускает ее после заливки нескольких дампов (Code: 210. DB::NetException: Connection refused: (localhost:9000, 127.0.0.1))
2) не хватает памяти. - как следствие от заливки предыдущих дампов.
На борту:
12 ГБ оперативки
HDD 1Тб
Дампы по 500тыс. строк, весом 870Мб в несжатом виде.
В логах вижу что идут удаления, ренеймы папок и иная внутренняя работа - но оперативку не отпускает все равно.
Параметры сервера дефолтные. Ubuntu 18.04
Ну и задача в том и состоит, чтобы заливать регулярные дампы в КХ. Как архивное хранилище информации.


Vadim
15.08.2018
06:58:44
Как запускать длительные запросы из cli ?
пробую OPTIMIZE TABLE graphite
Received exception from server (version 18.6.0):
Code: 209. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::NetException. DB::NetException: Timeout exceeded while reading from socket (192.168.148.16:9000): while receiving packet from graphite01:9000, 192.168.148.16.
0 rows in set. Elapsed: 300.284 sec.

Mikhail
15.08.2018
07:08:18
Nohup

Kirill
15.08.2018
07:24:06

Vadim
15.08.2018
07:24:24
спасибо

taketa
15.08.2018
08:51:49
привет !
Подскажите как сделать выборку полей где ChannelID не является уникальным ?
count(ChannelID)>1
SELECT
Time, TimeMillisecond, OpenTime, CloseTime, State, ChannelID, OpenHeight, CloseHeight, ChannelPoint, Capacity,
Node1, Node1FeeBaseMSat, Node1FeeRateMilliMSat, Node1TimeLockDelta, Node1MinHTLC,
Node2, Node2FeeBaseMSat, Node2FeeRateMilliMSat, Node2TimeLockDelta, Node2MinHTLC
FROM lns.Channel
WHERE CloseTime>=toDateTime('2018-08-10 23:59:59') AND CloseTime<=toDateTime('2018-08-11 23:59:59') AND count(ChannelID)>1
ORDER BY (ChannelID, Time, TimeMillisecond)

Google

Ivan
15.08.2018
08:53:46
привет !
Подскажите как сделать выборку полей где ChannelID не является уникальным ?
count(ChannelID)>1
SELECT
Time, TimeMillisecond, OpenTime, CloseTime, State, ChannelID, OpenHeight, CloseHeight, ChannelPoint, Capacity,
Node1, Node1FeeBaseMSat, Node1FeeRateMilliMSat, Node1TimeLockDelta, Node1MinHTLC,
Node2, Node2FeeBaseMSat, Node2FeeRateMilliMSat, Node2TimeLockDelta, Node2MinHTLC
FROM lns.Channel
WHERE CloseTime>=toDateTime('2018-08-10 23:59:59') AND CloseTime<=toDateTime('2018-08-11 23:59:59') AND count(ChannelID)>1
ORDER BY (ChannelID, Time, TimeMillisecond)
Звучит как group by + having

Vadim
15.08.2018
09:52:05
Привет всем. Если есть ошибки в данных, optimize table <tablename>
исправит ошибки?
...FINAL - поможет?

Mikhail
15.08.2018
10:08:47
с нужной партицией. Если обычный альтер не покатит - возможно, поможет final.
Если партиция неизвестна, или ошибки везде - логично, оптимизировать придется всю таблицу.

Vadim
15.08.2018
10:10:40
И прямо помогло? какая версия КХ? У меня в моменты выполнения optimize ошибки редели и вставка шла , до 50% от нормы, но через минуту перкращалась.
ок, спасибо ещё раз попробую. До и во время репликации

Power
15.08.2018
10:53:56
народ как лучше испольвозать таблицу SummingMergeTree, если существует много полей которых нужно суммировать скажем visits, cpa_approved_leads, cpa_approved_income, cpa_approved_payouts, ... как лучше сделать создать эти поля или лучше создать три поля event_type, sum, count ?

Mike
15.08.2018
10:56:07
Привет! слышал, тут отвечают на вопросы по кликхаусу. Мне надо посчитать runningDifference вместе с group by, или посчитать разницу между соседними элементами массива. Есть сейчас такая возможность?
более подробно на stack overflow: https://stackoverflow.com/questions/51856397/clickhouse-running-diff-with-grouping
Спасибо.

Mikhail
15.08.2018
11:10:20
проблемные места - искать в логах, в вашем же примере куски указаны, кажется.
а нет, не указаны - должны быть выше или ниже в логах с тем же id потока CH.

Vadim
15.08.2018
11:13:45

Mikhail
15.08.2018
11:14:37
нужно дождаться, когда optimize проедет на второй, по system.merges в том числе - и там же увидеть, что все проблемные мерджи закончились.

Vadim
15.08.2018
11:17:39
вторую дропнул, без этого ни строчки не вставлялось, на 12 часов данные отстали, только удалил реплицируемую таблицу на 2м, первый начал писать и по 100М строк вставлял, за 2 часа все нагнал, сейчас на единственном все прооптимизирую и буду снова реплицировать. Ещё хотелось бы знать версю на которй все решилось, сейчас последняя, до перехода на неё не было ошибок.

Sergey
15.08.2018
11:30:46
Есть такой enum ru.yandex.clickhouse.except.ClickHouseErrorCode, а где можно найти более подробное описание этих ошибок ? Или считается, что названия переменных уже говорящие и не требующие уточнений / комментария ? К примеру из непонятного LIMIT_EXCEEDED(290), тут может быть, что угодно за лимит

Artem
15.08.2018
11:33:05
помимо кода ошибки есть сообщение, которое идет вместе с ним
оно должно быть чуть более информативное

Sergey
15.08.2018
11:35:21
это в случае когда она уже произошла, мне же требуется написать обработчик ошибок, условно заранее заложиться на возомжные инфраструктурные проблемы, например, слишком большое кол-во мержей, слишком много выделено памяти, но читая вот этот список из 300+ ошибок , как мне показалось не все говорящие

Google

Artem
15.08.2018
11:36:54
пока ошибки человекоориентированные, гарантий по их машинной обработке нет
поддерживать такие гарантии довольно дорого
можно подумать о выделении определенного класса ошибок, который покрыть тестами
если кто-то готов написать такие тесты - было бы клево ;)

Sergey
15.08.2018
11:39:11
))

Konstantin
15.08.2018
11:47:57
Откройте регистрацию на митап, человеку зарегестрировать надо

Sigvard
15.08.2018
11:49:22
Добрый день. Пишем скориноговую модель на базе альтернативных источников данных. Хотим к вам, есть места? Спасибо

Ivan
15.08.2018
11:49:29

Anisim
15.08.2018
11:50:03

Konstantin
15.08.2018
11:51:11
Тогда, кто уступит свое место, наверняка не всем интересно

Kirill
15.08.2018
12:10:49
пора перекупам билетов браться за митапы

Александр
15.08.2018
12:14:25
Доброго времени суток, я же правильно понимаю что файл users.xml обновляеться в рантайме, и если я добавлю дефолтную настройку для сохранения логов запросов она автоматически подсосется?

Artem
15.08.2018
12:36:28

Александр
15.08.2018
12:39:39

Nick
15.08.2018
12:57:44
Подскажите плиз чем может быть вызвана данная ошибка :
2018-08-15 12:55:26,547 [myid:] - INFO [ProcessThread(sid:0 cport:2181)::PrepRequestProcessor@653] - Got user-level KeeperException when processing sessionid:0x100015ef7a00002 type:create cxid:0x25 zxid:0x40 txntype:-1 reqpath:n/a Error Path:/clickhouse/tables/02/events_shard/mutations Error:KeeperErrorCode = NodeExists for /clickhouse/tables/02/events_shard/mutations

Тимур
15.08.2018
13:06:30

Alexey
15.08.2018
13:10:38
никак

Тимур
15.08.2018
13:12:41
но это совсем неочевидно

Google

Тимур
15.08.2018
13:13:43
с учетом что там написано в всплывайке Query log

Alexey
15.08.2018
13:14:01
ничего себе открытие)) я давно уже пользуюсь табиксом, но не знал, потому что видимо не пригождалось. Кстати есть очень удобная бесплатная кросплатформенная IDE DBeaver.
Там к кликхаусу в два клика подключаешься

Vladimir
15.08.2018
13:14:54
Всем привет. выполняю запрос вида:
SELECT
COUNT(eventDate) AS clicks
FROM (
SELECT
FROM
ALL INNER JOIN USING
PREWHERE qtype='pv'
WHERE
)
ANY INNER JOIN (
SELECT
FROM
PREWHERE
WHERE
) USING
WHERE
GROUP BY
и раз в ~10 запросов count для одной из строки результата получается на 1 меньше(8 вместо 9), чем нужно.
Есть альтернативный запрос, он всегда возвращает верный ответ.
Если выполнить запрос без агрегации с фильтром по нужным данным, то количество строк верное(9 всегда)
Мне не даёт это покоя, что count не постоянен
версия 18.1.0

Mikhail
15.08.2018
13:15:14

Артемий
15.08.2018
13:33:24

Vladimir
15.08.2018
13:35:06

Ilya
15.08.2018
13:37:29
Всем привет.
SELECT
programId,
countIf(windowId={know_this_value_for_each_programId}) as firstWindow,
countIf(windowId={know_this_value_for_each_programId}) as lastWindow
FROM smth
WHERE programId IN (1,2,…)
GROUP BY programId
как мне подставить know_this_value_for_each_program_id? Словарь вида {programId: {‘firstWindowId’: x, ‘lastWindowId’: y}} могу составить в приложении, а дальше что? Создание временной таблицы и инсерта данных всех элементов, встречающихся в IN, при каждом селекте? Или внешний словарь? Что лучше?

Vladimir
15.08.2018
13:38:00

Nick
15.08.2018
13:46:17
<macros>
<layer>05</layer>
<shard>02</shard>
<replica>example05-02-1.yandex.ru</replica>
</macros>
в реплика мы указываем свой айпишник (хост) или айпишник (хост) нашей реплики?