用Python计划Google云数据流作业
目前,我知道,这些是计划数据流作业执行的方法:用Python计划Google云数据流作业,python,google-cloud-dataflow,Python,Google Cloud Dataflow,目前,我知道,这些是计划数据流作业执行的方法: 使用应用程序引擎Cron服务或云功能 这就是Java,有没有官方的Python示例这么简单 Python就是这样,但我不确定当前是一个好的选择还是“不推荐” 来自计算引擎中的cron作业 有这方面的教程吗 在流式管道中使用窗口 我认为这是最简单的,但是,总成本是最好的想法吗 云彩 这是有效的方法吗 有多种方法,但我认为对您来说非常方便的一种方法是使用Apache Airflow GCP以的形式为Apache Airflow提供托管
- 使用应用程序引擎Cron服务或云功能
- 这就是Java,有没有官方的Python示例这么简单
- Python就是这样,但我不确定当前是一个好的选择还是“不推荐”
- 来自计算引擎中的cron作业
- 有这方面的教程吗李>
- 在流式管道中使用窗口
- 我认为这是最简单的,但是,总成本是最好的想法吗
- 云彩
- 这是有效的方法吗
- 有多种方法,但我认为对您来说非常方便的一种方法是使用Apache Airflow
GCP以的形式为Apache Airflow提供托管服务,您可以使用该服务计划数据流管道或其他GCP操作。我使用App Engine Flex作为数据流启动器。这个微服务有端点,可以根据需要启动数据流作业,cron也可以这样做 这是我的项目结构:
df_tasks/
- __init__.py
- datastore_to_csv.py
- ...other_piplines
__init__.py
dflaunch.yaml
main.py
setup.py <-- used by pipelines
我的管道在df_tasks
中配置,然后如下所示:
pipeline_options = PipelineOptions.from_dictionary({
'project': project,
'runner': 'DataflowRunner',
'staging_location': bucket_path+'/staging',
'temp_location': bucket_path+'/temp',
'setup_file': './setup.py'
})
然后在main.py中:
from df_tasks import datastore_to_csv
project_id = os.environ['GCLOUD_PROJECT']
@app.route('/datastore-to-csv', methods=['POST'])
def df_day_summary():
# Extract Payload
payload = request.get_json()
model = payload['model']
for_date = datetime.datetime.strptime(payload['for_date'], '%Y/%m/%d')
except Exception as e:
print traceback.format_exc()
return traceback.format_exc()
# launch the job
try:
job_id, job_name = datastore_to_csv.run(
project=project_id,
model=model,
for_date=for_date,
)
# return the job id
return jsonify({'jobId': job_id, 'jobName': job_name})
except Exception as e:
print traceback.format_exc()
return traceback.format_exc()
我发现了,但我很想知道如何用python编写云函数。据我所知,最“最新”的方法是使用气流,因为如果您的作业失败,气流可以继续工作
from df_tasks import datastore_to_csv
project_id = os.environ['GCLOUD_PROJECT']
@app.route('/datastore-to-csv', methods=['POST'])
def df_day_summary():
# Extract Payload
payload = request.get_json()
model = payload['model']
for_date = datetime.datetime.strptime(payload['for_date'], '%Y/%m/%d')
except Exception as e:
print traceback.format_exc()
return traceback.format_exc()
# launch the job
try:
job_id, job_name = datastore_to_csv.run(
project=project_id,
model=model,
for_date=for_date,
)
# return the job id
return jsonify({'jobId': job_id, 'jobName': job_name})
except Exception as e:
print traceback.format_exc()
return traceback.format_exc()