@clickhouse_ru

Страница 110 из 723
Pavel
09.04.2017
07:12:26
sudo service clickhouse-server restart Include not found: clickhouse_remote_servers Include not found: clickhouse_compression Stop clickhouse-server service: DONE Start clickhouse-server service: Include not found: clickhouse_remote_servers Include not found: clickhouse_compression Path to data directory in /etc/clickhouse-server/config.xml: /var/lib/clickhouse/ No directory, logging in with HOME=/ DONE

?

работает вроде ОК, но ошибки пугают :)

prll
09.04.2017
09:58:31
пару месяцев назад меняли директории с /opt/clickhouse на /var/lib/clickhouse/ , желательно проверить где данные на самом деле и что в конфиге осталось

Google
Andrey
09.04.2017
10:47:40
чтобы распределять нагрузку
Да, вы просто строите clickhouse кластер и при расчётах используются ресурсы всех серверов. (При правильном градировании конечно)

nikoinlove
09.04.2017
11:00:01
А почему mysql в варлиб тебя не интересует?)

Vladislav
09.04.2017
11:02:29
Потому что это mysql

Andrey
09.04.2017
11:11:55
а где можно глянуть как настроить такой кластер ?
В документации. Либо в tutorial. Искать по слову кластер/zookeeper

Maksim
09.04.2017
11:12:32
ок в понедельник буду разбираться. спасибо)

Mike
09.04.2017
12:12:22
всем привет! а есть способ в запросе в колонке вывести накопительный итог?

Без зависимых подзапросов не понятно, как это сделать =(

Peter
09.04.2017
12:54:35
ок в понедельник буду разбираться. спасибо)
Еще статья на хабре есть: https://habrahabr.ru/company/smi2/blog/317682/

Alexey
09.04.2017
13:20:35
всем привет! а есть способ в запросе в колонке вывести накопительный итог?
Есть две секретные функции: finalizeAggregation: /** Принимает состояние агрегатной функции. Возвращает результат агрегации. */ runningAccumulate: /** Весьма необычная функция. * Принимает состояние агрегатной функции (например runningAccumulate(uniqState(UserID))), * и для каждой строки блока, возвращает результат агрегатной функции по объединению состояний * от всех предыдущих строк блока и текущей строки. * * То есть, функция зависит от разбиения данных на блоки и от порядка строк в блоке. */ Пример использования: :) SELECT EventDate, finalizeAggregation(state), runningAccumulate(state) FROM (SELECT EventDate, uniqState(UserID) AS state FROM test.hits GROUP BY EventDate ORDER BY EventDate) SELECT EventDate, finalizeAggregation(state), runningAccumulate(state) FROM ( SELECT EventDate, uniqState(UserID) AS state FROM test.hits GROUP BY EventDate ORDER BY EventDate ASC ) ┌──EventDate─┬─finalizeAggregation(state)─┬─runningAccumulate(state)─┐ │ 2014-03-17 │ 36613 │ 36613 │ │ 2014-03-18 │ 36531 │ 54710 │ │ 2014-03-19 │ 36940 │ 69953 │ │ 2014-03-20 │ 36462 │ 83923 │ │ 2014-03-21 │ 35447 │ 96823 │ │ 2014-03-22 │ 31555 │ 108564 │ │ 2014-03-23 │ 31200 │ 119494 │ └────────────┴────────────────────────────┴──────────────────────────┘

f1yegor
09.04.2017
13:21:44
Добавить а reference? ^

Google
Mike
09.04.2017
13:22:10
> функция зависит от разбиения данных на блоки и от порядка строк в блоке. а вот это что значит? :) если я сделаю order by date, то всё будет норм?

Alexey
09.04.2017
13:24:02
> функция зависит от разбиения данных на блоки и от порядка строк в блоке. а вот это что значит? :) если я сделаю order by date, то всё будет норм?
Если результат состоит из нескольких блоков (большой), то это состояние будет сбрасываться каждый блок. Возможно, мы это исправим, и можно будет расчитывать, что при вызове после ORDER BY всё будет Ok.

Mike
09.04.2017
13:26:14
Алексей, большое спасибо за ответ!

Один вопрос остался — большой это сколько? Как мне узнать, что вот сейчас конкретно он даст неверные результаты? Эмпирически?

Alexey
09.04.2017
13:31:06
Сейчас это не гарантируется. Обычно размер блока - max_block_size. Но в некоторых запросах блоки после ORDER BY получаются маленькими.

Mike
09.04.2017
13:31:50
Понял, еще раз спасибо :)

prll
09.04.2017
13:54:47
А можно узнать зачем?
есть правила расположения файлов на файловой системе, например man hier и лучше им соответствовать.

Vladislav
09.04.2017
13:55:46
Igor
09.04.2017
13:57:05
В opt давно ставится софт, и явно это надо не в либы ставить...
/opt This directory should contain add-on packages that contain static files. /var/lib Variable state information for programs. по-моему для хранения бд и мета-инфы вторая больше подходит

Vladislav
09.04.2017
13:57:49
Вроде как речь шла про сам сервер, а не файлы БД

БД вообще предпочитаю в отдельный маунт

Igor
09.04.2017
13:59:01
так бинарник вообще в /usr/bin ставится ж, не?

prll
09.04.2017
14:01:38
/var/lib/mysql /var/lib/postgresql /var/lib/mongodb - и было бы странно сочинять другое место

хотя в freebsd напрмиер все как всегда более правильно и называется /var/db/

f1yegor
09.04.2017
18:27:06
в devzen упомянули КХ в связи с этос статьей. https://www.percona.com/blog/2017/03/17/column-store-database-benchmarks-mariadb-columnstore-vs-clickhouse-vs-apache-spark/. @milovidov_an хотел бы поучаствовать в одном из следующих эпизодов?

Mike
09.04.2017
18:48:06
Так хорошо, как может быть в заказной статье :) (|irony|)

Vladislav
09.04.2017
19:16:11
Очень похоже, да ?

Я все еще жду сравнение с последними версиями Vertica

Maksim
09.04.2017
20:15:41
Скажите пожалуйста есть ли другой способ выгрузить данные в кх без cat, заканчивается память т.к. при cat все данные в памяти оперативной хранятся и не получается выгрузить дамп больше 100 млн записей (( cat table_data.tsv | clickhouse-client —database=statistics —query="INSERT INTO table FORMAT TabSeparated";

Google
Let Eat
09.04.2017
20:17:30
это точно не изза cat

clickhouse-client —database=statistics —query="INSERT INTO table FORMAT TabSeparated" < table_data.tsv

вот так без cat, но эффект будет тот же

Maksim
09.04.2017
20:27:21
tcmalloc: large alloc 1073750016 bytes == 0x48a72000 @ tcmalloc: large alloc 2147491840 bytes == 0x88a74000 @ tcmalloc: large alloc 4294975488 bytes == (nil) @ std::exception: std::bad_alloc

а что бы это могло значить?

Ivan
09.04.2017
20:41:05
можно сплитом пройтись по файлу, разбить по строкам и загружать уже несколько файлов в кх через кат

Let Eat
09.04.2017
20:52:56
а что бы это могло значить?
это значит C++ не может выделить памяти.

Alexey
09.04.2017
20:54:12
В дампе много длинных строк. Попробуйте уменьшить max_insert_block_size. Например, так: clickhouse-client —max_insert_block_size=65536 ...

f1yegor
09.04.2017
20:55:50
"будет весело" - говорили они

Alexey
09.04.2017
20:59:15
Так хорошо, как может быть в заказной статье :) (|irony|)
Их интересует ClickHouse для задачи сбора данных и аналитики производительности MySQL, MongoDB. Хотя я пол года назад предложил его попробовать, они всё сделали сами, даже помощь по настройке не потребовалась.

Alexey
09.04.2017
21:16:57
А насколько длинные? ClickHouse не любит очень длинные строки. Работает, но требуется уменьшать всевозможные размеры пачек для обработки.

Maksim
09.04.2017
21:17:52
А насколько длинные? ClickHouse не любит очень длинные строки. Работает, но требуется уменьшать всевозможные размеры пачек для обработки.
я как-то на самом деле удивлен. т.к. вчера я загружил 130 млн строк этой командой. а сегодня поставил пароль для пользователя и попытался еще импортнуть один файлик 30 млн строк по 43 столбца. и ошибка(

то есть вчера этот файл загружался а сегодня с установленным паролем в sha256 уже не грузится. может пароль тут непричем но ничего больше не менял

Alexey
09.04.2017
21:18:49
Пароль не при чём.

Иван
09.04.2017
21:19:56
Google
Maksim
09.04.2017
21:20:30
в системе не появилось других процессов жрущих память?
Load Average 0.07. два ядра почти по 0%. память загружена 303м из 4gb

Alexey
09.04.2017
21:21:24
Разница в порядке указания столбцов в первичном ключе есть и она очень важна. Данные в кусках сортируются лексикографически по первичному ключу. То есть, если ключ (a, b) - данные будут отсортированы по столбцу a. А для каждого множества строк с одинаковым значением столбца a - по столбцу b.

Если вы указали условие (равенство, неравенство, IN, комбинация логических связок от этих условий) на столбец a в WHERE - индекс позволит выбирать диапазоны в данных. Если вы не указали условие на a, но указали только условие на b - индекс всё-равно может работать, но хуже и лишь при некоторых условиях - если в данных встречаются длинные диапазоны с одинаковыми значениями a - тогда в таких диапазонах ClickHouse сможет выбрать поддипазоны с нужными значениями b и пропустить остальные.

https://medium.com/@f1yegor/clickhouse-primary-keys-2cf2a45d7324

Load Average 0.07. два ядра почти по 0%. память загружена 303м из 4gb
Посмотрите, какая средняя длина строк в файле. Посчитать можно так: wc -lc file

Maksim
09.04.2017
21:25:58


это нормально?

столько демонов

Alexey
09.04.2017
21:26:55
Это один процесс, но разные потоки. Это нормально.

Иван
09.04.2017
21:27:05
Maksim
09.04.2017
21:27:55
я делал дампы из mysql по 30 млн записей и их грузил вчера

Alexey
09.04.2017
21:29:37
Судя по этому выводу, всё Ок. В среднем строки примерно 100 байт, что немного. Тем не менее, попробуйте ещё уменьшить max_insert_block_size в clickhouse-client.

Alexey
09.04.2017
21:33:10
Экспериментируйте. Возможно, проблема не в этом.

Maksim
09.04.2017
21:47:37
уменьшение этой опции не помогло. странно(

Alexey
09.04.2017
21:48:09
Разделите файл на куски и найдите минимальный кусок, для которого ошибка проявляется.

Maksim
09.04.2017
21:57:25
Разделите файл на куски и найдите минимальный кусок, для которого ошибка проявляется.
разделю о не понятно почему вчера по 30 млн загружалось а сегодня уже нет( или зависит от количество записей в таблице?

Разделите файл на куски и найдите минимальный кусок, для которого ошибка проявляется.
разделил на куски в 10 млн Code: 173, e.displayText() = DB::Exception: Allocator: Cannot mmap., errno: 12, strerror: Cannot allocate memory, e.what() = DB::Exception

по htop вижу что равномерно память растет до 4 гигов и просто падает exception что памяти не хватает. как можно обойти это ограничение? не выгружать весь файл в память а как-то потоков писать из файла?

Google
Let Eat
09.04.2017
22:15:04
если вгрузить на один раз и подождать нестрашно, то может своп создать попробовать

nikoinlove
09.04.2017
22:27:09
на и386:)

Maksim
10.04.2017
06:58:26
если вгрузить на один раз и подождать нестрашно, то может своп создать попробовать
загрузил меньшим файлом в меньше чем 1 гб (5 млн строк) - файл загрузился из сообщения tcmalloc: large alloc 1073750016 bytes == 0x486ec000 @ - следует что большой размер7 т.к. они реально больше 1гб. но где это ограничение задается?

Vladimir
10.04.2017
11:22:45
Добрый день! А есть ли в ClickHouse какие-либо ограничения на размер массивов или строк при INSERT-е в формате JsonEachRow?

Я просто заливаю json, который гарантированно корректный, но ClickHouse ругается на "Code: 26, e.displayText() = DB::Exception: Cannot parse JSON string: expected opening quote: (at row 1), e.what() = DB::Exception", (row может быть произвольный)

Возможно, нельзя заливать массивы из одних только пустых строк или вроде того...

Felixoid
10.04.2017
11:35:36
У нас в тестинге достаточно часто вырубаются машины по питанию и появилась мысль перманентно (например, в /etc/default/clickhouse) выставлять флажок flags/force_restore_data, чтобы в случае падения машина без вмешательства эксплуатации удаляла из ZK информацию о потеряных кусках Но возникли также разумные опасения, к чему может привезти подобная "оптимизация", @milovidov_an? Разумно ли так делать?

Vitaliy
10.04.2017
12:37:39
Есть вопросик по zookeeper у меня есть 3 сервера в 2-х дц - т.е. 3 шарда на 1 дц как он себя поведет, если упадет связь между дц, или упадет какая-то нода?

Alex
10.04.2017
12:40:17
а ZooKeeper так же расположен - три ноды в 2 ДЦ?

Vitaliy
10.04.2017
12:40:24
да

по три ноды на дц

Alex
10.04.2017
12:41:54
То есть всего 6 нод zookeeper-а, объединенных в 1 кластер? Или 2 кластера?

Vitaliy
10.04.2017
12:46:51
да, один кластер

Alexey
10.04.2017
12:52:55
а как вы это согласуете с "As mentioned in the ZooKeeper Getting Started Guide , a minimum of three servers are required for a fault tolerant clustered setup, and it is strongly recommended that you have an odd number of servers."

Alex
10.04.2017
12:53:43
Чётное число нод делать смысла мало - например и конфигурация из 5 нод, и конфигурация из 6 переживают падение 2 нод, но не переживают падение 3-х. Соответственно в вашем случае при недоступности одного ДЦ или потери связности оба ДЦ уйдут в readonly. Если вы назначите один из ДЦ "главным" и разместите большинство нод zookeeper-а там, то при выпадении "запасного" ДЦ, основной будет доступен.

Полностью симметричной конфигурации, чтобы при выпадении одного ДЦ, второй продолжал работать, сделать не получится.

Maksim
10.04.2017
12:54:28
Скажите пожалуйста можно ли как-то включить компрессию при дампе через clickhouse-client? опции такой нету, а нужно локально выгружить данные в native .. ?

Alex
10.04.2017
13:00:12

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