#amazon-web-services #amazon-emr
#amazon-web-services #amazon-emr
Вопрос:
Используя консоль AWS, я пытаюсь запустить кластер EMR (вкл. HBase и Zookeeper) с помощью сценария запуска, который загружает 11 ГБ данных с s3, а затем помещает этот файл в HDFS. У меня есть сценарий оболочки, который включает строки
aws s3 cp s3://path/to/eleven/gb/of/data local/ --recursive
hdfs dfs -put local/ /
Скрипт находится на s3, и когда я запускаю кластер, я включаю действие начальной загрузки, указывающее на сценарий оболочки на s3.
Однако кластер не запускается и выдает эту ошибку:
Завершается с ошибками: на главном экземпляре (i-036fb1c03d99115a8) действие начальной загрузки 1 вернуло ненулевой код возврата
Когда я захожу в журналы, я вижу это в выводе stderr
сбой загрузки: s3://path/to/eleven/gb/of/data/d / 95d969cadfa644de8d1b2793e0df7822 в локальный / d / 95d969cadfa644de8d1b2793e0df7822 [Ошибка 28] На устройстве не осталось свободного места
И последняя строка стандартного вывода
Выполнено 5,1 гигабайт / 11,0 гигабайт (49,5 Мбайт / с), осталось 1 файл (ы)
В конфигурации кластера для каждого узла я установил размер тома EBS корневого устройства на 100 ГБ, поэтому я не совсем уверен, почему на устройстве не осталось места после загрузки данных объемом 5,1 ГБ.
Ответ №1:
Начальная загрузка EMR выполняется как hadoop
пользователь, так и рабочий каталог /home/hadoop
.
Домашний каталог не занимает много места.
И с вашей конфигурацией похоже, что она ограничена 5,1 ГБ.
Вы можете поместить файл в другое место (например /etc/temp
), отличное от домашнего каталога.
Или лучший способ — использовать 1-шаговый процесс вместо 2, т.е. Копировать непосредственно в HDFS с помощью S3 s3-dist-cp
. Более подробную информацию вы можете найти здесь.
И я думаю, что это будет лучшим решением без каких-либо изменений конфигурации, поскольку EMR поставляется с s3-dist-cp
предварительно установленным. И это также сэкономит время за счет параллельного копирования файлов.
Есть другой способ:
вместо HDFS вы можете использовать EMRFS.
При этом вам вообще не нужно загружать, но стоимость загрузки выше, чем у обычного S3. Но также имеет много преимуществ. Вы можете начать с этого
Комментарии:
1. aws s3 cp в /etc/temp работает! Однако fs -put hadoop не выполняется, поскольку hadoop устанавливается ПОСЛЕ действий начальной загрузки. Я также попробовал s3-dist-cp, а также hadoop distcp на главном сервере после его полной загрузки. Но оба застревают в INFO mapreduce. Задание: сопоставление 0% с уменьшением на 0%, и я не уверен, почему.
2. Затем используйте шаг EMR для выполнения сценариев после настройки кластера. Единственное, что меня беспокоит, что у меня есть s3 cp, — это то, что вы не сможете использовать параллелизм, поэтому это займет больше времени. Для сбоя задания попробуйте просмотреть журнал каждого исполнителя, перейдя в пользовательский интерфейс YARN.
3. Да, вы правы, я мог бы использовать пользовательский шаг JAR для запуска команд оболочки. Что касается s3 cp, вы тоже правы, но загрузка занимает всего пару минут, так что на данный момент это достаточно хорошее решение 🙂 Спасибо за вашу помощь!