Формат данных AWS S3 для анализа кликов [закрыт]

user125687 спросил: 28 марта 2018 в 04:10 в: apache-spark

Мы используем очередь Kafka для сбора данных по клику в формате json с разных устройств. Нам нужно проанализировать эти данные через Hive (или, возможно, Spark). Мы рассматриваем использование часовых разделов, и каждый час мы будем называть нашу работу по ульям / sparkм. Я читаю информацию о разных форматах файлов, но я не мог решить оптимальный формат файла для лучшей производительности запросов. Мы пытались хранить json-данные в формате avro в s3, но запросы медленны.

Мы можем вставлять json-данные в s3 в виде столбчатого формата. (вместо этого, если вы вставляете один столбец, который содержит всю запись json). Как вы думаете, удерживая каждый атрибут json в другом столбце в s3? (наша схема меняется очень редко)

Мы будем запускать почасовые улей / искры. поэтому нам нужно получить все записи в часовом разделе. однако я буду запрашивать разные столбцы в разных запросах. Какой формат файла лучше для нашего случая? (avro, паркет, орк и т. д.)


1 ответ

Есть решение
cricket_007 ответил: 29 марта 2018 в 10:46

Прежде всего, Hive и Spark точно работают с данными S3. Presto / Athena будет работать быстрее только на специальных SQL-запросах через S3. Имейте в виду, что если вы используете эти опции, вам нужен способ обновить метасторское хранилище Hive ... просто посадки файлов в новый почасовой путь к файлу в S3 недостаточно.

ORC или Parquet далеко более производительный, чем Avro. Avro более производительный, чем JSON или простой текст (плюс учитывает эволюцию схемы). Netflix провел тестирование производительности на ORC и Parquet на S3 с помощью Presto

Не уверен, что вы подразумеваете под "Мы пытались хранить данные json в формате avro" ... Если вы используете Kafka S3 Connector от Confluent, и использовал конвертер, то он не предлагает интеграции Hive в настоящее время. Но если вы как-то добавили в него Hive и получаете медленные запросы, вам нужно увеличить размер сбрасываемых файлов. Он также не поддерживает полезные форматы запросов, кроме JSON или Avro.

Если вы используете Secor by Pinterest, он предлагает паркет & Поддержка ORC от Kafka и интеграция с Hive, поэтому я бы порекомендовал это.

Если вы хотите обрабатывать ежечасные записи в потоковой среде, а не в пакетном режиме, вы также можете использовать их, и это будет быстрее, чем ожидание S3 результаты.

user125687 ответил: 29 марта 2018 в 07:57
Спасибо, я имею в виду: клиенты отправляют данные в формате json. Итак, у меня есть два варианта: 1-) анализ данных в Kafka (через ksql и т. Д.) И вставка записей в Amazon s3 в формате csv. Я создам внешнюю таблицу в улье и проверю почасовой раздел. 2-) Я вставлю записи в Amazon s3 в формате json. Поэтому мне также нужно будет проанализировать формат JSON в слое куста. Поэтому нам нужно решить, где мы должны проанализировать JSON в Кафке или в S3 через улей
cricket_007 ответил: 29 марта 2018 в 08:03
Нет, избегайте CSV любой ценой. Преобразуйте JSON в Avro, прежде чем коснуться S3 или Hive. KSQL может сделать это, но Kafka Streams будет иметь большую гибкость программирования, поскольку KSQL по-прежнему не полностью поддерживает функции Avro.
user125687 ответил: 29 марта 2018 в 08:03
Я рассчитываю продолжительность просмотра видео и выполняю анализ пути, поэтому мне нужно сопоставить записи, используя аналитические функции (опережение, отставание), мне нужно проанализировать все записи в сеансе. Если клиент смотрит длинный фильм (например, властелин колец), один сеанс может длиться 3 или 4 часа. Так что потоков кафки или искровых потоков может быть недостаточно. (Мне нужно объединить потоковые данные с пакетными данными в s3)
cricket_007 ответил: 29 марта 2018 в 08:06
Насколько я понимаю, вы не получаете JSON каждые несколько часов, а чаще. Вы можете использовать потоки kafka для преобразования записей JSON в Avro по отдельной теме в каждой записи, что в любом случае будет делать KSQL для внутреннего использования. Или вы можете просто использовать AvroConverter от Kafka Connect, чтобы автоматически передавать данные JSON в Avro и записывать в S3.
cricket_007 ответил: 29 марта 2018 в 08:11
Да. cwiki.apache.org/confluence/display/Hive/AvroSerDe Или вы можете выгрузить сообщения JSON в Parquet с помощью Secor - github.com/pinterest/secor