Я пытаюсь запустить скрипт в качестве действия начальной загрузки на всех узлах EMR (первичных, основных или целевых узлах). Этот скрипт будет публиковать метрики в AWS CloudWatch. При публикации метрик в AWS CloudWatch я хотел бы также отправить информацию о том, из какого типа узла поступила эта метрика. Есть ли какие-либо команды, которые я могу добавить в сценарий оболочки, которые дадут мне информацию о том, на каком типе узла я запускаю эту команду?
Я попытался запустить эту команду, но она не содержит никакой информации EMR, поскольку связана только с информацией метаданных EC2:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document
Другой вариант — получить теги из идентификатора экземпляра, который я получаю из приведенной выше информации метаданных EC2, поскольку он имеет тег, который сообщает, какой это тип узла. Но это будет дополнительная плата за получение информации о тегах, так как я планирую запускать этот скрипт в качестве планировщика каждые 5 минут.
Есть ли другие способы получить эту информацию об экземпляре EMR?
EMR хранит информацию о кластере (и экземпляре) в файле /emr/instance-controller/lib/info/job-flow-state.txt
. Там много информации, но в частности есть поле под названием instanceRole
, которое сообщит вам, на каком типе инстанса вы находитесь.
master
core
task
Вы можете получить значение с помощью нескольких команд оболочки:
grep instanceRole /emr/instance-controller/lib/info/job-flow-state.txt | awk '{gsub(/"/, ""); print $2}'
Примечание. Файл принадлежит пользователю hadoop
, поэтому для выполнения вышеуказанной команды вам нужно быть либо hadoop
, либо root
.
Это именно то, что я искал. Я не знал, где экземпляры EMR хранят эту информацию. Спасибо!