Size: a a a

2020 February 18

ME

Mikhail Epikhin in Moscow Spark
Renarde
то есть у вас чтение однопоточное, для начала. тут можно пошаманить с partitionColumn опциями (чтобы отправлять несколько параллельных селектов).
вот тут механика partitionColumn задокументирована
https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html
а как дальше данные будут по партициям биться?
источник

R

Renarde in Moscow Spark
если вы читаете в один поток, а дальше делаете просто, то вообще неважно сколько у вас ядер - вы используете только одно

DF.write.format(“orc”).saveAsTable(…)
источник

ME

Mikhail Epikhin in Moscow Spark
что-то вроде consistent hashing?
источник

РП

Роман Пашкевич... in Moscow Spark
Renarde
то есть у вас чтение однопоточное, для начала. тут можно пошаманить с partitionColumn опциями (чтобы отправлять несколько параллельных селектов).
вот тут механика partitionColumn задокументирована
https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html
Насколько я понимаю, за счет того что HANA "in memory" она спокойно и быстро отдает данные. Но механику partitionColumn я посмотрю. Это может ускорить выкачивание партиций по 10Gb.
источник

R

Renarde in Moscow Spark
Mikhail Epikhin
а как дальше данные будут по партициям биться?
я сейчас проверю, но вообще судя по всему если вы делате только:

df= spark.read.jdbc(…)
df.write.format(“orc”).saveAsTable(…)

И в read.jdbc нет параметров на partitionColumn, то вы все делаете в один поток
источник

ME

Mikhail Epikhin in Moscow Spark
Renarde
я сейчас проверю, но вообще судя по всему если вы делате только:

df= spark.read.jdbc(…)
df.write.format(“orc”).saveAsTable(…)

И в read.jdbc нет параметров на partitionColumn, то вы все делаете в один поток
да, с этим спору нет.
Вопрос в том что если мы делаем numPartition в N, и N executors, то потом перед тем как склеивать в orc придётся мёрджить данные с N executors
источник

А

Алексей in Moscow Spark
вам нужно распараллелить забор данных, вы полюбому упираетесь в скорость чтений jdbc в 1 поток:
.option("partitionColumn", conf_params("thread_alias"))
                       .option("lowerBound", p_table_params("thread_min"))
                       .option("upperBound", p_table_params("thread_max"))
                       .option("numPartitions", thread_num)
.option("fetchsize",        conf_params("fetchsize").toInt)
источник

R

Renarde in Moscow Spark
Алексей
вам нужно распараллелить забор данных, вы полюбому упираетесь в скорость чтений jdbc в 1 поток:
.option("partitionColumn", conf_params("thread_alias"))
                       .option("lowerBound", p_table_params("thread_min"))
                       .option("upperBound", p_table_params("thread_max"))
                       .option("numPartitions", thread_num)
.option("fetchsize",        conf_params("fetchsize").toInt)
это не обязательно помогает. В случае с Oracle, например, это только делает ситуацию хуже
источник

А

Алексей in Moscow Spark
читаю так из оракла и ничего не делает хуже
источник

А

Алексей in Moscow Spark
нужно думать по кому партишен делать
источник

А

Алексей in Moscow Spark
чтоб таблица на той стороне также была партицирована или индексирована
источник

ЕГ

Евгений Глотов... in Moscow Spark
Алексей
вам нужно распараллелить забор данных, вы полюбому упираетесь в скорость чтений jdbc в 1 поток:
.option("partitionColumn", conf_params("thread_alias"))
                       .option("lowerBound", p_table_params("thread_min"))
                       .option("upperBound", p_table_params("thread_max"))
                       .option("numPartitions", thread_num)
.option("fetchsize",        conf_params("fetchsize").toInt)
А при распараллеливании чтения вы упрётесь в недовольный отдел эксплуатации системы😆
источник

А

Алексей in Moscow Spark
тут смотря как цель: быстрей скачать или снизить нагрузку
источник

R

Renarde in Moscow Spark
Евгений Глотов
А при распараллеливании чтения вы упрётесь в недовольный отдел эксплуатации системы😆
> вот эта история обычно более жизненная 😅
источник

NN

No Name in Moscow Spark
Евгений Глотов
А при распараллеливании чтения вы упрётесь в недовольный отдел эксплуатации системы😆
Тру
источник

А

Алексей in Moscow Spark
понятно что в 1 сессию оракл не будет нагружаться, но цель быстрей скачать, придется параллелить, нужно только договориться насколько и по какому полю
источник

РП

Роман Пашкевич... in Moscow Spark
Евгений Глотов
А при распараллеливании чтения вы упрётесь в недовольный отдел эксплуатации системы😆
=) Да, он там злой))) Но я думаю если забирать в 2-3 потока, это уже лучше чем в 1)
источник

NN

No Name in Moscow Spark
Роман Пашкевич
=) Да, он там злой))) Но я думаю если забирать в 2-3 потока, это уже лучше чем в 1)
Иногда даже по поводу 1 лучше уточнить, если точно не знаете.)
источник

А

Алексей in Moscow Spark
поле партицирования нужно еще выбирать так, чтобы не было перекосов, а то получится, что 15 потоков давно уже все скачали, а 1 выкачивает оставшиеся 99%
источник

R

Renarde in Moscow Spark
No Name
Иногда даже по поводу 1 лучше уточнить, если точно не знаете.)
а еще лучше уточнить что с сеткой между БД и кластером.
помнится мне история, когда так же бились над выкачиванием данных из терадаты, с партишенами игрались, а оказалось что сеть была 1ГБ между ДЦ (и та по умолчанию на половину нагруженная)
источник