9

EMR の boto3 クライアントを使用して spark-submit を実行しようとしています。以下のコードを実行した後、EMR ステップが送信され、数秒後に失敗しました。ステップログからの実際のコマンドラインは、EMR マスターで手動で実行した場合に機能します。

コントローラーのログには、複数のプロセスが同時に書き込みを行っているように見える、読み取りにくいゴミが表示されます。

UPD: command-runner.jarおよび EMR バージョン 4.0.0 および 4.1.0 を試しました

どんなアイデアでも大歓迎です。

コードフラグメント:

class ProblemExample:
    def run(self):
        session = boto3.Session(profile_name='emr-profile')
        client = session.client('emr')
        response = client.add_job_flow_steps(
        JobFlowId=cluster_id,
        Steps=[
            {
                'Name': 'string',
                'ActionOnFailure': 'CONTINUE',
                'HadoopJarStep': {
                    'Jar': 's3n://elasticmapreduce/libs/script-runner/script-runner.jar',
                    'Args': [
                        '/usr/bin/spark-submit',
                        '--verbose',
                        '--class',
                        'my.spark.job',
                        '--jars', '<dependencies>',
                        '<my spark job>.jar'
                    ]
                }
            },
        ]
    )
4

1 に答える 1

17

最後に、 --jars 値を適切にエスケープすることで問題が解決しました。

spark-submit はクラスを見つけられずに失敗していましたが、乱雑なログの背景ではエラーは明確ではありません。

有効な例は次のとおりです。

class Example:
  def run(self):
    session = boto3.Session(profile_name='emr-profile')
    client = session.client('emr')
    response = client.add_job_flow_steps(
    JobFlowId=cluster_id,
    Steps=[
        {
            'Name': 'string',
            'ActionOnFailure': 'CONTINUE',
            'HadoopJarStep': {
                'Jar': 'command-runner.jar',
                'Args': [
                    '/usr/bin/spark-submit',
                    '--verbose',
                    '--class',
                    'my.spark.job',
                    '--jars', '\'<coma, separated, dependencies>\'',
                    '<my spark job>.jar'
                ]
            }
        },
    ]
)
于 2015-10-26T10:17:51.773 に答える