маппер hive-on-tez застрял в ИНИЦИАЛИЗАЦИИ с общим количеством контейнеров, равным -1 при доступе к данным на S3 / MinIO

У меня есть настройка Hadoop + Hive + Tez с нуля (то есть я развернул ее компонент за компонентом). Hive настроен с использованием Tez в качестве механизма выполнения.

В текущем состоянии Hive может получить доступ к таблице в HDFS, но не может получить доступ к таблице, хранящейся в MinIO (с использованием реализации s3a файловой системы).

Как показано на следующем снимке экрана,  введите здесь описание изображения при выполнении SELECT COUNT(*) FROM s3_table,

  • Казнь Tez застряла навсегда
  • Map 1 всегда в INITIALIZING состоянии
  • Map 1 всегда имеет общее количество -1 и ожидающее количество -1. (почему -1?)

Вещи уже проверены:

  • Hadoop может без проблем получить доступ к MinIO / S3. Например, hdfs dfs -ls s3a://bucketname хорошо работает.
  • Hive-on-Tez может выполнять вычисления с таблицами в HDFS с помощью успешно и быстро сгенерированных сопоставителей и редукторов.
  • Hive-on-MR может без проблем выполнять вычисления с таблицами на MinIO / S3.

Каковы могли быть возможные причины этой проблемы?

Прикрепление снимка экрана Tez UI:  введите описание изображения здесь

Информация о версии:

  • Hadoop 3.2.1
  • Улей 3.1.2
  • Tez 0.9.2
  • МИНИО-РЕЛИЗ.2020-01-25T02-50-51Z

person Naitree    schedule 16.03.2020    source источник


Ответы (2)


Оказалось, проблема в том, что поддержка Tez S3 должна быть включена явно во время компиляции. В hadoop 2.8+, чтобы включить поддержку S3, Tez необходимо скомпилировать из исходного кода с помощью следующей команды:

mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true -Paws -Phadoop28 -P\!hadoop27

После этого перетащите сгенерированный tez-x.y.z.tar.gz в HDFS и извлеките tez-x.x.x-minimal.tar.gz в $TEZ_LIB_DIR. Тогда это сработало для меня. Выполнение Hive для MinIO / S3 работает без сбоев.

Однако в руководстве по установке Tez ничего не упоминается о включении поддержки S3. Также стандартные двоичные выпуски Tez не построены с поддержкой S3 или Azure.

Полные (надеюсь) варианты сборки и подводные камни фактически задокументированы в BUILDING.txt, где сказано:

Однако для сборки с версиями hadoop выше 2.7.0 вам нужно будет сделать следующее:

Для Hadoop версии X, где X> = 2.8.0

$ mvn package  -Dhadoop.version=${X} -Phadoop28 -P\!hadoop27

Для последних версий Hadoop (которые по умолчанию не объединяют aws и azure) вы можете объединить поддержку AWS-S3 (2.7.0+) или Azure (2.7.0+):

$ mvn package -Dhadoop.version=${X} -Paws -Pazure
person Naitree    schedule 17.03.2020
comment
вы можете связать поддержку AWS-S3 (2.7.0+) или Azure (2.7.0+) :. Не смешивайте любые выпуски файлов HADOOP-aws и hadoop-azure с другими общими для hadoop версиями JAR или любым другим SDK AWS, кроме того, с которым они поставлялись. Это приводит к трассировке стека. Полная сборка - это путь, и вы хорошо ее описали - person stevel; 24.04.2020

Моя команда столкнулась с аналогичной проблемой, но вместо этого при чтении из HDFS фаза карты навсегда застряла при инициализации.

Это может помочь кому-то другому, столкнувшемуся с подобной проблемой. На самом деле мастер-приложение получало Out-of-Memory. У нас сработало увеличение указанного ниже значения до 12 ГБ.

tez.am.resource.memory.mb

person Abhishek    schedule 09.10.2020