Как включить URI jar в функцию отправки задания в Dataproc - PullRequest
3 голосов
/ 07 октября 2019

Я пытаюсь запустить задание PySpark через jupyter, и мне нужно создать функцию для запуска задания. Мне нужно передать файл JAR, и я пытаюсь выяснить, как это сделать. Я нашел некоторую документацию по этому вопросу: https://cloud.google.com/dataproc/docs/reference/rpc/google.cloud.dataproc.v1#google.cloud.dataproc.v1.SubmitJobRequest

https://cloud.google.com/dataproc/docs/reference/rest/v1beta2/HadoopJob

Но я не могу понять, как именно добавить URI в функцию. Моя функция в настоящее время выглядит примерно так:

from google.cloud import dataproc_v1

def submit_pyspark_job(dataproc_cluster_client, project, region, cluster_name, bucket_name,
                       filename):
    """Submit the Pyspark job to the cluster (assumes `filename` was uploaded
    to `bucket_name."""
    job_details = {
        'placement': {
            'cluster_name': cluster_name
        },
        'pyspark_job': {
            'jar_file_uris':'gs://hadoop-lib/bigquery/bigquery-connector-hadoop2-latest.jar', #PROBLEM HERE!
            'main_python_file_uri': 'gs://{}/{}'.format(bucket_name, filename)
        }
    }

    result = dataproc_cluster_client.submit_job(
        project_id=project, region=region, job=job_details)
    job_id = result.reference.job_id
    print('Submitted job ID {}.'.format(job_id))
    return job_id

Проблема в части jar_file_uris аргумента сведений о работе. В настоящее время я получаю сообщение об ошибке.

1 Ответ

2 голосов
/ 07 октября 2019

Так что я разобрался с исправлением. Вместо этого функция должна быть объявлена ​​как:

def submit_pyspark_job(dataproc_cluster_client, project, region, cluster_name, bucket_name,
                       filename):
    """Submit the Pyspark job to the cluster (assumes `filename` was uploaded
    to `bucket_name."""
    job_details = {
        'placement': {
            'cluster_name': cluster_name
        },
        'pyspark_job': {
            'main_python_file_uri': 'gs://{}/{}'.format(bucket_name, filename),
            'jar_file_uris':['gs://hadoop-lib/bigquery/bigquery-connector-hadoop2-latest.jar']
        }
    }

    result = dataproc_cluster_client.submit_job(
        project_id=project, region=region, job=job_details)
    job_id = result.reference.job_id
    print('Submitted job ID {}.'.format(job_id))
    return job_id

URI должен передаваться как массив, а не строка. Это решает проблему.

...