powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Инструмент для работы с SQL движками Impala/Hive
97 сообщений из 97, показаны все 4 страниц
Инструмент для работы с SQL движками Impala/Hive
    #39260003
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если другое - просьба указать что.
* работает только с Hive без плясок с бубном
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39261730
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запросы удобно вертеть на х#ю. Он же hue
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Инструмент для работы с SQL движками Impala/Hive
    #39477174
мигель1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не создавать новую тему.

Пj факту идет война Spark +hive vs impala

Ставлю на Impala
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39477182
мигель1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мигель1,
Простите забыл TEZ + HIVE
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39477185
мигель1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мигель1,
Вброшу чтобы не быть голословным
https://www.itweek.ru/idea/article/detail.php?ID=183281
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39477193
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мигель1Пj факту идет война Spark +hive vs impala

Это война белазов и феррари. Все три технологии работают с hive metasore. Поэтому под разные задачи можно выбирать нужные инструменты, а сами данные + метаданные едины.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39477199
мигель1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
haXbatмигель1Пj факту идет война Spark +hive vs impala

Это война белазов и феррари. Все три технологии работают с hive metasore. Поэтому под разные задачи можно выбирать нужные инструменты, а сами данные + метаданные едины.

А белаз и ферари это TEZ и Impala?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39477268
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мигель1Чтобы не создавать новую тему.Вообще надо было создать. Правда тогда бы я ее не увидел. :)) мигель1идет война Spark +hive vs impalaДавай разберемся с терминами и что к чему. Разные движки Как правильно было замечено, spark, hive, impala используют hive metastore, НО... Выполнение запроса даже если его выполнять из Spark используя Hive Context это не то же самое что выполнять запрос из Hive использую Spark engine. Детальнее можно начать отсюда: Query Engines for Hive: MR, Spark, Tez with LLAP – Considerations! . Существуют и функциональные различия - но это уже для весьма экзотических случаев https://spark.apache.org/docs/latest/sql-programming-guide.html#compatibility-with-apache-hive Чтоб прояснить ситуацию: в Hive (если все нормально сконфигурировано) движок можно элементарно менять с помощью set hive.execution.engine=spark/tez/mr (map reduce - default). И ключевой момент здесь, что путем изменения движка и подкручиванием параметров типа
Код: plaintext
1.
2.
3.
4.
set hive.exec.parallel;
set hive.exec.parallel.thread.number;
set mapreduce.map.cpu.vcores;
set mapreduce.reduce.cpu.vcores;
set mapred.reduce.tasks;
Можно без каких либо изменений запросов добиться ускорения в 10 раз и больше. Естественно помня о том, что значения должны быть адекватными и на кластере может выполняться множество запросов одновременно. В сети можно найти разнообразные сравнения Hive vs Impala авторства Hortonworks, которое показывает что Hive чуть ли не лучше импалы и возвращает результат за секунды. В реальности это конечно не так, а все дело в том, что для hadoop существует три основных вендора Cloudera/Hortonworks/MapR и импала эксклюзивный продукт Cloudera, поэтому Hortonworks старается всячески его "придавить". С технической стороны наиболее важно, что все движки для Hive написаны на java, а Impala - на С. Отсюда Impala очевидный лидер по скорости и в теории и для реальных задач. Но вместе со скоростью импала унаследовала и главную проблему сишных программ - утечки памяти. Периодически возникающие "Memory limit exceeded" не позволяют использовать импалу для критических запросов и лечатся только рестартом Impala daemon. Кроме того, подобное не всегда легко воспроизвести, потому что зависит не только от выделенной памяти, но и от числа одновременно выполняющихся запросов и их специфики. Конкуренты? Почему Impala и Hive нельзя считать полноценными конкурентами на данном этапе.
    Hive начал поддерживать DML (update/insert/delete) с многочисленными "если", но все же. Отсутствие (по очевидным причинам) интеграции Impala и Spark не позволяет задействовать импалу при работе с Data Frames, соответственно единственным путь при программировании, скажем, на scala - соединиться, например, по jdbc и выполнить запрос.
И наиболее раздражающее, что одни и те же действия выполняются по разному, что может делать SQL код несовместимым. Например получение дня (Sunday, Monday etc) для Impala будет выглядеть dayname(column), а для Hive - date_format(column, 'EEEE'). И это один из примеров, которых сотни. Можно использовать UDF, но их надо отдельно подключать в Hive и Impala и в Impala могут возникнуть трудности с правами. Хотя опять таки плюсом является, что UDF можно программировать на C. Касательно возможностей SQL - у Impala они богаче, то есть, если запрос выполняется в Hive, то скорее всего выполнится и в Impala, но не всегда. :) Тут можно приводить еще вагон и тележку деталей (включая особенности и ограничения при работе с разными типами данных и прочее), но по сути это просто текущие проблемы с совместимостью, что не означает отсутствие конкуренции. Data loading into HDFS Ключевые вендоры реляционных СУБД держат руку на пульсе и, например, и Oracle и MSSQL уже добавили возможность offload таблиц в кластер. В идеальном случае было бы чтоб и перфоманс для Hive (mr/tez/spart) или Impala улучшался и функциональные возможности развивались и сближались при этом можно было бы выбирать любой движок, который может быть использован чтоб вытянуть данные из кластера. Но импала сейчас идет несколько по иному пути и позиционируется больше для ad-hoc запросов.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39477269
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создавая тему, мне, имело смысл указать только для выполнения запросов.

DDL без вариантов должно выполняться через командную строку во избежание проблем с правами.

В то же время в хадуп данные часто денормализованы и работать с таблицами по пару сотен колонок через командную строку это полный ад.

Из универсальных SQL клиентов стоит добавить еще этот: DBeaver .
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39477274
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop Data offloading into HDFS Fixed.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39477344
мигель1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ. у меня более глобальная проблема.

Спустя год после тестов, компания подтвердила, что hdfs быть.
Точнее Hdfs для аналитики. И если с запросами все вроде понятно ODBC драйвер, то вопрос с ETL открытый.

То ли правда, все скриптовать и кроном или знакомиться с Spoon и talend
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39477392
NePZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakЗапросы удобно вертеть на х#ю. Он же hue

А действительно, почему hue не включили в список?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39477393
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мигель1Спасибо за ответ. у меня более глобальная проблема.Это уже совсем оффтоп. Если интересно - создай отдельную тему, я там поделюсь опытом.
NePZА действительно, почему hue не включили в список?Второй пункт - Web UI.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39478413
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopДавай разберемся с терминами и что к чему.
отличный пост, хоть в FAQ клади !

dbms_photoshopНо вместе со скоростью импала унаследовала и главную проблему сишных программ - утечки памяти. Периодически возникающие "Memory limit exceeded" не позволяют использовать импалу для критических запросов и лечатся только рестартом Impala daemon. Кроме того, подобное не всегда легко воспроизвести, потому что зависит не только от выделенной памяти, но и от числа одновременно выполняющихся запросов и их специфики.

а вот это, это из собственного опыта ? спрашиваю потому, что у нас вроде импала на удивление стабильно пашет. бывает задумывается черезчур на долго, видимо при нехватке ресурсов, но что бы рестарта требовала не слышал. правда нагрузка на импалу не очень большая, а запросы достаточно дубовые (данные специально подготавливаются заранее тяжелыми map-reduce)
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39478510
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!а вот это, это из собственного опыта ?Да. Кластер используется достаточно интенсивно и если оно начало валиться, то потом даже если все запросы прибить и оставить одного пользователя, то до рестарта демона ошибка не уходит.

Нашел у себя в заметках, что более детально формулировка может звучать так
Код: plaintext
Memory limit exceeded Query did not have enough memory to get the minimum required buffers in the block manager.
Но после "Memory limit exceeded" вроде могут идти и другие причины.

Если погуглить по "Query did not have enough memory to get the minimum required buffers in the block manager", то первая ссылка у меня
https://community.cloudera.com/t5/Interactive-Short-cycle-SQL/Impala-memory-issue-Query-did-not-have-enough-memory-to-get-the/m-p/41101 This is almost certainly one of the known issues with Impala's previous YARN integration (via Llama). There were some fixes to that code in Impala 2.4 but you could still get this sort of unexpected failure. It's recommended that you do not use Impala on YARN, and instead to statically allocate resources to Impala for the time being. Cloudera Manager has a feature called "Static Service Pools" that can help with that, but it's not necessary. The CM documentation has more information.

We are working on improving Impala resource management, but it's going to take some time and we don't yet have a target release yet.Но этот ответ больше года назад и у нас ошибка валится и на Impala2.3.0-cdh5.5.6 и на Impala2.7.0-cdh5.10.1 и "statically allocate resources to Impala".
Более того мы обращались в Cloudera и они пока не могут предложить решение.

Так что пока пришлось отключить Impala in production и используем в других environment для ad-hoc запросов.

Хотя для ETL она тоже хороша, но из-за нестабильности пока увы применить не можем.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39478513
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще один клиент, поддерживающий кастомные JDBC drivers.

Rapid SQL

Надо будет как-нибудь написать сравнение их всех как будет время...
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39479196
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

у нас на кластере 300+ гб и подозреваю импала просто не натыкается на что либо, где не хватает памяти. я на игровой виртуалке натыкался на Out of memory: Kill process 6439 (impalad) score 464 or sacrifice child, но там я спецом насиловал. имхо потому они и не позиционируют импалу по тяжелые ETL или джобы, я понял они позиционируют импалу как интерфейс внешним пользователям, типа отчетики, дата анлитики с нехитрыми квери и т.п.
а что у вас делает ETL, spark ? как у него с надежностью ?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39479282
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!dbms_photoshop,

у нас на кластере 300+ гб и подозреваю импала просто не натыкается на что либо, где не хватает памяти. я на игровой виртуалке натыкался на Out of memory: Kill process 6439 (impalad) score 464 or sacrifice child, но там я спецом насиловал. имхо потому они и не позиционируют импалу по тяжелые ETL или джобы, я понял они позиционируют импалу как интерфейс внешним пользователям, типа отчетики, дата анлитики с нехитрыми квери и т.п.
а что у вас делает ETL, spark ? как у него с надежностью ?Ни Impala ни Hive не особо friendly to multiple joins.
Число соединений имеет смысл минимизировать в том числе и из-за дизайна.
То есть, если скажем в Оракле есть таблица фактов и 10 измерений, то в HDFS имеет смысл создать одну таблицу с 400 колонками.
Хотя все определяют детали. Пока в основном используем колоночный формат parquet и широкие таблицы, хотя у OCR есть свои фишки и я его пока особо не гонял.

ETL бывает весьма мудреный с граппировками, аналитическими функциями и даже несколькими десятками соединений.
Я однозначно рекомендовал бы использовать Spark 2.x (у нас 2.1) вместо Spark 1.x (пользовали 1.6), потому что 1.6 во-первых медлеенее, во-вторых имел проблемы со стабильностью и в третьих код не совсестимый. В 2.1 никаких проблем со стабильностью не наблюдал.

Объемы данных кластера 550+ТБ, дневной прирост 700ГБ.
Получается дневной прирост более чем в два раза превышает объем твоего кластера.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39479286
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!,

Как я уже писал выше, сильно напрягает что в разных движках разные функции делают одно и то же и иногда невозможно написать код работающий и в Hive и в Impala.

Я в прошлом году пытался решить проблему путем инкапсуляции логики в UDF, но были проблемы
1) Hive. Там есть перманентные и временные UDF, но даже перманентные не видны при выполнении запросов через Hue/JDBC.
То есть можно создать функцию и использовать ее в Hive shell и всё.
2) Impala. Для создания функции нужны server wide admin privileges!
http://www.cloudera.com/documentation/enterprise/5-5-x/topics/cm_sg_sentry_service.html
3) Spark. Тоже были проблемы с видимостью функций. Уже не помню деталей.

Главная причина почему я это временно забросил - вторая. У себя на ноуте я импаловские UDF немного погонял в виртуалке Oracle Big Data Lite, но на работе каждый раз когда надо пересоздать функцию создавать задание админам требующее обоснования и прочей бюрократии - это не вариант.

PS. Я это все делал на более старой версии кластера, может в CDH5.10 что-то поменялось в лучшую сторону.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39479355
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

300+ гб это я оперативки имел ввиду, данных под импалу зипованных паркетов нарезается может на пару тб, но реально запросы много меньше затрагивают. наверно потому хорошо живет.

а с UDF, судя по всему вам они так нужны, что бы тяжелую бизнес логику реализовывать и тут не понятно зачем тяжелую логику ETL на hive/map-reduce или hive/impala хотеть рисовать, если есть обычный map-reduce или спарк ? типа что бы скрипты компактные и в знакомом SQL были ? а на спарке ETL у вас java/scala api или sqlContext ?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39479790
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!на спарке ETL у вас java/scala api или sqlContext ?А зачем разделять?

https://amplab.cs.berkeley.edu/wp-content/uploads/2015/03/SparkSQLSigmod2015.pdf Rather
than forcing users to pick between a relational or a procedural API,
however, Spark SQL lets users seamlessly intermix the two.
Вообще рекомендую прочитать указанную pdf целиком.

Мой подход - реализовывать по возможности на SQL там где этот инструмент уместен и эффективен.
В иных случаях помогает "a bit of scala coding".

Конкретный пример вот Пятничная задачка. Смотрим назад. .
В итоге та задача была решена в Spark как раз с применением обоих подходов.

PS. А почему ты сидишь по серым ником?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39479884
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopА зачем разделять?
было интересно sql ли у вас. потому, что мы пришли к тому, что пишем sql под импалу, что бы проверять map-reduce код. видимо если надумаем переползать на спарк2, то наверно нам стоит и ориентироваться на sqlContext.

dbms_photoshopВ итоге та задача была решена в Spark как раз с применением обоих подходов.

честно говоря я не фанат "элегантных" sql, которые может прочесть лишь суровый ораклойд, не одну собаку съевший на аналитике. подозреваю спарк с применением двух подходов мне понравиться больше.

dbms_photoshopPS. А почему ты сидишь по серым ником?
лет 15 назад были зачотные баталии в "сравнения субд" и модератор был дурковатый. зато серые ники он забанить не смог :)
модератора сменили, но на всякий ...
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39479906
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!мы пришли к тому, что пишем sql под импалу, что бы проверять map-reduce кодПри чем здесь вообще map-reduce?
Это другой уровень абстракции. Безусловно надо понимать как работает движок, но как было замечено даже для Hive можно активировать три разных движка.
Ну и вы везучие если у вас логика достаточно проста, что можно писать запросы совместимые в Hive и Impala.
Yo.!честно говоря я не фанат "элегантных" sql, которые может прочесть лишь суровый ораклойдДело не столько во владении SQL сколько в отличной приспособленности SQL движков биг дейты для аналитики.
Ну и лаконичность записи упрощает поддерживаемость (если прокачать свою суровость).
Плюс логику можно вынести во view in Impala и аналитики могут играться с этим набором по своему усморению.
Yo.!лет 15 назад были зачотные баталии в "сравнения субд" и модератор был дурковатый. зато серые ники он забанить не смог :)
модератора сменили, но на всякий ...Текущего модератора SergSuper тоже адекватным и объективным я никак не назвал бы.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39479986
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopПри чем здесь вообще map-reduce?
Это другой уровень абстракции. Безусловно надо понимать как работает движок, но как было замечено даже для Hive можно активировать три разных движка.
Ну и вы везучие если у вас логика достаточно проста, что можно писать запросы совместимые в Hive и Impala.

не, мы не пишем совместимые запросы. мы пишем руками обычные map-reduce, никак не связанные с Hive. и вот что бы проверить, что эти нагромождения жаба классов это то, что нам заказывали, пришли к тому, что еще и рисуем sql под импалу, что бы результат обоих подходов сверить. плюс эти sql понятны аналитикам и наша документация.
видимо со спарком все можно будет делать существенно проще, если он действительно работает хотя на 25% от того как обещают.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480016
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!dbms_photoshopПри чем здесь вообще map-reduce?
Это другой уровень абстракции. Безусловно надо понимать как работает движок, но как было замечено даже для Hive можно активировать три разных движка.
Ну и вы везучие если у вас логика достаточно проста, что можно писать запросы совместимые в Hive и Impala.

не, мы не пишем совместимые запросы. мы пишем руками обычные map-reduce, никак не связанные с Hive. и вот что бы проверить, что эти нагромождения жаба классов это то, что нам заказывали, пришли к тому, что еще и рисуем sql под импалу, что бы результат обоих подходов сверить. плюс эти sql понятны аналитикам и наша документация.
видимо со спарком все можно будет делать существенно проще, если он действительно работает хотя на 25% от того как обещают.жесть какая то
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480308
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!не, мы не пишем совместимые запросы. мы пишем руками обычные map-reduce, никак не связанные с Hive. и вот что бы проверить, что эти нагромождения жаба классов это то, что нам заказывали ...То что вы делаете вам лучше перестать делать как можно быстрее за исключением случая когда зарплата зависит от числа строк кода.

Какие у вас данные, кстати? structured, unstructured, semi-structured?

Мы используем хадуп как полностью реляционное хранилище, хотя он не для этого изначально задумывался.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480324
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!dbms_photoshopПри чем здесь вообще map-reduce?
Это другой уровень абстракции. Безусловно надо понимать как работает движок, но как было замечено даже для Hive можно активировать три разных движка.
Ну и вы везучие если у вас логика достаточно проста, что можно писать запросы совместимые в Hive и Impala.

не, мы не пишем совместимые запросы. мы пишем руками обычные map-reduce, никак не связанные с Hive. и вот что бы проверить, что эти нагромождения жаба классов это то, что нам заказывали, пришли к тому, что еще и рисуем sql под импалу, что бы результат обоих подходов сверить. плюс эти sql понятны аналитикам и наша документация.
видимо со спарком все можно будет делать существенно проще, если он действительно работает хотя на 25% от того как обещают.
жесть какая-то
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480388
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopТо что вы делаете вам лучше перестать делать как можно быстрее за исключением случая когда зарплата зависит от числа строк кода.

дело не в строках, дело в цене ошибки. мы не картошку или твиты считаем и пришли к тому, что проще всего полноценно оттестировать - написать sql. задачи разные бывают.

dbms_photoshopКакие у вас данные, кстати? structured, unstructured, semi-structured?
Мы используем хадуп как полностью реляционное хранилище, хотя он не для этого изначально задумывался.
да, почти все хорошо структурировано, стекается с реляционных баз.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480401
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!дело не в строках, дело в цене ошибки.Это никак не объясняет смысл вашего велосипедостроения.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480510
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopYo.!дело не в строках, дело в цене ошибки.Это никак не объясняет смысл вашего велосипедостроения.
ну если меряться велосипедами то все же это ваше натягивание hive и импалу на ETL много ближе к велосипедостроению. а у нас смысл в дополнительном уровне тестирования, все чудеса не получается покрыть юнит и регрешен тестами.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480538
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!,

Ты видимо не понимаешь базовых вещей и не захотел почитать документ, что я вчера давал Spark SQL: Relational Data Processing in Spark .
Документу два года, но основные положения актуальны.

Есть Spark для него можно писать логику либо на SQL либо с использованием programming api, если на SQL задача не решается либо решается неэффективно. Кто-то может предпочитать более программный подход из-за любви к unit tests, из-за плохого владения SQL или по иным причинам.

можно расширять функциональность сторонникими продуктами ( Apache Spark Shared RDDs Powered by GridGain )
можно использовать другие инструменты, которые предоставляют высокоуровневый API и не париться как "параллелятся джобы"
можно даже написать свой движок один раз (но возникает вопрос не лучше ли подправить уже то, что есть учитывая что код открыт) и писать бизнес логику на более высокоуровневом DSL
...
есть случаи даже когда компания написала свой inhouse cluster с нуля и они пишут логику используя свой конструктор.
У них свой аналог yarn, свой аналог spark, свой аналог HDFS etc.

Но если деятельность состоит в том, что "мы пишем руками обычные map-reduce" - это клиника.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480567
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

я тот документ читал в прошлом году до выхода 2.0. я знаю как работает спарк.

попробуй сосредоточится и вникнуть в то что тебе говорят.
так вот, суть не в эффективности, суть в тестировании. нам пригодился SQL как другой способ описания логики, который позволяет в рамках финального тестирования сравнить результаты двух подходов. в спарке будет нагромождение датафреймов, которые мы все равно будем пытаться перепроверять дублированным SQL скриптом.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480570
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!попробуй сосредоточится и вникнуть в то что тебе говорят.Тебя понимают настолько насколько связно ты умеешь выражаться.
dbms_photoshopмы не пишем совместимые запросы. мы пишем руками обычные map-reduce, никак не связанные с Hive.Пиши себе руками map-reduce.
Я знал даже альтернативно креативных они вместо joins in Oracle SQL выгружали данные на app srv и соединяли наборы в java.
Удачи.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480581
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!dbms_photoshopпропущено...
Это никак не объясняет смысл вашего велосипедостроения.
ну если меряться велосипедами то все же это ваше натягивание hive и импалу на ETL много ближе к велосипедостроению. а у нас смысл в дополнительном уровне тестирования, все чудеса не получается покрыть юнит и регрешен тестами.Можно пояснить следующие вещи:
1) Зачем вы делаете все на map-reduce? Это труднее и намного медленнее, чем та же Impala?
2) Что у вас за отрасль бизнеса такая?
3) Зачем вам вообще распределенные вычисления для нескольких ТБ реляционных данных?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480585
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopYo.!попробуй сосредоточится и вникнуть в то что тебе говорят.Тебя понимают настолько насколько связно ты умеешь выражаться.
dbms_photoshopмы не пишем совместимые запросы. мы пишем руками обычные map-reduce, никак не связанные с Hive.Пиши себе руками map-reduce.
Я знал даже альтернативно креативных они вместо joins in Oracle SQL выгружали данные на app srv и соединяли наборы в java.
Удачи.
буду писать, этим я отличаюсь от индуса, который ничего кроме SQL не знает и поэтому все задачи пытается решить единственным ему знакомым инструментом. в суровой действительности клиника это вот так болеть
dbms_photoshopИ наиболее раздражающее, что одни и те же действия выполняются по разному, что может делать SQL код несовместимым.
Например получение дня (Sunday, Monday etc) для Impala будет выглядеть dayname(column), а для Hive - date_format(column, 'EEEE'). И это один из примеров, которых сотни.
Можно использовать UDF, но их надо отдельно подключать в Hive и Impala и в Impala могут возникнуть трудности с правами.
Хотя опять таки плюсом является, что UDF можно программировать на C.
Касательно возможностей SQL - у Impala они богаче, то есть, если запрос выполняется в Hive, то скорее всего выполнится и в Impala, но не всегда. :)
hive с mr движком генерит совершенно кривожопые map-reduce, а импала вовсе не предназначена под тяжелые ETL, но поскольку чувак ничего кроме SQL не знает, болезнь продолжает прогрессировать.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480596
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!буду писать, этим я отличаюсь от индуса, который ничего кроме SQL не знает и поэтому все задачи пытается решить единственным ему знакомым инструментом. в суровой действительности клиника это вот так болеть
dbms_photoshopИ наиболее раздражающее, что одни и те же действия выполняются по разному, что может делать SQL код несовместимым.
Например получение дня (Sunday, Monday etc) для Impala будет выглядеть dayname(column), а для Hive - date_format(column, 'EEEE'). И это один из примеров, которых сотни.
Можно использовать UDF, но их надо отдельно подключать в Hive и Impala и в Impala могут возникнуть трудности с правами.
Хотя опять таки плюсом является, что UDF можно программировать на C.
Касательно возможностей SQL - у Impala они богаче, то есть, если запрос выполняется в Hive, то скорее всего выполнится и в Impala, но не всегда. :)
hive с mr движком генерит совершенно кривожопые map-reduce, а импала вовсе не предназначена под тяжелые ETL, но поскольку чувак ничего кроме SQL не знает, болезнь продолжает прогрессировать.Как быстро ты скатился в говно. А так все хорошо начиналось "отличный пост, хоть в FAQ клади !".
Аргумент про твое превосходство над индусом отдельно улыбнул.

Про хреновые перфоманс hive + mr - это известный факт для тех кто в теме, но я несколько раз написал про разные движки. И мы тут в нашем колхозе не используем hive + mr.
Я не говорю про применение Impala для тяжелого ETL, я говорил про совместимость.

Если уж вспоминать людей из солнечной страны, то среди них популярно начать делать костыли и герерировать тонны говнокода без попытки разобраться что делает существующий инструментарий. Ты следуешь именно по этому пути.

Плюсы можно найти и в твоей monkey job. На интервью часто просят написать map reduce на scala, я уверен ты с этим справишься блестяще.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480623
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander RyndinМожно пояснить следующие вещи:
1) Зачем вы делаете все на map-reduce? Это труднее и намного медленнее, чем та же Impala?

потому, что импала не предназначена под процессинг данных. ее задумывали выдавать подготовленные данные по jdbc, а на тяжелом процессинге, она просто начинает дохнуть. MR можно практически гарантировать время старта джоба, и время окончания, а с импалой никогда не угадаешь когда ждать ответ и будет ли он.
импала хороша как интерфейс к hive табличкам, но не процессинг.

Alexander Ryndin2) Что у вас за отрасль бизнеса такая?

финансы

Alexander Ryndin3) Зачем вам вообще распределенные вычисления для нескольких ТБ реляционных данных?
заместить оракл. по большому счету пара ТБ это потому, что раньше задачи dwh и аналитики решали ораклы, а существенно больше обрабатывать не могли в рамках своих лицензий. наверху решили, что вкладываться в лицензии дорого ...

dbms_photoshopПро хреновые перфоманс hive + mr - это известный факт для тех кто в теме, но я несколько раз написал про разные движки. И мы тут в нашем колхозе не используем hive + mr.
Я не говорю про применение Impala для тяжелого ETL, я говорил про совместимость.

т.е. ты знаешь, что кроме спарка ни один движек под хайв не годиться под процессинг данных, но поскольку моск с горошину ничерта нового не способен изучить, ты до победного будешь заниматься натягиванием SQL на бигдата.

dbms_photoshopПлюсы можно найти и в твоей monkey job. На интервью часто просят написать map reduce на scala, я уверен ты с этим справишься блестяще.
дело не в том, что я и на скале справлюсь. дело в том, что я по разному могу, а ты на любую задачу SQL натягиваешь.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480626
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!движек под хайв не годитьсяЩто нащальника? Помедленнее, я записываю.
А про tez ты слышал? А то ты, видимо, читаешь мои сообщения через слово.

Yo.!поскольку моск с горошину ничерта нового не способен изучить, ты до победного будешь заниматься натягиванием SQL на бигдата.
Yo.!а ты на любую задачу SQL натягиваешь.


Ты не нервничай так, серенький, внимательнее лучше читай что я пишу.
dbms_photoshopМой подход - реализовывать по возможности на SQL там где этот инструмент уместен и эффективен.
В иных случаях помогает "a bit of scala coding".
Твои фантазии про прогрессирование болезни, размер моего мозга, уровень владения инструментами и все прочее выглядят глупо и дешево.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480635
NePZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!дело не в строках, дело в цене ошибки. мы не картошку или твиты считаем и пришли к тому, что проще всего полноценно оттестировать - написать sql. задачи разные бывают
Если цена ошибки ДЕЙСТВИТЕЛЬНО велика и Вы работаете со структурированными данными, использовать стек Hadoop для чего-то сложнее простой агрегации ...может быть опрометчиво.
Впрочем, это в России такие решения не инженеры принимают и даже не менеджеры среднего звена. Было в советском лексиконе такое прикольное слово "волюнатаризм"...Хрущева уже давно нет, но дело его живет (это когда после визита первого лица в США в СССР решили кукурузу сеять вблизи Полярного Круга (условно), впечатлившись тем, насколько это полезный продукт)

dbms_photoshopМы используем хадуп как полностью реляционное хранилище, хотя он не для этого изначально задумывался.
[/quot]
Если данных меньше пары сотен терабайт - это извращение. Если меньше пары петабайт - не факт, что оправдано экономически в крупной компании. С учетом ВСЕХ издержек и возможностей использования этих данных для внедрения сложной аналитики в операционный контур бизнеса (банально, там есть такая вещь как SLA, а хадупопепелацы даже после обработки напильником не сказать, что очень стабильны или отличаются высокой транзакционностью и т.д.)
А если данных СТРУКТУРИРОВАННЫХ сотни терабайт или петабайты, а организация небольшая, то не очень понятно, откуда это обилие данных у этой конторы
ФНС в Hadoop сырые данные хранит (детальные данные бухгалтерских книг), но у них задач с этими данными что-то хитрое делать в этом Hadoop не стоИт (да и вообще пока не стоит - некому ни ставить такие задачи, ни делать).
Да и после очистки они все в Oracle загоняют обычно.
В двух госбанках делают то, что Вы описали (испрользование Hadoop как платформы для DWH), но дальше "смотрите, как мы умеем", прогресс там не пошел, как не прижились там в свое время MPP системы в качестве DWH. Но проблемы там не Хадупе или Терадате ИМХО
Сейчас, впрочем, в одном из госбанков решили двигаться в сторону связки Hadoop и Oracle, посмотрю, чем закончится. Учитывая последние достижения Oracle, выглядит по крайней мере здраво для некоторых задач. И не очень дорого, если уже есть годовой абонемент от Oracle (у крупных банков он обычно есть)

Что до прочего, равняться на ту контору, которую мы все знаем, и которая выпилила "свой inhouse cluster с нуля и они пишут логику используя свой конструктор. У них свой аналог yarn, свой аналог spark, свой аналог HDFS etc" не стоит, если Вы не другая ИТ компания мирового уровня.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480644
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NePZВпрочем, это в России такие решения не инженеры принимают и даже не менеджеры среднего звена.Я не в России, а в Британии, но здесь тоже финальное решение касательно платформы для хранилища может приниматься весьма НЕкомпетентными людьми. Потом начинаются попытки на Белазе участвовать в ралли. Для технических специалистов может быть увлекательно кто любит трудные вызовы и острые ощущения. :)
NePZЕсли данных меньше пары сотен терабайт - это извращение.
...
бла бла бла
...
если Вы не другая ИТ компания мирового уровня.Не буду судить мой колхоз мирового уровня или нет, но сферические рассуждения в вакууме с категоричными выводами от ноунейма на форуме безусловно заставят всех еще раз взвесить свои решения. :)
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480654
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!,

Чтоб вернуть диалог в конструктивное русло вернемся к конкретной задаче.
Если рассмотреть два пункта из моей задачи Пятничная задачка. Смотрим назад. , то можно написать такое SQL решение.
данные
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create table t as
select 1 position, id, case when column_value = 'o' then 'original' else 'adjusted' end type, value from
(select 1 position, 10 id, 'o' column_value, 100 value
union all select 1 position, 20 id, 'o' column_value, 200 value
union all select 1 position, 30 id, 'a' column_value, 300 value
union all select 1 position, 40 id, 'o' column_value, 400 value
union all select 1 position, 50 id, 'a' column_value, 500 value
union all select 1 position, 60 id, 'o' column_value, 600 value
union all select 1 position, 70 id, 'o' column_value, 700 value
union all select 1 position, 80 id, 'a' column_value, 800 value
union all select 1 position, 90 id, 'a' column_value, 900 value
union all select 1 position, 100 id, 'o' column_value, 1000 value
union all select 1 position, 110 id, 'a' column_value, 1100 value
union all select 1 position, 120 id, 'o' column_value, 1200 value
union all select 1 position, 130 id, 'a' column_value, 1300 value
union all select 1 position, 140 id, 'o' column_value, 1400 value
union all select 1 position, 150 id, 'a' column_value, 1500 value) t


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
var q =
s"""
select t.id,
       t.type,
       t.value,
       case when type = 'adjusted' then max(case when type = 'original' then value end) over (partition by position, grp) end prev_o_value,
       case when type = 'adjusted' then max(case when type = 'original' then shift_n end) over (partition by position, grp) end prev_shift_n_o_value
  from (select t.*,
               case when type = 'original'
                    then lag(value, 2) over (partition by position order by case when type = 'original' then 0 else 1 end, id)
               end shift_n,
               sum(case when type = 'original' then 1 end) over (partition by position order by id) grp
          from t) t
order by id
"""

val df = spark.sql(q).show(truncate = false)


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
scala> val df = spark.sql(q).show(truncate = false)
+---+--------+-----+------------+--------------------+
|id |type    |value|prev_o_value|prev_shift_n_o_value|
+---+--------+-----+------------+--------------------+
|10 |original|100  |null        |null                |
|20 |original|200  |null        |null                |
|30 |adjusted|300  |200         |null                |
|40 |original|400  |null        |null                |
|50 |adjusted|500  |400         |100                 |
|60 |original|600  |null        |null                |
|70 |original|700  |null        |null                |
|80 |adjusted|800  |700         |400                 |
|90 |adjusted|900  |700         |400                 |
|100|original|1000 |null        |null                |
|110|adjusted|1100 |1000        |600                 |
|120|original|1200 |null        |null                |
|130|adjusted|1300 |1200        |700                 |
|140|original|1400 |null        |null                |
|150|adjusted|1500 |1400        |1000                |
+---+--------+-----+------------+--------------------+

df: Unit = ()

scala>

Если рассмотреть третий пункт там, то это уже будет НЕ SQL решение, но я НЕ пишу вручную map reduce.

Ты же сможешь продемонстировать как тру-программисты для реализации этой логики пишут "руками обычные map-reduce"?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480749
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NePZЕсли цена ошибки ДЕЙСТВИТЕЛЬНО велика и Вы работаете со структурированными данными, использовать стек Hadoop для чего-то сложнее простой агрегации ...может быть опрометчиво.
Впрочем, это в России такие решения не инженеры принимают и даже не менеджеры среднего звена. Было в советском лексиконе такое прикольное слово "волюнатаризм"...Хрущева уже давно нет, но дело его живет (это когда после визита первого лица в США в СССР решили кукурузу сеять вблизи Полярного Круга (условно), впечатлившись тем, насколько это полезный продукт)

печально слышать, но кантора в которой у меня проект в постсоветском пространстве не работает.

NePZЕсли данных меньше пары сотен терабайт - это извращение. Если меньше пары петабайт - не факт, что оправдано экономически в крупной компании.

это лишь распространенное заблуждение. дело не в размерах терабайтов, все дело в деньгах. основная причина отказа от оракла - бабло. компании почуяли, что хадуп достаточно стабильно работает и замена на нечто бесплатно масштабируемое реальна.
опыт России, мягко говоря не показателен, в европе дохрена банков размером со всю банковскую систему России живут счастливо с хадупом. и тоже не потому, что в оракл не вмещались, а потому, что оно работает за меньшие деньги.

что касается стабильности, у нас потому и map-reduce, потому, что работает как часы и укладывается в SLA. все эти движки для hive оно под процессинг данных не задумано, реальная альтернатива лишь спарк. и не через задницу hive, а spark job. но спарк 1.6 cloudera честно позиционировала как эксперементальная дребедень. спарк 2.0 cloudera зарелизила лишь прошлой осенью с длинющим списком несовместимостей , даже avro либа не работала. пару месяцев назад выложили версию 2.1, который выглядит первым релизом, который имеет смысл щупать. т.е. спарк еще пол года назад не был альтернативой.

dbms_photoshop,
а смысл ? ты сам map-reduce считай написал. в пятом посте pl/sql код, его аналог на жаве был бы у меня на редюсере. причем аналог с лямдами раза в два еще бы укоротился. маппер в данном примере просто все на единсвенный редюсер перенаправляет, но в реале там явно ид клиента еще есть, тогда маппер должен раскидывать на редюсеры по ид клента.
в этом и прелесть map-reduce, все дубово, очень просто.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480770
NePZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!это распространенное заблуждение. дело не в размерах терабайтов, все дело в деньгах. основная причина отказа от оракла - бабло

Все, о чем я говорю - про бабло. При объемах порядка сотен терабайт и меньше можно спокойно прожить без MPP и строить решение на midrange железе, например, при необходимости используя In-memory. Для крупной организации там ценник достаточно небольшой, чтобы заморачиваться по этому поводу. Да и TCO не только из стоимости лицензий складывается, не стоит про это забывать.
При больших объемах данных (порядка петабайтов) вполне можно жить на MPP и более дорогом железе, но при объемах выше нескольких петабайт ценник на все это становится таким диким, что действительно приходится искать альтернативу.


Yo.!в европе дохрена банков размером со всю банковскую систему России живут счастливо с хадупом. и тоже не потому, что в оракл не вмещались, а потому, что оно работает за меньшие деньги


В Европе меньше 20 банков, которые по размеру активов превосходят крупнейший российский банк. И около дюжины, которые по размеру активов превосходят активы топ-10 РФ, но хадуп там далеко не везде есть. Банки типа HSBC даже в Европе стоят особняком.

Плюс как там идет в реале мне сказать сложно, но в банках на WS переход на связки типа Hadoop+R (и велосипеды на Java) идет не настолько гладко, как коллегам бы хотелось и люди все больше смотрят в сторону чего-то типа Hadoop+H2O и присматриваются к другим технологиям, которые бы позволили лопатить имеющиеся у них данные.
От себя замечу, что в США часто стимулом становится не только стоимость лицензий для ХРАНЕНИЯ данных, но и стоимость лицензий для анализа данных и внедрения аналитики. Потому что на данных там реально делают бизнес, но SAS или S+ стоят конских денег, особенно отраслевые solution на их основе (где стоимость лицензии вендоры любят привязывать к прибыли/капитализации), да и специалисты, которые с этими продуктами работают недешевые. А R на Западе по всех университетах преподают, где статистика в каком-то виде есть, и стоят такие спецы НАМНОГО дешевле. Так что у всей этой движухи больше измерений
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480773
NePZВсе, о чем я говорю - про бабло.

парень, да за версту видно, что ты ни разу не программист и по существу сказать тебе нечего
словесный понос про петабайты, банки и активы здесь никому не интересен
будешь надувать щеки перед шефом, а здесь технические специалисты разговаривают
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480775
Бумбараш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NePZЕсли данных меньше пары сотен терабайт - это извращение. Если меньше пары петабайт - не факт, что оправдано экономически в крупной компании.
Вам надо в работе дальше за Булаву и Россию тереть. Лучше получается.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39480963
NePZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работник языкомпарень, да за версту видно, что ты ни разу не программист
Хм..спасибо кэп.

БумбарашВам надо в работе дальше за Россию тереть. Лучше получается.
Вы много примеров видели в России за пределами интернет-компаний (от поисковиков до DMP-платформ), когда системы на основе Hadoop РЕАЛЬНО генерируют бизнес-value в сколь-либо заметном масштабе? А не выступают в роли игрушки или, в лучшем случае, вспомогательного инструмента?
Тема зацепила тем, что аргументы Yo.! мне сильно напомнило, что я слышу от людей из родного ИТ.
Подход dbms_photoshop куда более взвешенный. Но проблема в том, что есть 4 разных категории пользователей, без которых зарабатывание денег не взлетит. С сильно разными навыками и задачами:
1. Служба качества данных
2. Аналитики отчетности (во многих организациях 1 и 2 группы часто не разделяются)
3. Специалисты по разработке моделей (DS, если угодно)
4. Инженеры данных
А дальше начинаются тонкости, из-за которых выработать единый подход в принципе не получится.
Частный пример. На разработку модели отводится редко больше 5 рабочих дней чистого времени. В рамках этой активности DS генерирует несколько сотен фичей (по сути каждая фича это отдельная гипотеза, но не суть). Прикол в том, что за это время даже человек, который умеет бодро писать MapReduce, не успеет их закодить банально из-за трудоемкости процесса.
Привет Hive (или Pig, или что есть). Но тут начинается вторая проблема. Все эти движки собственно SQL поддерживают довольно ограниченно (аналитические функции, например, обычно недоступны, да и в join какие-то виды сравнений могут не поддерживаться) и некоторые вещи тупо на этих движках сделать нельзя от слова совсем, приходится или шаманить с расширенными возможностями (некоторые из которых dbms_photoshop демонстрирует, но которыми далеко не все владеют), или писать те самые MapReduce, подряжая иногда для этого инженеров данных.
Впрочем, это тоже не самая большая проблема. Грубо говоря, какая черт разница, насколько крут Spark SQL, если в MlLib нет нужного метода и ты модель не можешь сделать нормально? А если тебе данные один черт тащить на локальный нод для разработки модели, то зачем тогда вообще извращаться с работой в кластере, если фичи можно будет на той же локальной ноде Pandas сделать? В итоге все использование этих SQL-движков при разработке моделей нередко сводится к семплированию и агрегации данных, перед тем, как ты их на локальную ноду потащишь. Да, потом тебе качество этой модели надо на всех данных проверить доступных, и там иногда приходится фичи делать через написание MapReduce, но если у тебя в процессе разработки модели могут быть сотни фичей, то в самой модели их будут десятки, а того, что нельзя сделать через SQL-движки может быть всего полдюжины, и это уже вполне посильная задача.
Опять-таки, инструменты для работы с движками. Все четко представляют разницу в уровне компетенции среднего специалиста по очистке данных и инженера данных? И разницу в задачах, которые они решают? Инженера данных можно(и нужно) привлекать к тестированию на этапе приемки, но припахать к ежедневной монотонной выверке данных их нереально - при обилии такой "интеллектуальной работы" они сбегут, даже если это щедро оплачивать (а там далеко не все можно автоматизировать). С другой стороны, специалистам по подготовке отчетов редко требуются какие-то опции, которые недоступны через hue, на кой им shell+putty?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39481162
мигель1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. что такое хадуп вроде разобрались. теперь надо понять где его можно и нужно применять )
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39492973
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мигель1Т.е. что такое хадуп вроде разобрались. теперь надо понять где его можно и нужно применять )
хорошо подходит для хранения бесполезных данных.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39493572
NePZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durakмигель1Т.е. что такое хадуп вроде разобрались. теперь надо понять где его можно и нужно применять )
хорошо подходит для хранения бесполезных данных.

1. Хорошо подходит для хранения логов и телеметрии. Данных там очень много. Мы в пилотах пока работаем с логами, где объемы сырых данных порядка десятка терабайт за месяц (от одной системы), но если снимать эти данные раз в несколько секунд, а не минуту, брать расширенный набор данных или брать еще и телеметрию, то там отдельные системы и сейчас по паре петабайт за год генерируют, а может быть и больше десятка.
Год это хранить и не нужно имхо, но все равно очень приличные объемы получаются. Поэтому одна из задач - определение того, с какой глубиной эти данные реально нужны, как эти данные "схлопывать", какие именно данные и с какой частотой надо собирать, чтобы value было больше, чем затраты на сбор, хранение и анализ
Зачем: задачи повышения надежности ЦОД, оперативное выявление сбоев в процессинге или работе банкоматной сети.
В перспективе - повышение эффективности автострахования (мониторинг работы агрегатов автомобиля для снижения стоимости ремонта, анализ манеры вождения для справедливого установления цены автостраховки, детектирование ДТП и т.д.)
Задачи интернета вещей короче. И вот тут реально без хадупообразия не обойтись.

2. Хранение сырых данных по транзакциям. Объемы сырых данных сравнительно небольшие, порядка сотен терабайт в год, если вообще все брать (включая цифровой профиль устройства, с которого осуществляется транзакция) и по всем каналам (CP, CNP) и не имеют тенденции к сильному росту (и так уже полстраны через нас идет), но в Oracle без MPP даже на hi-end железе (которое у нас есть и стоит как чугунный мост) такое ворочать сейчас не очень... комфортно (и просто дорого). После "схлопывания" данных (реально то все на агрегатах считается), в Oracle эти данные крутить удобнее (или как минимум - привычнее) и стабильнее (что для прома куда важнее), но сырец тоже надо где-то держать.
Я сейчас ратую за то, чтобы нам дали к Oracle свой Hadoop прикрутить, т.к. по предварительным оценкам работать все будет более-менее: раз в неделю (а чаще для большинства задач нафиг надо) пересчитываем агрегаты, дальше в Oracle и все как обычно (и где все давно работает как часы).
Плюс есть надежды, что после перехода на 12 версию и использования In Memory cамые нужные вещи в Oracle вообще летать будут.
Год напильником поработаем, можно будет и раз в день в Hadoop все пересчитывать. А там год-другой и видно будет, может, и без Oracle можно будет прожить (или без Hadoop, если мощности железа будут расти, а цена падать - война маневр подскажет, зачем заранее загадывать)
А вот текущая идея СРАЗУ все делать в Hadoop+GridGain, причем считать все чуть ли не онлайн, мне ОЧЕНЬ не нравится. Причем по многим причинам. Включая ту, что люди, которые сейчас официальным Hadoop занимаются, никогда в пром не выводили системы с жесткими SLA и высокой ценой сбоев. И то, что в GridGain модели на обсчет пока вообще никто в мире не ставил.
Ну просто опции такой нет. А бравурные заявления, что де мы, да сами, да одним броском парашютно-десантной дивизии...Я уже насмотрелся, как одним броском BPM Pega внедряли. Четвертый год идет, бизнес на Excel просится.
Есть простое правило: моделирование -> макеты -> стендовые испытания -> прототип -> заводские испытания -> опытная партия -> независимая приемка на государственных испытаниях -> мелкая серия + конструкторское сопровождение -> обкатка и выявление детских болезней -> подготовка к крупносерийному производству +обучение персонала-> тиражирование -> массовое производство. ИТ, не ИТ, самолеты, пепелацы - один шайтан разница. Жизненный цикл производства - он и в Африке жизненный цикл
И пропуск хотя бы одного этапа не проактивность-креативность, а саботаж

Зачем: поведенческие скоринговые модели на транзакционных данных для оценки кредитного риска, некоторые задачи событийного маркетинга, не требующие жесткого онлайн (а это почти все крупные покупки и все покупки, где клиент демонстрирует силу привычки, которая вторая натура), разработка персонализированных финансовых сервисов и анализ потребностей клиентов, model-based AML, пилотирование антифрод в процессинге (разработка моделей на ретроспективных данных для оценки эффективности). Последние две опции - если смежникам захочется. Сделать за других мы что-то можем, но вот ХОТЕТЬ за других мы еще как-то не научились.

3. Хранение аудиофайлов и оцифированных в текст записей. Почему: Oracle под такое не заточен.
Зачем: анализ и маршрутизация жалоб клиентов, повышение эффективности удержания розничных клиентов, оценка успешности новых продуктов.
P.S. вероятность, что сие взлетит и даст какой-то value, низкая. Если ответственные пОциенты не хотят (работать руками, идти на компромиссы, напрягаться), наука бессильна. Как говорил классик, основная привилегия монополиста - право не напрягаться. Классик был прав.

4. Хранение данных о том, кто как мышкой водит и куда пальцем в экран смартофона тыкает. Почему: Oracle под это не заточен
Зачем: при правильном использовании позволяет улучшить UX и повысить конверсию, чтобы это не значило. При ставке на цифровые каналы, задача далеко не последней степени важности.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39493684
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopТы же сможешь продемонстировать как тру-программисты для реализации этой логики пишут "руками обычные map-reduce"?

вспомнил про пост, побыстрому нарисовал mapreduce для той "пятничной задачки"
маппер
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class ParquetMapper extends Mapper<LongWritable, GenericRecord, Text, AvroValue<GenericRecord>> {
    private final Text outputKey = new Text();
    private final AvroValue<GenericRecord> outputValue = new AvroValue<GenericRecord>();

    @Override
    protected void map(LongWritable key, GenericRecord value, Context context) throws IOException, InterruptedException {
        outputKey.set(String.valueOf(value.get("position")));
        outputValue.datum(value);
        context.write(outputKey, outputValue);
    }
}


редюсер
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
public class ParquetReducer extends Reducer<Text, AvroValue<GenericRecord>, Void, Text> {
    private static final byte shift = 2 ;

    private TreeMap<Integer, AbstractMap.SimpleEntry<String, Integer>> rows = new TreeMap<Integer,AbstractMap.SimpleEntry<String, Integer>>();
    List<Integer> queue = new LinkedList<Integer>();
    private String adj = "";
    private int lastValue = -1;


    @Override
    protected void reduce(Text key, Iterable<AvroValue<GenericRecord>> values, Context context) throws IOException, InterruptedException {
        for (AvroValue<GenericRecord> value : values) {
            rows.put((Integer) value.datum().get("id"),
                      new AbstractMap.SimpleEntry(value.datum().get("type"), value.datum().get("value"))) ;
        }

        for(Map.Entry<Integer, AbstractMap.SimpleEntry<String, Integer>> entry : rows.entrySet()) {
            AbstractMap.SimpleEntry<String, Integer> rowData = entry.getValue();

            if (rowData.getKey().equals("original")) {
                lastValue = rowData.getValue() ;
                queue.add(lastValue) ;
                adj = "" ;
            } else {
                adj = " " + String.valueOf(lastValue);
                if (queue.size()- shift >0) {
                    adj = adj + " " + queue.get(queue.size()-shift).toString() ;
                }
            }
            Text output = new Text(entry.getKey()+" "+rowData.getKey() + " " + rowData.getValue() + adj);

            context.write(null, output );
        }
    }
}



результ на том крошечном датасете
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
[yarn@sandbox map-reduce]$ hadoop fs -cat /out/part-r-00000
10 original 100
20 original 200
30 adjusted 300 200
40 original 400
50 adjusted 500 400 200
60 original 600
70 original 700
80 adjusted 800 700 600
90 adjusted 900 700 600
100 original 1000
110 adjusted 1100 1000 700
120 original 1200
130 adjusted 1300 1200 1000
140 original 1400
150 adjusted 1500 1400 1200

как видим mapreduce код примитив, студент последних курсов легко решит такую "пятничную" задачку в mapreduce за 15-30 минут, тогда как sql код для спарка уже из разряда пятничных задачек, и пишется не за 15 минут и явно не студентом. дальше mapreduce решение в данном случае легко сопровождается и расширяется - пункт 3) с подсчетом "редыдущих original так чтоб их сумма не превышала заданный лимит" добавляется за 5 минут, в решении со спарком как я понимаю придется все нафиг переписывать с нуля, отказываясь от декларативного sql и рисовать те же циклы, что у меня в редюсере.
т.е. как раз эта задачка показывает что задачи у всех разные, и кое что в mapreduce много удобней делать.

что касается перфоменса, то померить в спарке 2.1 не удалось. спарк на чуть больших объемах вываливается с java.lang.OutOfMemoryError: GC overhead limit exceeded, надо гуглить где и что можно подкрутить. но уже видно, что аналитика у спарка выжирает память по черному, ведь простые агригатные запросы бегают по этой же табличке (паркет файл на 615 мб) хорошо.

тестировал я самостоятельно сгенеренном паркет файлике, 615 мб. сгенерил 10к positions и для каждого по 10к id's. спарк пока вылетает, mapreduce с 5 маперами и 1 reducer исправно прожувал и записал ответ в txt за 16 минут.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39493774
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Update:
получилось запустить спарковый SQL на той табличке вот так
spark-sql --num-executors 3 --executor-memory 4G --executor-cores 6 --driver-memory 1G

insert into mycsvtable select ... и тот SQL с аналитикой, заняло 5.5 минут, в вараианте с mapreduce выставил 5 маперов и 7 редюсеров, заняло 7 минут.
т.е. разница в скоростях не принципиальны.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39494239
мигель1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!dbms_photoshopТы же сможешь продемонстировать как тру-программисты для реализации этой логики пишут "руками обычные map-reduce"?
.

На баше писали?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39504679
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Три года назад в Амазоне подсадили на вот это SQL Workbench/J . Оказался очень приятным в использовании и качественным инструментом.

Что касается SQL vs что-то там еще. SQL используем как и положено для Ah-Hoc'a и отчетов. ETL стараемся делать на DataFrame API + Shapeless.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39504754
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ApexТри года назад в Амазоне подсадили на вот это SQL Workbench/J . Оказался очень приятным в использовании и качественным инструментом.

Что касается SQL vs что-то там еще. SQL используем как и положено для Ah-Hoc'a и отчетов. ETL стараемся делать на DataFrame API + Shapeless.
Spark/DataFrame на амазоне ? Amazon EMR или виртуалки со своим дистрибутивом ? как давно запустили spark ?

в клоудере spark выглядит по гланды кастрированным. даже spark-sql утилита вырезана
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39505344
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!Spark/DataFrame на амазоне ? Amazon EMR или виртуалки со своим дистрибутивом ? как давно запустили spark ?

На данный момент используем AWS EMR, но будет переходить на Qubole, там юзерам чуть поудобнее сделано. Хотя нам для ETL почти без разницы.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39506040
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ApexНа данный момент используем AWS EMR, но будет переходить на Qubole, там юзерам чуть поудобнее сделано. Хотя нам для ETL почти без разницы.
гугл говорит AWS EMR только с лета 2015 начал супортить спарк, подозреваю и у вас спарк совсем свежая история.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39506638
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!ApexНа данный момент используем AWS EMR, но будет переходить на Qubole, там юзерам чуть поудобнее сделано. Хотя нам для ETL почти без разницы.
гугл говорит AWS EMR только с лета 2015 начал супортить спарк, подозреваю и у вас спарк совсем свежая история.
До этого его просто ставили через bootstrap step.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39507687
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи знатоки, подскажите, а Impala выполнят запросы чисто в памяти или может и на диске?
У меня сейчас кластер из 6 машин по 16гб озу в каждой, hive на mr медленно, но уверенно отрабатывает, а impala пару раз подвешивала весь центральную ноду, где меньше всего озу.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39507805
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pihelТоварищи знатоки, подскажите, а Impala выполнят запросы чисто в памяти или может и на диске?
У меня сейчас кластер из 6 машин по 16гб озу в каждой, hive на mr медленно, но уверенно отрабатывает, а impala пару раз подвешивала весь центральную ноду, где меньше всего озу.
может и не в памяти, иначе толку было бы в бигдата от такого. из этих 16, сколько импале то отдано ? небойс все отдано yarn, а не импале.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39507813
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!,

Кластер был в тот момент пустой.
Тестировал запрос с большой группировкой последовательно в разных системах: 2 млрд записей, около 700млн групп.
В оракле запрос падал с темпом, импала вот тоже подвисала даже , хайв отрабатывал.
Потом пробовал на 500 млн записей, хайв был быстрей импалы и оракла (уходил в темп)

Ладно, это уже офтоп, не буду захламлять топик
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39507818
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pihelКластер был в тот момент пустой.

хоть беременный. если все ресурсы отданы yarn, импала будет гарантированно дохнуть. забери ресурсы у yarn и отдай импале.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39508189
мигель1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pihel,

Hive on Tez быстрее Impala?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39508255
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мигель1,

у меня сейчас установлена сборка от клаудеры, в которой нет Tez. Видимо придется поплатиться за свою лень и теперь как-то самому ставить tez
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39508274
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pihelу меня сейчас установлена сборка от клаудеры, в которой нет Tez. Видимо придется поплатиться за свою лень и теперь как-то самому ставить tez
по моим замерам Tez заметно медленее импалы. на клоудере вместо импалы, есть смысл пробовать Spark как движок к Hive (ставить через parcel), Tez на клоудере сомнительная затея.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39508299
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!,

есть ли смысл пробовать spark/impala, если в кластере 6 нод, на каждой по 16ГБ озу ддр2 и хранилище пока что в 2 ТБ ?
Мне кажется маловато озу, MR хотябы точно выполнится и не упадет.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39508310
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pihelесть ли смысл пробовать spark/impala, если в кластере 6 нод, на каждой по 16ГБ озу ддр2 и хранилище пока что в 2 ТБ ?
Мне кажется маловато озу, MR хотябы точно выполнится и не упадет.
смотря, что вы хотите от импалы/spark. мое глубокое имхо ETL тяжелые расчеты делать на импале не стоит, у нас подход map-reduce делает ETL, тяжелые расчеты и готовит широкие таблички, которые импалой смотрят отчетные системы и юзера. таким образом там импале особо негде перетрудиться и тогда она работает довольно стабильно.
спарка в продукции не видел, мы пока лишь приглядываемся. в теории он интегрируется с yarn, интегрируется с Hive, но реальных примеров почти нет. все примерчики примитивны в стиле создать sparkSession, посчитать слова, тогда как в реале нужно изобретать какое-то middleware что бы джобы использовали единый sparkSession. 16гб думаю ему будет вполне хватать, у мня в виртуалке one node 16гб кое что запускается более менее.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39508330
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!,

спасибо, тоже тогда буду пробовать на map reduce (в моем случае hive) посчитать агрегаты, а дальше что-то другое.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39516081
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pihelYo.!,

есть ли смысл пробовать spark/impala, если в кластере 6 нод, на каждой по 16ГБ озу ддр2 и хранилище пока что в 2 ТБ ?
Мне кажется маловато озу, MR хотябы точно выполнится и не упадет.
Ну и спарк не упадет, если все правильно написано.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39516300
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.! map-reduce делает ETL, тяжелые расчеты и готовит широкие таблички, которые импалой смотрят отчетные системы и юзера. .
Скажите, какие отчетные системы юзают импалу?? Самописные или ентерпрайз какие-то?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39516321
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan DurakYo.! map-reduce делает ETL, тяжелые расчеты и готовит широкие таблички, которые импалой смотрят отчетные системы и юзера. .
Скажите, какие отчетные системы юзают импалу?? Самописные или ентерпрайз какие-то?
все какие умеют через Hive, конкретно у нас QlickView, еще с боку видел Tableau тестировали
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39518488
мигель1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!Ivan Durakпропущено...

Скажите, какие отчетные системы юзают импалу?? Самописные или ентерпрайз какие-то?
все какие умеют через Hive, конкретно у нас QlickView, еще с боку видел Tableau тестировали

Прям заинтриговали. клик же все в память поднимает, зачем к нему хейв прикручивать?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39518521
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мигель1Yo.!пропущено...

все какие умеют через Hive, конкретно у нас QlickView, еще с боку видел Tableau тестировали

Прям заинтриговали. клик же все в память поднимает, зачем к нему хейв прикручивать?
Причем здесь хайв, говорят же, смотрят Импалой. От Хайва там только драйвер, с которым Импала была совместима.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525434
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!вспомнил про пост, побыстрому нарисовал mapreduce для той "пятничной задачки" Ну респект, что продемонстрировал. Обычно многие сливаются.

Yo.!как видим mapreduce код примитив, студент последних курсов легко решит такую "пятничную" задачку в mapreduce за 15-30 минут, тогда как sql код для спарка уже из разряда пятничных задачек, и пишется не за 15 минут и явно не студентом. дальше mapreduce решение в данном случае легко сопровождается и расширяется - пункт 3) с подсчетом "редыдущих original так чтоб их сумма не превышала заданный лимит" добавляется за 5 минут, в решении со спарком как я понимаю придется все нафиг переписывать с нуля, отказываясь от декларативного sql и рисовать те же циклы, что у меня в редюсере.
т.е. как раз эта задачка показывает что задачи у всех разные, и кое что в mapreduce много удобней делать.В Spark можно миксовать подходы SQL + api, при этом переход иногда весьма плавный. И все очень взаимозаменяемо.
Vanilla map reduce это не только отстойная производительность и избыточный код, это устаревший и ограниченный подход.
Особенно на Vanilla MR шикарно выглядела бы логика, требующая на SQL десятка соединений, группировку и аналитику.
В 2013 вполне можно прокатить как решение, но с появлением Spark 1.6 и особенно Spark 2.0 никто в цивилизованном мире не начинает пилить ETL с нуля на MR.
Если нагенерили тонны говнокода, то иногда приходится его поддерживать, да.
Были даже промедуточные фреймворки типа Scalding, Scoobi, Scrunch и все это уже заменено Spark.
Ознакомься с положением дел 4 года назад Should I Use Scalding or Scoobi or Scrunch? . Там в презентации есть даже отдельный раздел Future. Это то, что уже наступило.
Итого если нет желания изучать новые подходы, можно продолжать писать дубовый говнокод за 15 минут, но если иногда есть время точить топор перед тем как рубить лес, то жизнь себе можно сильно облегчить.

Yo.!что касается перфоменса, то померить в спарке 2.1 не удалось. спарк на чуть больших объемах вываливается с java.lang.OutOfMemoryError: GC overhead limit exceededВ том и дело, что спарк работает в памяти, а MR заливает промежуточные результаты на диск не говоря уже про другие ограничения MR.
Погугли что ли spark vs MR. Дофига же материалов в сети.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525440
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь парочку подходов на spark.
Та же табличка с двумя позициями
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create external table t stored as parquet as
select cast(position as int) position,
       cast(id as int) id,
       cast(case when column_value = 'o' then 'original' else 'adjusted' end as string) type,
       cast(value as int) value
  from
(select 1 position union all select 2 position) p
cross join
(select 10 id, 'o' column_value, 100 value
union all select 20 id, 'o' column_value, 200 value
union all select 30 id, 'a' column_value, 300 value
union all select 40 id, 'o' column_value, 400 value
union all select 50 id, 'a' column_value, 500 value
union all select 60 id, 'o' column_value, 600 value
union all select 70 id, 'o' column_value, 700 value
union all select 80 id, 'a' column_value, 800 value
union all select 90 id, 'a' column_value, 900 value
union all select 100 id, 'o' column_value, 1000 value
union all select 110 id, 'a' column_value, 1100 value
union all select 120 id, 'o' column_value, 1200 value
union all select 130 id, 'a' column_value, 1300 value
union all select 140 id, 'o' column_value, 1400 value
union all select 150 id, 'a' column_value, 1500 value) t;


DataFrame
Код: sql
1.
2.
val spark = org.apache.spark.sql.SparkSession.builder().config("spark.sql.parquet.binaryAsString","true").getOrCreate()
val df = spark.read.load("hdfs://.../t")



Рассмотрим только получение одной колонки из трех (prev_o_value) для простоты.
Если применить двойную аналитику как было показано здесь ( Пятничная задачка. Смотрим назад. ), то подход через API может выглядеть так.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
scala> import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.expressions.Window

scala> val windowSpec1 = Window.partitionBy($"position").orderBy($"id")
windowSpec1: org.apache.spark.sql.expressions.WindowSpec = org.apache.spark.sql.expressions.WindowSpec@790b51f1

scala> val df1 = df.withColumn("grp", sum(when($"type" === "original", 1).otherwise(0)).over(windowSpec1))
df1: org.apache.spark.sql.DataFrame = [position: int, id: int ... 3 more fields]

scala> val windowSpec2 = Window.partitionBy($"position", $"grp")
windowSpec2: org.apache.spark.sql.expressions.WindowSpec = org.apache.spark.sql.expressions.WindowSpec@72092d90

scala> val df2 = df1.withColumn("prev_o_value", when($"type" === "adjusted", max(when($"type" === "original", $"value").otherwise(null)).over(windowSpec2)).otherwise(null))
df2: org.apache.spark.sql.DataFrame = [position: int, id: int ... 4 more fields]

scala> df2.show
+--------+---+--------+-----+---+------------+
|position| id|    type|value|grp|prev_o_value|
+--------+---+--------+-----+---+------------+
|      10| 10|original|  100|  1|        null|
|      10| 20|original|  200|  2|        null|
|      10| 30|adjusted|  300|  2|         200|
|      10| 40|original|  400|  3|        null|
|      10| 50|adjusted|  500|  3|         400|
|      10| 60|original|  600|  4|        null|
|      10| 70|original|  700|  5|        null|
|      10| 80|adjusted|  800|  5|         700|
|      10| 90|adjusted|  900|  5|         700|
|      10|100|original| 1000|  6|        null|
|      10|110|adjusted| 1100|  6|        1000|
|      10|120|original| 1200|  7|        null|
|      10|130|adjusted| 1300|  7|        1200|
|      10|140|original| 1400|  8|        null|
|      10|150|adjusted| 1500|  8|        1400|
|       2| 10|original|  100|  1|        null|
|       2| 20|original|  200|  2|        null|
|       2| 30|adjusted|  300|  2|         200|
|       2| 40|original|  400|  3|        null|
|       2| 50|adjusted|  500|  3|         400|
+--------+---+--------+-----+---+------------+
only showing top 20 rows


Здесь, например, вместо when-otherwise можно было бы использовать expr(SQL case).

Теперь уйдем от использования аналитики в том или ином виде. Map.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
import org.apache.spark.sql.Row
df.repartition($"position").sortWithinPartitions($"id").map{
  var curr_o_value = null.asInstanceOf[Integer];
  var prev_o_value = null.asInstanceOf[Integer];
  {case Row(position: Int, id: Int, xtype: String, value: Int) => {
      prev_o_value = curr_o_value;
      curr_o_value = (if (xtype == "original") (value) else (prev_o_value));
      (position, id, xtype, value, (if (xtype == "adjusted") (prev_o_value) else (null.asInstanceOf[Integer])))
    }
  }
}.show


Улучшаем. Переходим к mapPartitions.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
import org.apache.spark.sql.types.{DoubleType, StringType, StructField, StructType, IntegerType}

val schema = new StructType().add(
             StructField("position", IntegerType, true)).add(
             StructField("id", IntegerType, true)).add(
             StructField("type", StringType, true)).add(
             StructField("value", IntegerType, true)).add(
             StructField("prev_o_value", IntegerType, true))

def func(iter: Iterator[Row]) : Iterator[Row] = {
  var res = List[Row]();
  var prev_o_value = null.asInstanceOf[Integer];
  while (iter.hasNext)
  {
    iter.next match { case Row(position: Int, id: Int, xtype: String, value: Int) => 
    res = res ::: List(Row(position, id, xtype, value, if (xtype == "adjusted") (prev_o_value) else (null.asInstanceOf[Integer])));
    prev_o_value = if (xtype == "original") (value) else (prev_o_value);
    }
  }
  res.iterator
}

spark.createDataFrame(df.repartition($"position").sortWithinPartitions($"id").rdd.mapPartitions(func, true), schema).show



Если большое желание, то можно преобразовать набор данных в key-value пары, где value будет набор полей и применять PairRDDFunctions типа reduceByKey, groupBykey, aggregateByKey, combineByKey.
Только для этой задачи это несколько неуклюже так как нам не надо "схлопывать" набор данных.

Подытоживая, для data frame применить и функциональный подход и SQL сверху натянуть.
Надо минимально понимать как оно работает, конечно.
Можно сразу получать результаты в режиме терминала, можно компилировать код.

Чем раньше ты уйдешь от Vanilla MR тем тебе будет лучше.
Хотя можно, конечно, вспахивать поле на гужевой силе вместо комбайна. Разные бывают эстеты.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525441
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!pihelКластер был в тот момент пустой.

хоть беременный. если все ресурсы отданы yarn, импала будет гарантированно дохнуть. забери ресурсы у yarn и отдай импале.Погугли impala load balancer.
Using Impala through a Proxy for High Availability
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525442
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!pihelу меня сейчас установлена сборка от клаудеры, в которой нет Tez. Видимо придется поплатиться за свою лень и теперь как-то самому ставить tez
по моим замерам Tez заметно медленее импалы. на клоудере вместо импалы, есть смысл пробовать Spark как движок к Hive (ставить через parcel), Tez на клоудере сомнительная затея.Вот ты же сам понимаешь гибкость.

Если логика на SQL и данные в HDFS, я могу выбирать движок как минимум из
Impala
Spark
Tez
HiveMR

Как я уже замечал раньше не все функции совместимы, но проблема решается использованием UDF.

Когда не все решаемо на SQL => spark + scala.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525443
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pihelYo.!,

спасибо, тоже тогда буду пробовать на map reduce (в моем случае hive) посчитать агрегаты, а дальше что-то другое.Перечитай топик еще раз и не надо заниматься херней.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525471
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakYo.! map-reduce делает ETL, тяжелые расчеты и готовит широкие таблички, которые импалой смотрят отчетные системы и юзера. .
Скажите, какие отчетные системы юзают импалу?? Самописные или ентерпрайз какие-то?С этого топик начинался (только с позиции разработчика).
Всё что знает ODBC/JDBC может тянуть данные из Impala via SQL.

В моем колхозе qlik, tableau, business objects и даже SSAS cube.
Ведутся изыскания по построению решения на базе Kyvos OLAP.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525500
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
import org.apache.spark.sql.types.{DoubleType, StringType, StructField, StructType, IntegerType}

val schema = new StructType().add(
             StructField("position", IntegerType, true)).add(
             StructField("id", IntegerType, true)).add(
             StructField("type", StringType, true)).add(
             StructField("value", IntegerType, true)).add(
             StructField("prev_o_value", IntegerType, true))

def func(iter: Iterator[Row]) : Iterator[Row] = {
  var res = List[Row]();
  var prev_o_value = null.asInstanceOf[Integer];
  while (iter.hasNext)
  {
    iter.next match { case Row(position: Int, id: Int, xtype: String, value: Int) => 
    res = res ::: List(Row(position, id, xtype, value, if (xtype == "adjusted") (prev_o_value) else (null.asInstanceOf[Integer])));
    prev_o_value = if (xtype == "original") (value) else (prev_o_value);
    }
  }
  res.iterator
}

spark.createDataFrame(df.repartition($"position").sortWithinPartitions($"id").rdd.mapPartitions(func, true), schema).show



отличная демонстрация того как примитивная задача на несколько строк MR в спарке может превратиться в совершенно не читаемое нагромождение вермишели. посмотри, у тебя 2 месяца ушло на этот код, а теперь сколько человек из команды эту вермишель сможет прочесть ? а сколькие добавить условие 3) "число предыдущих original так чтоб их сумма не превышала заданный лимит" ?

спарк штука безусловно интересная и перспективная, но пока достаточно сырая, в клоудере так и откровенно кастрированная. книги и примеры по спарку по прежнему полный примитив. как строить что-то сложнее word count никто не знает. документации считай нет, все примерчики в книгах запускают джобы в отдельных jvm, которые естественно получают отдельные sparkSession. что бы шарить sparkSession народ воротит какие-то мутные REST сервисы аля spark-jobserver , которые выглядят вообще не сексуально, не секьюрно.
кроме этого код в том виде как у тебя, это был бы серьезный шаг назад в плане безопасности кода. в терминах оракла у тебя динамический sql, который компилятор никак не валидирует. вместо df.repartition($"position") я могу написать df.repartition($"pornosition") и компилятор не заметит косяка.

то что MR все общение между мапперами и редюсарами делает через писанину на hdfs большой и жирный минус, но есть много задач, где скорость не единственный показатель. надежность выполнения, безопасность кода и наглядность зачастую имеют не меньшее значение. а спарк пока на том уровне развития когда еще очень просто вместо солюшена получить нечитаемую и не безопасную вермишель вместо кода.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525526
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!отличная демонстрация того как примитивная задача на несколько строк MR в спарке может превратиться в совершенно не читаемое нагромождение вермишели.Ты же отличаешь уровень представления от собственно логики. То же касается и способности считать строки.
Если скала ты совсем не понимаешь, то пиши на java.
Yo.!посмотри, у тебя 2 месяца ушло на этот кодДа какое там, я эту задачу с 2014 решал.
И да, пришлось потратить больше часа на ответ тебе, это не типичный пост, который делаешь в рабочее время.
Yo.!спарк штука безусловно интересная и перспективная, но пока достаточно сырая, в клоудере так и откровенно кастрированная. книги и примеры по спарку по прежнему полный примитив. как строить что-то сложнее word count никто не знает. документации считай нет, все примерчики в книгах запускают джобы в отдельных jvm, которые естественно получают отдельные sparkSession. что бы шарить sparkSession народ воротит какие-то мутные REST сервисы аля spark-jobserver , которые выглядят вообще не сексуально, не секьюрно.Да, штука сырая, с книгами проблемы.
Зато по MR есть занимательное чтиво MapReduce Design Patterns . Для академического ознакомления самое оно.
Отсутствие примеров в доке тоже хреново, что есть то есть.
Yo.!кроме этого код в том виде как у тебя, это был бы серьезный шаг назад в плане безопасности кода. в терминах оракла у тебя динамический sql, который компилятор никак не валидирует. вместо df.repartition($"position") я могу написать df.repartition($"pornosition") и компилятор не заметит косяка.Мой код просто набросок для демонстрации разных подходов.
Там многое можно и нужно изменять начиная от минимальной привязки к типам. Если изменить тип value на double то он перестанет работать.
И заканчивая тем, что true functional developers совсем бы не оценили наличие у меня mutable var.
Yo.!то что MR все общение между мапперами и редюсарами делает через писанину на hdfs большой и жирный минус, но есть много задач, где скорость не единственный показатель. надежность выполнения, безопасность кода и наглядность зачастую имеют не меньшее значение. а спарк пока на том уровне развития когда еще очень просто вместо солюшена получить нечитаемую и не безопасную вермишель вместо кода.Если не хватает памяти, то никто не мешает persist intermediate results в HDFS. Но если честно у меня такой необходимости не возникло.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525548
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopс книгами проблемыОказывается летом вышло пару книг о которых не знал.

Scala and Spark for Big Data Analytics
High Performance Spark: Best Practices for Scaling and Optimizing Apache Spark

Если что - обе pdf легко гуглятся в открытом доступе.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525649
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopТы же отличаешь уровень представления от собственно логики. То же касается и способности считать строки.
Если скала ты совсем не понимаешь, то пиши на java.

я отличаю, потому у меня и подозрение, что теперь в такую конструкцию впихнуть оставшиеся условия пятничной задачки без большого изврата не выйдет. можно в ваш код добавить пункт 3:
3) "число предыдущих original так чтоб их сумма не превышала заданный лимит"

dbms_photoshopОказывается летом вышло пару книг о которых не знал.
Scala and Spark for Big Data Analytics
High Performance Spark: Best Practices for Scaling and Optimizing Apache Spark

да, летом полистал. в первой впервые увидел не две строчки описания yarn-client режима, а целых четыре строчки, плюс картинки. пока это самое подробное описание, какое видел. но многое так и остается за кадром. я так и не нашел внятного описания что такое driver program, что делает spark-submit и прочие, минимально необходимые для пониманий концепций вещи. пока я так и не понял что делает spark-submit, думаю он в стиле map-reduce создает для yarn временные папки с /etc/conf туда упаковывает свои джарники, мои джарники и запускает нечто типа контейнера из такой папки. но внятного описания нигде нет. как дальше код попадает на воркеры тоже нет описаний, вероятно он шлет копию моего джарника каждому воркеру. вероятно, но хотелось бы однозначного описания этих базовых вещей, пусть не в доку, пусть в книге.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525770
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!можно в ваш код добавить пункт 3:
3) "число предыдущих original так чтоб их сумма не превышала заданный лимит"Я использовал бы подход как я продемонстировал для Оракла - добавил бы переменную и вспомогательную очередь.
При случае поговорю с функциональными парнями у которых scala primary skill, как бы сделали они.
Yo.!да, летом полистал. в первой впервые увидел не две строчки описания yarn-client режима, а целых четыре строчки, плюс картинки. пока это самое подробное описание, какое видел. но многое так и остается за кадром. я так и не нашел внятного описания что такое driver program, что делает spark-submit и прочие, минимально необходимые для пониманий концепций вещи. пока я так и не понял что делает spark-submit, думаю он в стиле map-reduce создает для yarn временные папки с /etc/conf туда упаковывает свои джарники, мои джарники и запускает нечто типа контейнера из такой папки. но внятного описания нигде нет. как дальше код попадает на воркеры тоже нет описаний, вероятно он шлет копию моего джарника каждому воркеру. вероятно, но хотелось бы однозначного описания этих базовых вещей, пусть не в доку, пусть в книге.
Running Spark on YARN -> Preparations
Optimizing YARN Mode in Unmanaged CDH Deployments
?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525836
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopЯ использовал бы подход как я продемонстировал для Оракла - добавил бы переменную и вспомогательную очередь.
При случае поговорю с функциональными парнями у которых scala primary skill, как бы сделали они.

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

dbms_photoshop Running Spark on YARN -> Preparations
Optimizing YARN Mode in Unmanaged CDH Deployments
?
свои вопросы там не прояснил: "The configuration contained in this directory will be distributed to the YARN cluster so that all containers used by the application use the same configuration." - тут речь о том, что инфо содержащееся в папках будет distributed, а каким образом нифига не сказано. с моим джарником тоже не ясно, в "Optimizing YARN Mode in Unmanaged CDH Deployments" речь как я понял про голый спарк, а не джарники с моим кодом. причем в моем случае у меня managed by Cloudera Manager вариант и как я понимаю spark-assembly.jar сама клоудера подсовывает как-то.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525837
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!,

1. Речь про этот вариант 20559260 . Там один проход и ты сам его на него даже ссылался.
2. Там речь про бинарники и спарка и прикладухи.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39525870
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop1. Речь про этот вариант 20559260 . Там один проход и ты сам его на него даже ссылался.

ок, тогда вопрос как именно этот вариант в спарке будет реализован. решение в лоб было бы датасет по "select * from t order by id" и проход по нему, но если я верно понимаю концепции спарк это плохо смаштабируется. в варианте rdd.mapPartitions(func, true) запуститься тьма воркеров которые запустят func в параллель, а в решении в лоб получиться лишь один поток, обрабатывающий данные из датасета


dbms_photoshop2. Там речь про бинарники и спарка и прикладухи.
клоудера1. Manually upload the Spark assembly JAR file to HDFS:

$ hdfs dfs -mkdir -p /user/spark/share/lib
$ hdfs dfs -put SPARK_HOME/assembly/lib/spark-assembly_*.jar /user/spark/share/lib/spark-assembly.jar

You must manually upload the JAR each time you upgrade Spark to a new minor CDH release.

manually upload the JAR each time you upgrade Spark - тут речь лишь о JARs спарка
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39526492
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopIvan Durakпропущено...

Скажите, какие отчетные системы юзают импалу?? Самописные или ентерпрайз какие-то?С этого топик начинался (только с позиции разработчика).
Всё что знает ODBC/JDBC может тянуть данные из Impala via SQL.

В моем колхозе qlik, tableau, business objects и даже SSAS cube.
Ведутся изыскания по построению решения на базе Kyvos OLAP.
ну например business objects на HIVE sql не взлетел от слова совсем. Автогенеренные зубодробительные sql от BO - не по зубам хайву.
Что-то про спарк тоже сомневаюсь
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39527121
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!ок, тогда вопрос как именно этот вариант в спарке будет реализован. решение в лоб было бы датасет по "select * from t order by id" и проход по нему, но если я верно понимаю концепции спарк это плохо смаштабируется. в варианте rdd.mapPartitions(func, true) запуститься тьма воркеров которые запустят func в параллель, а в решении в лоб получиться лишь один поток, обрабатывающий данные из датасета
Вроде как repartition сделает shuffliung секций по нодам, потом sortWithinPartitions выполнит сортировку порций данных.
Вставлять "order by" в запрос не имеет при таком сценарии никакого смысла.
Более того, если присмотреться, в scala-решении нигде не используется SQL и данные читаются через spark.read, а не spark.sql как здесь 20604267 .
С другой стороны, подходы можно миксовать, как уже было сказано, но надо понимать зачем.

Функцию func которая, собственно, реализует всю логику можно переписать на функциональный манер (без переменных) примерно так.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
def func(iter: Iterator[Row]) : Iterator[Row] = {
  iter.scanLeft(Row(0, 0, "_", 0, 0))
  {
    case (x1, x2) =>
    val prev_o_value = if (x1.getString(2) == "original") (x1.getInt(3)) else (x1.getInt(4));
    Row(x2.getInt(0), x2.getInt(1), x2.getString(2), x2.getInt(3),
        if (x2.getString(2) == "adjusted") (prev_o_value) else (null.asInstanceOf[Integer]));
  }.drop(1)
}

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

Потом если хочется считать еще колонку count_o, то смотрим на код здесь ( 20559260 ) и реализуем идентичный подход c очередью, как уже тоже было сказано.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
def func(iter: Iterator[Row]) : Iterator[Row] = {
  val limit = 2000;
  var q = new Queue[Int];
  var total = 0;
  iter.scanLeft(Row(0, 0, "_", 0, 0, 0))
  {
    case (x1, x2) =>
    val prev_o_value = if (x1.getString(2) == "original") (x1.getInt(3)) else (x1.getInt(4));
    
    if (x2.getString(2) == "original") {
      q += x2.getInt(3);
      total += x2.getInt(3); 
    } else (
      while (total > limit){total -= q.dequeue;}
    );

    Row(x2.getInt(0), x2.getInt(1), x2.getString(2), x2.getInt(3),
        if (x2.getString(2) == "adjusted") (prev_o_value) else (null.asInstanceOf[Integer]),
        if (x2.getString(2) == "adjusted") (q.size) else (null.asInstanceOf[Integer]));
  }.drop(1)
}


результат
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
scala> spark.createDataFrame(df.repartition($"position").sortWithinPartitions($"id").rdd.mapPartitions(func, true), schema).show
+--------+---+--------+-----+------------+-------+
|position| id|    type|value|prev_o_value|count_o|
+--------+---+--------+-----+------------+-------+
|       1| 10|original|  100|        null|   null|
|       1| 20|original|  200|        null|   null|
|       1| 30|adjusted|  300|         200|      2|
|       1| 40|original|  400|        null|   null|
|       1| 50|adjusted|  500|         400|      3|
|       1| 60|original|  600|        null|   null|
|       1| 70|original|  700|        null|   null|
|       1| 80|adjusted|  800|         700|      5|
|       1| 90|adjusted|  900|         700|      5|
|       1|100|original| 1000|        null|   null|
|       1|110|adjusted| 1100|        1000|      2|
|       1|120|original| 1200|        null|   null|
|       1|130|adjusted| 1300|        1200|      1|
|       1|140|original| 1400|        null|   null|
|       1|150|adjusted| 1500|        1400|      1|
|      10| 10|original|  100|        null|   null|
|      10| 20|original|  200|        null|   null|
|      10| 30|adjusted|  300|         200|      2|
|      10| 40|original|  400|        null|   null|
|      10| 50|adjusted|  500|         400|      3|
+--------+---+--------+-----+------------+-------+
only showing top 20 rows


Yo.!клоудераНе желаешь пройти и по первой ссылке?
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39527129
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durakну например business objects на HIVE sql не взлетел от слова совсем. Автогенеренные зубодробительные sql от BO - не по зубам хайву.
Что-то про спарк тоже сомневаюсьНу Hive можно переключить с ипользования MR на spark как уже было сказано 20588925 . Скорее всего это увеличит скорость в разы.

Мне big data отчасти и нравится тем, что надо понимать что ты пишешь.
Если для развитой СУБД много какие говно-запросы отработают за приемлемое время благодаря query transformations и индексам,
то это не случай для bigdata. Query transformations здесь тоже имееются, но сильно урезанные пока.

Например, если нет понимания, что для такого запроса не может быть hash join (без concatenation),
то можно винить Impala что она работает вечность.
Код: plaintext
1.
2.
select *
from t1
join t2 on t1.id = t2.col1 or t1.id = t2.col2
Hive вообще скажет
Код: plaintext
OR not supported in JOIN
и, наверное, это даже лучше.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39527341
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopПодозреваю что на это ты скажешь что тоже нечитаемый спагетти код.

это же эмоди !
Код: java
1.
Row(0, 0, "_", 0, 0)



но сейчас я хочу привязаться к другому - тут же два прохода замаскировано:
Код: java
1.
    val prev_o_value = if (x1.getString(2) == "original") (x1.getInt(3)) else (x1.getInt(4));


тут явно ожидается, что уже построена четвертая колонка prev_o_value, которая береться из более ранниих заклинаний. т.е. нужно сначала выполнить все заклинания для df2
Код: java
1.
val df2 = df1.withColumn("prev_o_value", when($"type" === "adjusted", max(when($"type" === "original", $"value").otherwise(null)).over(windowSpec2))


т.е. сначала он все прочтет, отсортирует, высчислит prev_o_value, а представленный код с mapPartitions(func, true) инициирует уже второй проход.

dbms_photoshopYo.!клоудераНе желаешь пройти и по первой ссылке?
и по первой сходил, но как уже писал
Yo.!свои вопросы там не прояснил: "The configuration contained in this directory will be distributed to the YARN cluster so that all containers used by the application use the same configuration." - тут речь о том, что инфо содержащееся в папках будет distributed, а каким образом нифига не сказано.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39527609
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!это же эмоди !Эмодзи было использовано чтоб подсказать скале тип результата.
Yo.!т.е. сначала он все прочтет, отсортирует, высчислит prev_o_value, а представленный код с mapPartitions(func, true) инициирует уже второй проход.Насколько я понимаю ты немного значешь PL/SQL и нет сомнений касательно того, что время выполнения в Оракле для приведенного алгоритма линейное.
Если честно вообще непонятно почему ты думаешь, что есть какие-то порблемы со сложностью алгоритма в скала.
Нет никаких двух проходов, нет никакой маскировки.
Помедитируй над тем как работает scalLeftВо втором случае идет использование x1._3, хотя на входе только две "колонки"
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
scala> val li = List((1,1),(1,2),(1,3),(1,5))
li: List[(Int, Int)] = List((1,1), (1,2), (1,3), (1,5))

scala> li.toDF.show
+---+---+
| _1| _2|
+---+---+
|  1|  1|
|  1|  2|
|  1|  3|
|  1|  5|
+---+---+


scala> val it = li.toIterator
it: Iterator[(Int, Int)] = non-empty iterator

scala> it.scanLeft((0,0))((x1,x2) => (x2._1, x1._2 + x2._2)).toArray
res1: Array[(Int, Int)] = Array((0,0), (1,1), (1,3), (1,6), (1,11))

scala> val it = li.toIterator
it: Iterator[(Int, Int)] = non-empty iterator

scala> it.scanLeft((0,0,0))((x1,x2) => (x2._1, x2._2, x1._3 + x2._2)).toArray
res2: Array[(Int, Int, Int)] = Array((0,0,0), (1,1,1), (1,2,3), (1,3,6), (1,5,11))

Только желтая строка имеет отношение к спарк. Все остальное pure scala.
Чтоб было меньше "заклинаний" имеет смысл почитать про язык немного.
Диалог опять перестает быть содержательным.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39527709
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopЕсли честно вообще непонятно почему ты думаешь, что есть какие-то порблемы со сложностью алгоритма в скала.
Нет никаких двух проходов, нет никакой маскировки.

потому, что разговор идет не о скале, а о фремворке spark и его работе. не важно каким диалектом мы реализуем df2 и функцию - скалой, джавой или питоном. спарк превратит датафремы в DAG граф из RDD. df2 будет одним RDD, df с функцией будет другим RDD. это не фишка скалы, это фишка фрейворка.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39527727
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!,

В решении нет df2. Это уже переходит в клоунаду. Прости если я тебя задел.
И, конечно, зря я выступал против написания дубовой логики на map reduce.
Каждый программирует в меру своих способностей.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39527746
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopВ решении нет df2. Это уже переходит в клоунаду. Прости если я тебя задел.
И, конечно, зря я выступал против написания дубовой логики на map reduce.
Каждый программирует в меру своих способностей.
прости, но в твоем говнокоде
val prev_o_value = if (x1.getString(2) == "original") (x1.getInt(3)) else (x1.getInt(4));

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

dbms_photoshop
данные
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create table t as
select 1 position, id, case when column_value = 'o' then 'original' else 'adjusted' end type, value from
(select 1 position, 10 id, 'o' column_value, 100 value
union all select 1 position, 20 id, 'o' column_value, 200 value
union all select 1 position, 30 id, 'a' column_value, 300 value
union all select 1 position, 40 id, 'o' column_value, 400 value
union all select 1 position, 50 id, 'a' column_value, 500 value
union all select 1 position, 60 id, 'o' column_value, 600 value
union all select 1 position, 70 id, 'o' column_value, 700 value
union all select 1 position, 80 id, 'a' column_value, 800 value
union all select 1 position, 90 id, 'a' column_value, 900 value
union all select 1 position, 100 id, 'o' column_value, 1000 value
union all select 1 position, 110 id, 'a' column_value, 1100 value
union all select 1 position, 120 id, 'o' column_value, 1200 value
union all select 1 position, 130 id, 'a' column_value, 1300 value
union all select 1 position, 140 id, 'o' column_value, 1400 value
union all select 1 position, 150 id, 'a' column_value, 1500 value) t



предыдущее значение у тебя вычисляет df2.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39527782
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!...
Жги еще. Не думал что ты в итоге окажешься так жалок.

Попробуем для самых маленьких.
Предположим что ты смог создать таблицу.
Запускаешь spark-shell.
Копируешь туда код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
val spark = org.apache.spark.sql.SparkSession.builder().config("spark.sql.parquet.binaryAsString","true").getOrCreate()
val df = spark.read.load("hdfs://.../t")

import org.apache.spark.sql.Row
import org.apache.spark.sql.types.{DoubleType, StringType, StructField, StructType, IntegerType}
import scala.collection.mutable.Queue

val schema = new StructType().add(
             StructField("position", IntegerType, true)).add(
             StructField("id", IntegerType, true)).add(
             StructField("type", StringType, true)).add(
             StructField("value", IntegerType, true)).add(
             StructField("prev_o_value", IntegerType, true)).add(
             StructField("count_o", IntegerType, true))

def func(iter: Iterator[Row]) : Iterator[Row] = {
  val limit = 2000;
  var q = new Queue[Int];
  var total = 0;
  iter.scanLeft(Row(0, 0, "_", 0, 0, 0))
  {
    case (x1, x2) =>
    val prev_o_value = if (x1.getString(2) == "original") (x1.getInt(3)) else (x1.getInt(4));
    
    if (x2.getString(2) == "original") {
      q += x2.getInt(3);
      total += x2.getInt(3); 
    } else (
      while (total > limit){total -= q.dequeue;}
    );

    Row(x2.getInt(0), x2.getInt(1), x2.getString(2), x2.getInt(3),
        if (x2.getString(2) == "adjusted") (prev_o_value) else (null.asInstanceOf[Integer]),
        if (x2.getString(2) == "adjusted") (q.size) else (null.asInstanceOf[Integer]));
  }.drop(1)
}

spark.createDataFrame(df.repartition($"position").sortWithinPartitions($"id").rdd.mapPartitions(func, true), schema).show

В итоге должно быть то, что уже было показано.

Только не нужно прикапываться к schema и прочему. Это для простоты, чтоб не использовать декодеры.
Хотя кому я объясняю... человеку которому мерещатся df2 и который не в состоянии сделать copy&paste.

Вместо трех точек догадаешься написать полный путь? Ну слава Богу.
Если scanLeft все-таки не для твоих мозгов, поковыряй другие подходы.

PS. Я загляну в топик через два-три месяца снова, может здесь появится кто толковый.
PPS. Даже не знаю почему тебя банили, такой приятный, эрудированный и конструктивный собеседник.
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39530538
Фотография Vyatich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopЕсли скала ты совсем не понимаешь, то пиши на java.

А мне приходится на python писать. ((
...
Рейтинг: 0 / 0
Инструмент для работы с SQL движками Impala/Hive
    #39582883
мигель1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vyatich,
Что писать? Map reduce?)
...
Рейтинг: 0 / 0
97 сообщений из 97, показаны все 4 страниц
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Инструмент для работы с SQL движками Impala/Hive
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]