Я использую HDP 2.6.4 и вижу огромные различия в Spark SQL и Hive на TeZ.Вот простой запрос к таблице из ~ 95 M строк
SELECT DT, Sum(1) from mydata GROUP BY DT
DT
- столбец раздела, строка, помечающая дату.
В оболочке spark, с 15 исполнителями, памятью 10Gдля драйвера и 15G для исполнителя запрос выполняется в течение 10-15 секунд.
При работе в Hive (из beeline ) запрос выполняется (фактически выполняется) в течение 500+ секунд.(!!!) Что еще хуже, это приложение потребляет даже больше ресурсов (значительно), чем сеанс spark shell, в котором я выполнял задание.
ОБНОВЛЕНИЕ: Завершено 1 row selected (672.152 seconds)
Подробнееинформация о среде:
Используется только одна очередь с планировщиком емкости
Пользователь, под которым выполняется задание, является моим собственным пользователем.Kerberos используется с LDAP
AM Ресурс: 4096 МБ
с использованием tez.runtime.compress с Snappy
данные в формате паркета, сжатие не применяется
tez.task.resource.memory 6134 МБ
tez.counters.max 10000
tez.counters.max.groups 3000
tez.runtime.io.sort.mb 8110 МБ
tez.runtime.pipelined.sorter.sort.threads 2
tez.runtime.shuffle.fetch.buffer.percent 0.6
tez.runtime.shuffle.memory.limit.percent 0.25
tez.runtime.unordered.output.buffer.size-mb 460 МБ
Включить векторизацию и векторизацию карты true
Включить Уменьшить векторизацию false
hive.vectorized.groupby.checkinterval 4096
hive.vectorized.groupby.flush.percent 0.1
улей.tez.container.size 682
Больше обновлений:
При проверке векторизации по этой ссылке я заметил, что не вижу Векторизованное исполнение: true везде, где я использовал explain
.Еще одна вещь, которая привлекла мое внимание, заключается в следующем: table:{"input format:":"org.apache.hadoop.mapred.TextInputFormat","output format:":"org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat","serde:":"org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe"}
А именно, при проверке самой таблицы: STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
и OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
Любые сравнения между искрой и тезом обычно сводятся к одному и тому же.термины, но я вижу существенные различия.
Что должно быть первым, что нужно проверить?
Thx