Как эффективно читать Hive Table с помощью Spark-Sql - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть таблица с данными 20 ГБ в кусте, я читаю таблицу, используя искру с контекстом улья, и могу видеть данные и схему, как и ожидалось.

Однако это занимает около 40 минут, чтобычитать данные, есть ли альтернатива для эффективного чтения данных из таблицы кустов.

Таблица кустов Sample_Table - 20 ГБ, без разделов, используя сжатие ORC Snappy.(данные взрываются до 120 ГБ при чтении из искры)

искра = SparkSession.builder().enableHiveSupport()getOrCreate()

val spark_table = spark.sql(select * from Sample_Table)

Сведения о среде - Не используется облако

Узлы - около 850, общий объем памяти - 160 ТБ, 80 В ядер на узел, до 300 ГБ памяти на узел, 22 диска на узел

Команда Spark-Submit -

/mapr/spark/bin/spark-submit \
--verbose
--num-executors=30 \
--conf spark.locality.wait=60s \
--conf spark.network.timeout=14080s \
--driver-memory=20G \
--executor-memory=15G \
--conf spark.blacklist.enabled=true \
--conf spark.shuffle.service.enabled=true \
--master yarn \
--name=Sample_xxx \
--conf spark.default.parallelism=25 \
--conf spark.task.cpus=3 \
--conf spark.broadcast.compress=true \
--conf spark.io.compression.codec=lz4 \
--conf spark.shuffle.compress=true \
--conf "spark.executor.cores=3" \
--conf spark.shuffle.spill.compress=true \
--conf spark.rdd.compress=true \
--conf spark.sql.shuffle.partitions=1000 \
--conf spark.yarn.executor.memoryOverhead=3G \
--conf spark.sql.tungsten.enabled=true \
--queue sample1XX \
--class XXX yy.jar

Я читаю несколько таблиц и выполняю несколько преобразований, вот почему у меня ниже конфигурации в команде spark submit

1 Ответ

0 голосов
/ 08 февраля 2019

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

По пути к spark-submit я предполагаю, что вы используете дистрибутив MapR Hadoop.Включает ли это пользовательский интерфейс, дающий дополнительное представление о производительности?Особенно обратите внимание на использование памяти / сборку мусора.

Существуют ли какие-либо другие задания, выполняющиеся в вашем кластере, которые могут потреблять ресурсы?

Это 40 минут, чтобы просто загрузить данные, или это включаетваша обработка (имейте в виду, что Spark загружает данные лениво, поэтому время от времени может вводить в заблуждение)?

Главное, что я заметил, это то, что spark.yarn.executor.memory не является допустимой настройкой искры, поэтому у ваших исполнителей может не хватитьпамять.

Вместо этого используйте настройку --executor-memory.

Также добавьте флаг --verbose и изучите вывод при запуске задания, чтобы убедиться, что настройки верны и анализируютсятак, как вы ожидаете.

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

Незначительные наблюдения:

Вы устанавливаете spark.shuffle.spill.compress дважды (безвредно, но не нужно)

Вы устанавливаете --num-executors и spark.dynamicAllocation.enabled=true, которые противоречивы и обычно приводят к предупреждениюсообщение о том, что динамическое размещение будет отключено.

...