Как улей на свече определяет номер редуктора? - PullRequest
1 голос
/ 01 июня 2019

Я включаю Hive on Spark согласно документации Cloudera 1 и 2 . Теперь я обнаружил, что число редукторов ведет себя неожиданно. Я хотел бы, чтобы кто-нибудь мог предоставить подробную документацию или объяснение относительно этого.

Насколько мне известно, Hive on MR вычисляет число редуктора на основе объема данных и hive.exec.reducers.bytes.per.reducer, что означает количество байтов на процессы редуктора, поэтому параллелизм задания можно настроить автоматически. Но Hive on Spark, похоже, относится к этому параметру иначе. Хотя установка этого значения на очень низкое число (<1K) действительно увеличивает число редукторов, ни одно общее правило не может быть применено к различным заданиям. </p>

Ниже приведен фрагмент из документации по настройке Cloudera для параллелизма .

Настройте hive.exec.reducers.bytes.per.reducer, чтобы контролировать, сколько данных обрабатывает каждый редуктор, а Hive определяет оптимальное количество разделов на основе доступных исполнителей, настроек памяти исполнителя и значения, которое вы задали для свойства. и другие факторы. Эксперименты показывают, что Spark менее чувствителен, чем MapReduce, к значению, которое вы указываете для hive.exec.reducers.bytes.per.reducer, если генерируется достаточно задач для того, чтобы все доступные исполнители были заняты

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

Job aborted due to stage failure: Task 0 in stage 7.0 failed 4 times, most recent failure: Lost task 0.3 in stage 7.0 (TID 146, fuxi-luoge-105, executor 34): ExecutorLostFailure (executor 34 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 6.2 GB of 6.0 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
...