
Pavel
18.12.2017
07:53:00
У нас настроен кластер кликхауса из двух шардов с репликацией на каждом. Сегодня перестал работать одна из реплик на одном из шардов и весь кластер перестал обрабатывать запросы. Неужели репликация в кликхаусе не защищает от подобных сбоев?

Александр
18.12.2017
07:58:33

Konstantin
18.12.2017
08:39:49
что такое шаред

Sergey
18.12.2017
09:03:02
Коллеги, подскажите пожалуйста в запросе вида select ... from table ORDER BY date результат будет ортсортирован стабильной сортировкой или нет? И если нет, то есть ли способ отсортировать стабильно?

Google

Sergey
18.12.2017
09:03:57
Таблица на ENGINE = ReplicatedMergeTree

Konstantin
18.12.2017
09:25:34
?

Anton
18.12.2017
09:32:08
День добрый. Столкнулись со "странной" проблемой.
Имеем 3 шарда по 2 реплики в каждом.
ZK настроен и ошибок никаких не выдаёт.
Проблема:
Переливаем данные из одной таблицы в другую.
INSERT INTO <DESTINATION> (... перечисление столбцов ...)
SELECT ... перечисление столбцов ...
FROM <SOURE>;
При internal_replication == false на шардах получаем "лишние" строки. В целевой таблице получаем больше строк чем в источнике.
В логах на 1 из нод
<Error> DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 235, e.displayText() = DB::Exception: Part 20150817_70_70_0 (state Committed) already exists
При internal_replication == true на шардах строки теряются. В целевой таблице строк меньше чем в источнике.
И ругань can't find part from own log
Данных - 8 миллиардов строк. Скорость вставки около 800 тысяч строк в секунду
Вставляем в Distributed таблицу
В ZK ошибок нет


Александр
18.12.2017
09:42:03
Т.е. при наличии одинаковых ключей сортировки, результат сортировки внутри ключа всегда разный
Т.е. я сначала беру данные из исходной таблицы и делаю order by rand() поверх делаю order by orderKey зная, что у меня несколько записей на один orderKey имеются
И каждый раз результат сортировки по orderKey разный

Taras
18.12.2017
09:43:46
Коллеги, всем привет!
а как можно потюнить скорость реплики? на уровне квот пользователя, увеличение памяти jvm? я переключил движки mergetree -> replicatedmergetree и 4 шарда, в каждом из которых по 30 млрд строк как-то медленно разливаются...

Александр
18.12.2017
09:43:59
Я думаю, что бы добиться устойчивости есть смысл добавить дополнительные колонки для сортировки

Sergey
18.12.2017
09:47:27

papa
18.12.2017
10:06:11
недетерминированный запрос (отсутствие полного порядка) + недетерминированное исполнение (несколько машин/несколько потоков) = разные ответы.

Александр
18.12.2017
10:13:45

Kirill
18.12.2017
10:15:33

Google

papa
18.12.2017
10:21:09

Tima
18.12.2017
10:28:56

Stas
18.12.2017
10:50:47
Коллеги, а напомните - нет ли функции округления даты_времени до 15 минутки? А то до 5 минут есть а хотелось бы до 15 :)

papa
18.12.2017
10:57:18
нет, но можно подправить FunctionsDateTime и https://github.com/yandex/ClickHouse/blob/master/libs/libcommon/include/common/DateLUTImpl.h#L281

Kirill
18.12.2017
11:05:33

Stas
18.12.2017
11:06:07

Kirill
18.12.2017
11:06:53
зато так можно до каких душа пожелает интервалов округлять)


Dmitriy
18.12.2017
11:27:54
Доброго дня, кто-то сталкивался с проблемой вставки Array(String) в Nested типах? Движок MergeTree
<Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 246, e.displayText() = DB::Exception: bad size of marks file `/data/clickhouse//data/db_1/table_1/20171214_20171214_353026_353090_1/column_1.size1.mrk':0, must be: 16: (while reading column column_1.field_1): (while reading from part /data/clickhouse//data/db_1/table_1/20171214_20171214_353026_353090_1/ from mark 0 with max_rows_to_read = 8192), e.what() = DB::Exception, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x3221296]
1. clickhouse-server(DB::Exception::Exception(std::string const&, int)+0x1f) [0x144a02f]
2. clickhouse-server() [0x36cfed0]
3. clickhouse-server(DB::MergeTreeReader::Stream::loadMarks()+0x9ab) [0x36d0abb]
4. clickhouse-server(DB::MergeTreeReader::Stream::seekToMark(unsigned long)+0x75) [0x36d28f5]
5. clickhouse-server(DB::MergeTreeReader::readData(std::string const&, DB::IDataType const&, DB::IColumn&, unsigned long, bool, unsigned long, unsigned long, bool)+0x73f) [0x36d338f]
6. clickhouse-server(DB::MergeTreeReader::readData(std::string const&, DB::IDataType const&, DB::IColumn&, unsigned long, bool, unsigned long, unsigned long, bool)+0x3cb) [0x36d301b]
7. clickhouse-server(DB::MergeTreeReader::readRows(unsigned long, bool, unsigned long, DB::Block&)+0x32e) [0x36d3ade]
8. clickhouse-server(DB::MergeTreeRangeReader::read(DB::Block&, unsigned long)+0x48) [0x36ce368]
9. clickhouse-server(DB::MergeTreeBaseBlockInputStream::readFromPart()+0x2870) [0x36c5
column_1 Nested( field_1 Array(String), ... )


Дмитрий
18.12.2017
11:37:03
Это получается Array(Array(String)). Кажется были проблемы с хранением многомерных массивов.

Dmitriy
18.12.2017
11:38:47
да, так. Это будет исправлено?

Егор
18.12.2017
11:40:41
Кажется, это by design пока что

Dmitriy
18.12.2017
11:43:28
нам очень нужно)

Александр
18.12.2017
11:44:57
да, так. Это будет исправлено?
Алексей на конференации говорил, что вроде как скоро станет возможным хранение даже вложенных nested структур ну и многомерных массивов тоже

Anton
18.12.2017
11:47:52
А кто подскажет, чем отличается поведение КХ при internal_replication вкл и выкл для шарда?

Андрей Михайлович
18.12.2017
11:51:48
нам очень нужно)
Ну вот Вы пишите на плюсах? Или может кто-то из знакомых пишет? Ну вот и сделайте. ©Миловидов


Александр
18.12.2017
11:51:49
А кто подскажет, чем отличается поведение КХ при internal_replication вкл и выкл для шарда?
Цитирую доку.
У каждого шарда в конфигурационном файле может быть указан параметр internal_replication.
Если он выставлен в true, то для записи будет выбираться первая живая реплика и данные будут писаться на неё. Этот вариант следует использовать, если Distributed таблица «смотрит» на реплицируемые таблицы. То есть, если таблица, в которую будут записаны данные, будет сама заниматься их репликацией.
Если он выставлен в false (по умолчанию), то данные будут записываться на все реплики. По сути, это означает, что Distributed таблица занимается репликацией данных самостоятельно. Это хуже, чем использование реплицируемых таблиц, так как не контролируется консистентность реплик, и они со временем будут содержать немного разные данные.


Anton
18.12.2017
11:52:43
Цитирую доку.
У каждого шарда в конфигурационном файле может быть указан параметр internal_replication.
Если он выставлен в true, то для записи будет выбираться первая живая реплика и данные будут писаться на неё. Этот вариант следует использовать, если Distributed таблица «смотрит» на реплицируемые таблицы. То есть, если таблица, в которую будут записаны данные, будет сама заниматься их репликацией.
Если он выставлен в false (по умолчанию), то данные будут записываться на все реплики. По сути, это означает, что Distributed таблица занимается репликацией данных самостоятельно. Это хуже, чем использование реплицируемых таблиц, так как не контролируется консистентность реплик, и они со временем будут содержать немного разные данные.
Благодарю. Просмотрел этот момент в доке

Dmitriy
18.12.2017
11:53:01

Google

.
18.12.2017
12:03:03
А при инсерте, чтобы сконвертировать значение в числовой код из внешнего словаря, надо руками до запроса это делать самому?

Michal
18.12.2017
12:26:05
да, так. Это будет исправлено?
Кажется исправление уже есть: https://github.com/yandex/ClickHouse/pull/1314#issuecomment-336252673 Можете собрать тестовый релиз и протестировать (такая помощь - тоже помощь, не все обязаны быть С++ программистами).
Тут тесты, можно на них ориентироваться: https://github.com/yandex/ClickHouse/pull/1314/files#diff-cbdf97a12d698329a65ec0f2bf8c2ed0
ну и словарь со строковым ключом - layout обязательно должен должен быть complex_key_hashed или complex_key_cache (с одним строковым элементом в качестве ключа).

Nikolai
18.12.2017
12:43:55

Konstantin
18.12.2017
12:54:29
как победить? делаю простой select c группировкой DB::Exception: Allocator: Cannot mremap memory chunk from 2.00 GiB to 4.00 GiB., errno: 14, strerror: Bad address.

Michal
18.12.2017
12:59:29

Konstantin
18.12.2017
13:00:30
нет, centos клиент и сервер 1.1.54318.

Michal
18.12.2017
13:01:58
Самостоятельно собирали или с Altinity?

Konstantin
18.12.2017
13:04:47
altinity

Alexey
18.12.2017
13:05:11

Nikolai
18.12.2017
13:09:33
Да, вошло. Но тогда я поправил запись nullable массивов, а многомерные почти что сами заработали.

Andrey
18.12.2017
13:40:01
Dct

Андрей
18.12.2017
13:50:42
Всем привет, никак не могу проинициализировать конфиг clickhouse_remote_servers.xml
В корне /etc/clickhouse-server CH его не видит:
Include not found: clickhouse_remote_servers
Как ткнуть CH в этот конфиг?

Andrey
18.12.2017
13:57:51
Всем привет. Подскажите плиз люди с опытом: Я правильно понимаю что вставля 10 строк каждые 2 секунды в таблицу MergeTree - для clickhouse все ОК или же для сохранения производительности надо вставлять 1000 строк за один раз?

Alexey
18.12.2017
14:01:20
ребята, я хочу немного почистить место, дропнуть в таблице колонку и создать заново, она занимает кучу места. На эту колонку настроена мат.вьюха. План такой, что я стопаю запись в таблицу, пересоздаю колонку, и запускаю запись обратно. Во вьюхе же ничего не должно произойти? Она как слушала эту колонку и записывался себе данные, так и продолжит?

Nikolai
18.12.2017
14:02:47

Google

Nikolai
18.12.2017
14:04:07
но я бы проверил сначала на тестовых табличках :)

Alexey
18.12.2017
14:15:33
ахах блин))

Michal
18.12.2017
14:18:55

Konstantin
18.12.2017
14:20:29

Michal
18.12.2017
14:21:15

Alexey
18.12.2017
14:23:37

Aloneibreak
18.12.2017
14:29:52
добрый день
подскажите пожалуйста с чем может быть связана такая ошибка?
<Error> report.Distributed.DirectoryMonitor: Code: 210, e.displayText() = DB::NetException: I/O error: Broken pipe: while reading from socket (ip:9000), e.what() = DB::NetException

Michal
18.12.2017
14:30:36

Konstantin
18.12.2017
14:32:00

Michal
18.12.2017
14:34:36

Alexey
18.12.2017
14:36:14
CLEAR COLUMN ?
не знал про такое, вьюха в этом случае тоже по идее не пострадает же?
в следующий раз буду знать

Michal
18.12.2017
14:37:13
Разве что будете чистить партицию в которую прямо сейчас идет запись, тогда не уверен что случится раньше - матвьюха прочитает данные или CLEAR COLUMN их удалит.

Alexey
18.12.2017
14:39:45
нет, такого счастья не надо, лучше запись останавливать на таких операциях =)

Nikolai
18.12.2017
14:44:14

Aloneibreak
18.12.2017
14:45:20

Google

Nikolai
18.12.2017
14:47:39
в логах на другой машине есть какие-нибудь ошибки?
DirectoryMonitor - поток, который посылает данные на другие ноды при записи в Distributed. Если имеем Broken pipe, то исключение могло случиться на противоположенном конце.

Andrey
18.12.2017
14:55:47
Подскажите, может ли словарь иметь один из аттрибутов типа Array или Set?

Nikolai
18.12.2017
14:56:49
На данный момент не реализовано. Разве что хранить сторкой.

Andrey
18.12.2017
14:58:47

Nikolai
18.12.2017
14:59:40
да. сегфолты не должны случаться

Andrey
18.12.2017
14:59:59

Yuri
18.12.2017
15:03:21
?

Mikhail
18.12.2017
17:07:56
Привет.
Подскажите, пожалуйста, по вьюшкам: хочу изменить запрос для MAT VIEW, без изменения типов или количества полей (просто чуть поменяется запрос).
Можно ли сделать это вручную, отредактировав sql в /metadata/ ?
А если вьюшка - реплицируемая - нужно отключать и редактировать одновременно на всех репликах шарда?

Firej
18.12.2017
17:08:56
привет! подскажите такое - какой минимальный промежуток времени можно хранить в CH если хочется в базу непрерывно писать. Я так понимаю что минимум получается пару месяцев, так как удалять из базы можно только месяцами. Так ведь?

Mikhail
18.12.2017
17:10:44

Firej
18.12.2017
17:11:32
Мда, не хотелось бы извращений

LeiDruid
18.12.2017
17:11:56
почему извращения?
Нормальная фича
Используйте партиционирование как вам будет угодно