uncleguanghui / pyflink_learn

基于 PyFlink 的学习文档,通过一个个小实践,便于大家快速入手 PyFlink
269 stars 97 forks source link

关于python run 和flink run 的问题 #4

Closed yifanfish233 closed 3 years ago

yifanfish233 commented 3 years ago

您好,

能否再请教一下,为啥网上其他pyflink示例可以通过python 解释器直接运行(环境相同),但是您的example 代码都得是 flink run -py 这样的呢?

对比了一下官方example里的wordcount, 最后一行 有 t_env.execute(‘xxx’), 是因为这个原因吗? 抑或是table env设置时候是

env_settings = EnvironmentSettings.new_instance().in_batch_mode().use_blink_planner().build()
t_env = BatchTableEnvironment.create(environment_settings=env_settings)

官方example 是

    t_config = TableConfig()
    env = ExecutionEnvironment.get_execution_environment()
    t_env = BatchTableEnvironment.create(env, t_config)

的原因?

感谢指导~

uncleguanghui commented 3 years ago

其实都是一样的,只是不同的作业提交模式。

python xxx.py 是用 localjvm 模式来提交作业,不涉及到跟集群交互,适合本地开发。

flink run xxxx 是用集群模式来提交作业,与线上环境更为一致,而且还能利用 flink 自带的 webui 界面来获得作业的运行详情,便于发现潜在问题。

yifanfish233 commented 3 years ago

其实都是一样的,只是不同的作业提交模式。

python xxx.py 是用 localjvm 模式来提交作业,不涉及到跟集群交互,适合本地开发。

flink run xxxx 是用集群模式来提交作业,与线上环境更为一致,而且还能利用 flink 自带的 webui 界面来获得作业的运行详情,便于发现潜在问题。

嗯,这我能理解,毕竟python 的没有jobID,实际上就是java 在工作。 但是为何官方的word_count example 可以两种模式跑,但是您的示例代码只能flink run, 我不明白是差别在哪里。。。

uncleguanghui commented 3 years ago

你是指哪个案例呢?好像我的代码也可以 python 直接运行吧

yifanfish233 commented 3 years ago

你是指哪个案例呢?好像我的代码也可以 python 直接运行吧

我刚跑了一下example 1, 如果是python batch.py 那 result.csv 结果是空的, 如果flink run -py batch.py 则里面包含两个文件。 其他的好像也同理。

uncleguanghui commented 3 years ago

还真是。。。那就应该是两者的综合作用吧:环境设置和执行语句的设置。可以研究一下