powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Инструмент для работы с SQL движками Impala/Hive
25 сообщений из 97, страница 3 из 4
Инструмент для работы с 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
25 сообщений из 97, страница 3 из 4
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Инструмент для работы с SQL движками Impala/Hive
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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