Использование переменных ENV в распределенном кластере Hadoop

Моя цель — запускать приложения в нашем кластере Hadoop, не вводя явную конфигурацию в каждое приложение. Поэтому я пытаюсь поместить конфигурации кластера в переменные ENV и распространить их на каждый узел в кластере.

Например, я определяю:

export HIVE2_JDBC_URL=jdbc:hive2://localhost:10000

чтобы использовать его следующим образом:

beeline -u $HIVE2_JDBC_URL/<db_name> -e "SELECT * FROM <table_name>;"

Хотя это работает для этого конкретного варианта использования (в cli), у него есть два больших недостатка:

  • Я должен вручную обновлять переменные ENV на каждом узле при изменении
  • Рабочие процессы Oozie не могут читать переменные ENV

Есть ли способ использовать Ambari для получения этих настроек и могу ли я определить свои собственные пользовательские настройки, которые затем будут доступны на каждом узле? Есть ли подход, который работает и в рабочих процессах Oozie?


person Christoph Körner    schedule 29.08.2016    source источник


Ответы (1)


Вы можете принудительно использовать переменные среды для всего кластера через mapred-site.xml и yarn-site.xml, но я не уверен на 100%, какие свойства должны быть установлены в конфигурации службы ResourceManager. и/или каждую службу NodeManager и/или клиентские узлы. И какой уровень переопределяет (или добавляет) какой уровень. Вам придется провести некоторые исследования и эксперименты.

Изучите документацию для mapred-default.xml и yarn-default.xml (например, здесь и здесь для Hadoop 2.7.0) для таких свойств, как...

mapred.child.env
mapreduce.admin.user.env
yarn.app.mapreduce.am.env
yarn.app.mapreduce.am.admin.user.env
yarn.nodemanager.admin-env
yarn.nodemanager.env-whitelist

[Изменить] также посмотрите на эти свойства, которые не имеют надлежащей записи в списках "по умолчанию" (еще одна ошибка документации...) и забудьте о "mapred.child"

mapreduce.map.env 
mapreduce.reduce.env 


Для заданий Oozie есть два способа установить env. переменные:

  • Действия оболочки имеют явный <env-var>VAR=VALUE</env-var> синтаксис, поскольку сценарии оболочки много полагаются на env. переменные
  • все действия, использующие задание YARN "лаунчера" (например, Java, Pig, Sqoop, Spark, Hive, Hive2, Shell...), могут выиграть от
    <property>
    <name>oozie.launcher.xxx.xxx.xxx.env</name><value>****</value>
    </property>
    для переопределения значений в файлах конфигурации клиента, упомянутых выше.
  • Действия MapReduce запускаются напрямую, задания запуска нет, поэтому свойство будет установлено напрямую как
    <property>
    <name>xxx.xxx.xxx.env</name><value>****</value>
    </property>
  • кроме того, действия, определенные в основной схеме рабочего процесса (например, Java, Pig, MapReduce), могут использовать раздел <global> для определения свойства только один раз
    => увы, другие действия определены как подключаемые модули с отдельной схемой XML и не наследуют глобальные свойства...

К сожалению, документация для Oozie (например, здесь для Oozie 4.1) полностью не говоря о свойствах oozie.launcher.*, вам придется провести некоторое исследование в Stack Overflow - в тот пост например.

person Samson Scharfrichter    schedule 29.08.2016
comment
Спасибо за ваш ответ, это очень хороший обзор. В моем случае я закончил автоматически генерировать файлы свойств. - person Christoph Körner; 16.08.2017