Доступ к конфигурации Oozie в программе Spark

У меня есть переменная среды, сохраненная в моем файле .bash_profile. Я пытаюсь получить к нему доступ через программу Spark, используя метод sys.env() в Scala. Когда у меня нет Oozie Scheduling, я могу правильно получить доступ к переменной среды в Spark. Однако, когда я пытаюсь запланировать свою программу с помощью Oozie, программа выдает ошибку, что она не может прочитать переменную env.

Вот мой рабочий процесс.xml:

<workflow-app xmlns='uri:oozie:workflow:0.5' name='Security-User-Management'>

    <start to='spark-node' />

    <action name='spark-node'>
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
                <delete path="hdfs://<some hdfs url>/user/clsadmin/cmdw-security/cmdw-security-logs"/>
                <mkdir path="hdfs://<some hdfs url>/user/clsadmin/cmdw-security/cmdw-security-logs"/>
            </prepare>
            <configuration>
                <property>
                    <name>CMDW_CLOUD_USERNAME</name>
                    <value>abcd</value>
                </property>
            </configuration>
            <master>${master}</master>
            <name>CMDW-Security-User-Management</name>
            <class>custom.cmdwldap.executable.Test</class>
            <jar>hdfs://some hdfs url/user/clsadmin/security/Security.jar</jar>
            <arg>CMDW_CLOUD_USERNAME=abcd</arg>
        </spark>
        <ok to="end" />
        <error to="fail" />
    </action>

    <kill name="fail">
        <message>Workflow failed, error message:
            ${wf:errorMessage(wf:lastErrorNode())}
        </message>
    </kill>
    <end name="end" />
</workflow-app>

Как мне прочитать configuration в моем коде Scala..


person Sparker0i    schedule 14.01.2020    source источник


Ответы (1)


  1. Попробуйте запустить задание в режиме пряжи-кластера с пограничного узла. Он не сможет распознать эти переменные, поскольку драйвер spark работает в другом узле данных кластера, в .bash_profile которого эта переменная может не быть объявлена. В пограничном узле .bash_profile объявлены переменные, поэтому задание успешно выполнялось, когда вы тестировали скрипт, запустив spark-submit в локальном режиме или в режиме yarn-client.

Запуск из EdgeNode: spark-submit local ---> Задание выполняется в граничном узле.

Запуск из EdgeNode: spark-submit yarn-client ---> Задание запускается с драйвером в граничном узле и исполнителями в узлах данных кластера.

Запуск из EdgeNode: spark-submit yarn-cluster ---> Задание запускается в граничном узле, драйвер запускается в одном из узлов данных, а исполнители запускаются в остальных узлах данных.

  1. Как и действие оболочки, Oozie выполняет другие действия на другом вычислительном узле (возможно, одном из узлов данных) в кластере Hadoop, отличном от пограничного узла. Эта концепция становится сложной, когда вы думаете о пряже-клиенте и пряже-кластере. При запуске из Oozie работа завершается сбоем, так как переменные отсутствуют в .bash_profile узлов данных.

Выполнить из действия искры Oozie: spark-submit local ---> Задание выполняется локально в одном из узлов данных.

Выполнить из действия искры Oozie: spark-submit yarn-client ---> Задание запускается с драйвером в одном из узлов данных и исполнителями в остальных узлах данных кластера.

Запуск из действия искры Oozie: spark-submit yarn-cluster ---> Задание запускается в одном из узлов данных, драйвер запускается в другом узле данных, а исполнители запускаются в остальных узлах данных.

См.: https://oozie.apache.org/docs/5.2.0/WorkflowFunctionalSpec.html#ActionNodes

https://spark.apache.org/docs/latest/cluster-overview.html

Oozie › в чем разница между асинхронными действиями и синхронными действиями

person yammanuruarun    schedule 15.01.2020
comment
В порядке. Оставляя в стороне часть переменных среды, я дал propertyies внутри configuration. Разве мы не можем прочитать это в нашей программе Spark? Если да, то как? - person Sparker0i; 16.01.2020
comment
Посмотрите, поможет ли это вашим потребностям. один из способов — использовать typesafe jar typesafe-config-2.10.1.jar. stackoverflow.com/questions/28966791/ и medium.com/@ramkarnani24/ - person yammanuruarun; 16.01.2020