pyflink是否可调试

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

pyflink是否可调试

Lucas
基于flink1.12.0版本的pyflink开发了一个程序,使用了udaf,想在本地的PyCharm环境调试该功能,在udaf的第一行打了断点,但是没法进入。
可以确认程序有正确运行,因为sink到kafka里看了是有数据的。
请问是否需要什么配置才能进行调试。



[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: pyflink是否可调试

Xingbo Huang
Hi,
想要调试可以使用的方式为
1. 在PyCharm里创建一个Python Remote Debug
run -> Python Remote Debug -> + -> 选择一个端口(比如6789)

2. 安装pydevd-pycharm(你PyCharm使用的python解释器)
pip install pydevd-pycharm
其实上一步那个界面也有指导你安装了

3.  将以下代码插入到你要断点的udaf的代码前面(这段代码其实也是来自第一步创建remote debug里面)
import pydevd_pycharm
pydevd_pycharm.settrace('localhost', port=6789, stdoutToServer=True,
stderrToServer=True)

例如
@udaf(result_type=DataTypes.INT(), func_type="pandas")
def mean_udaf(v):
    import pydevd_pycharm
    pydevd_pycharm.settrace('localhost', port=6789, stdoutToServer=True,
stderrToServer=True)
    v.mean()

4. 在你的PyCharm里面点击Debug启动你刚刚创建的Remote Debug Server

5. 直接点击Run运行你的作业,这个时候会断点在你的udaf的代码里面了

Best,
Xingbo

[hidden email] <[hidden email]> 于2020年12月15日周二 上午9:25写道:

>
> 基于flink1.12.0版本的pyflink开发了一个程序,使用了udaf,想在本地的PyCharm环境调试该功能,在udaf的第一行打了断点,但是没法进入。
> 可以确认程序有正确运行,因为sink到kafka里看了是有数据的。
> 请问是否需要什么配置才能进行调试。
>
>
>
> [hidden email]
>
Reply | Threaded
Open this post in threaded view
|

Re: Re: pyflink是否可调试

Lucas
Hi Xingbo,

多谢指导,亲测有效。
源python文件运行一会儿本身就结束运行了,过阵子后才会跳到断点里。
所以源python文件只是做了个提交的动作,实际执行都是异步执行,是否可以这么理解?
如果是的话,之前已经运行过很多次源python文件,是否本地已经在后台异步运行了多次?是的话是否能监控到这些任务?



[hidden email]
 
发件人: Xingbo Huang
发送时间: 2020-12-15 09:59
收件人: user-zh
主题: Re: pyflink是否可调试
Hi,
想要调试可以使用的方式为
1. 在PyCharm里创建一个Python Remote Debug
run -> Python Remote Debug -> + -> 选择一个端口(比如6789)
 
2. 安装pydevd-pycharm(你PyCharm使用的python解释器)
pip install pydevd-pycharm
其实上一步那个界面也有指导你安装了
 
3.  将以下代码插入到你要断点的udaf的代码前面(这段代码其实也是来自第一步创建remote debug里面)
import pydevd_pycharm
pydevd_pycharm.settrace('localhost', port=6789, stdoutToServer=True,
stderrToServer=True)
 
例如
@udaf(result_type=DataTypes.INT(), func_type="pandas")
def mean_udaf(v):
    import pydevd_pycharm
    pydevd_pycharm.settrace('localhost', port=6789, stdoutToServer=True,
stderrToServer=True)
    v.mean()
 
4. 在你的PyCharm里面点击Debug启动你刚刚创建的Remote Debug Server
 
5. 直接点击Run运行你的作业,这个时候会断点在你的udaf的代码里面了
 
Best,
Xingbo
 
[hidden email] <[hidden email]> 于2020年12月15日周二 上午9:25写道:
 
>
> 基于flink1.12.0版本的pyflink开发了一个程序,使用了udaf,想在本地的PyCharm环境调试该功能,在udaf的第一行打了断点,但是没法进入。
> 可以确认程序有正确运行,因为sink到kafka里看了是有数据的。
> 请问是否需要什么配置才能进行调试。
>
>
>
> [hidden email]
>
Reply | Threaded
Open this post in threaded view
|

Re: Re: pyflink是否可调试

Xingbo Huang
In reply to this post by Xingbo Huang
Hi,

客户端写的python代码会在一个客户端的进程通过py4j调用flink
java的代码去编译你的作业(这里有一个客户端的Python进程,只是用来编译代码生成pipeline),
然后实际运行时,非python代码部分(就是非各种udf的逻辑是运行在JVM里面的),python部分(各种udf)是运行在另一个Python进程里面的。
实际上,在下一个1.13版本我们有考虑在你本地运行调试的时候,将实际运行python代码的重连回客户端那个编译Python代码的进程,这样可以更利于你的本地调试,就不用开启remote
debug了。

Best,
Xingbo

[hidden email] <[hidden email]> 于2020年12月15日周二 上午10:29写道:

> Hi Xingbo,
>
> 多谢指导,亲测有效。
> 源python文件运行一会儿本身就结束运行了,过阵子后才会跳到断点里。
> 所以源python文件只是做了个提交的动作,实际执行都是异步执行,是否可以这么理解?
> 如果是的话,之前已经运行过很多次源python文件,是否本地已经在后台异步运行了多次?是的话是否能监控到这些任务?
>
>
>
> [hidden email]
>
> 发件人: Xingbo Huang
> 发送时间: 2020-12-15 09:59
> 收件人: user-zh
> 主题: Re: pyflink是否可调试
> Hi,
> 想要调试可以使用的方式为
> 1. 在PyCharm里创建一个Python Remote Debug
> run -> Python Remote Debug -> + -> 选择一个端口(比如6789)
>
> 2. 安装pydevd-pycharm(你PyCharm使用的python解释器)
> pip install pydevd-pycharm
> 其实上一步那个界面也有指导你安装了
>
> 3.  将以下代码插入到你要断点的udaf的代码前面(这段代码其实也是来自第一步创建remote debug里面)
> import pydevd_pycharm
> pydevd_pycharm.settrace('localhost', port=6789, stdoutToServer=True,
> stderrToServer=True)
>
> 例如
> @udaf(result_type=DataTypes.INT(), func_type="pandas")
> def mean_udaf(v):
>     import pydevd_pycharm
>     pydevd_pycharm.settrace('localhost', port=6789, stdoutToServer=True,
> stderrToServer=True)
>     v.mean()
>
> 4. 在你的PyCharm里面点击Debug启动你刚刚创建的Remote Debug Server
>
> 5. 直接点击Run运行你的作业,这个时候会断点在你的udaf的代码里面了
>
> Best,
> Xingbo
>
> [hidden email] <[hidden email]> 于2020年12月15日周二 上午9:25写道:
>
> >
> >
> 基于flink1.12.0版本的pyflink开发了一个程序,使用了udaf,想在本地的PyCharm环境调试该功能,在udaf的第一行打了断点,但是没法进入。
> > 可以确认程序有正确运行,因为sink到kafka里看了是有数据的。
> > 请问是否需要什么配置才能进行调试。
> >
> >
> >
> > [hidden email]
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: Re: pyflink是否可调试

Lucas
1.13版本pyflink很多优化项啊,期待下个版本



[hidden email]
 
发件人: Xingbo Huang
发送时间: 2020-12-15 10:37
收件人: user-zh
主题: Re: Re: pyflink是否可调试
Hi,
 
客户端写的python代码会在一个客户端的进程通过py4j调用flink
java的代码去编译你的作业(这里有一个客户端的Python进程,只是用来编译代码生成pipeline),
然后实际运行时,非python代码部分(就是非各种udf的逻辑是运行在JVM里面的),python部分(各种udf)是运行在另一个Python进程里面的。
实际上,在下一个1.13版本我们有考虑在你本地运行调试的时候,将实际运行python代码的重连回客户端那个编译Python代码的进程,这样可以更利于你的本地调试,就不用开启remote
debug了。
 
Best,
Xingbo
 
[hidden email] <[hidden email]> 于2020年12月15日周二 上午10:29写道:
 

> Hi Xingbo,
>
> 多谢指导,亲测有效。
> 源python文件运行一会儿本身就结束运行了,过阵子后才会跳到断点里。
> 所以源python文件只是做了个提交的动作,实际执行都是异步执行,是否可以这么理解?
> 如果是的话,之前已经运行过很多次源python文件,是否本地已经在后台异步运行了多次?是的话是否能监控到这些任务?
>
>
>
> [hidden email]
>
> 发件人: Xingbo Huang
> 发送时间: 2020-12-15 09:59
> 收件人: user-zh
> 主题: Re: pyflink是否可调试
> Hi,
> 想要调试可以使用的方式为
> 1. 在PyCharm里创建一个Python Remote Debug
> run -> Python Remote Debug -> + -> 选择一个端口(比如6789)
>
> 2. 安装pydevd-pycharm(你PyCharm使用的python解释器)
> pip install pydevd-pycharm
> 其实上一步那个界面也有指导你安装了
>
> 3.  将以下代码插入到你要断点的udaf的代码前面(这段代码其实也是来自第一步创建remote debug里面)
> import pydevd_pycharm
> pydevd_pycharm.settrace('localhost', port=6789, stdoutToServer=True,
> stderrToServer=True)
>
> 例如
> @udaf(result_type=DataTypes.INT(), func_type="pandas")
> def mean_udaf(v):
>     import pydevd_pycharm
>     pydevd_pycharm.settrace('localhost', port=6789, stdoutToServer=True,
> stderrToServer=True)
>     v.mean()
>
> 4. 在你的PyCharm里面点击Debug启动你刚刚创建的Remote Debug Server
>
> 5. 直接点击Run运行你的作业,这个时候会断点在你的udaf的代码里面了
>
> Best,
> Xingbo
>
> [hidden email] <[hidden email]> 于2020年12月15日周二 上午9:25写道:
>
> >
> >
> 基于flink1.12.0版本的pyflink开发了一个程序,使用了udaf,想在本地的PyCharm环境调试该功能,在udaf的第一行打了断点,但是没法进入。
> > 可以确认程序有正确运行,因为sink到kafka里看了是有数据的。
> > 请问是否需要什么配置才能进行调试。
> >
> >
> >
> > [hidden email]
> >
>