关于Flink 命令行参数广播的问题

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

关于Flink 命令行参数广播的问题

aven.wu
Hi,大家好!
遇到一个问题,在使用flink run 提交任务时命令行参数也是就那些被main方法接收的那些,不知道如何在taskManager获取到。导致必须从外部系统(hdfs,文件)来读取例如ES,mysql等连接配置。Flink是否有这种广播命令行参数的能力,如果没有是否会考虑加入这个特性。

Best
Aven

Reply | Threaded
Open this post in threaded view
|

Re: 关于Flink 命令行参数广播的问题

zhisheng
hi,aven.wu

可以使用 ParameterTool
获取到传入的参数,然后通过 env.getConfig().setGlobalJobParameters(parameterTool);

在算子中可以在 open 方法里面通过
getRuntimeContext().getExecutionConfig().getGlobalJobParameters(); 获取到配置

aven.wu <[hidden email]> 于2020年3月11日周三 下午3:42写道:

> Hi,大家好!
> 遇到一个问题,在使用flink run
> 提交任务时命令行参数也是就那些被main方法接收的那些,不知道如何在taskManager获取到。导致必须从外部系统(hdfs,文件)来读取例如ES,mysql等连接配置。Flink是否有这种广播命令行参数的能力,如果没有是否会考虑加入这个特性。
>
> Best
> Aven
>
>
Reply | Threaded
Open this post in threaded view
|

回复: 关于Flink 命令行参数广播的问题

aven.wu
Hello
还有一个问题,除了在算子的Open方法中获取这个参数还有别的地方可以获取吗?或者在Gobgraph启动的生命周期里面有哪个阶段可以被调用提执行一些用户代码。
我的需求是需要通过命令行参数初始化一些静态类的属性,全局的静态类会被算子调用以执行某些通用的功能,如果我在open方法中去初始化的话是不太优雅,并且为了保证可用必须在每个算子的Open方法中都调用,对于一些非Rich的算子使用静态方法就会有问题。

Best
Aven

发件人: zhisheng
发送时间: 2020年3月11日 21:16
收件人: user-zh
主题: Re: 关于Flink 命令行参数广播的问题

hi,aven.wu

可以使用 ParameterTool
获取到传入的参数,然后通过 env.getConfig().setGlobalJobParameters(parameterTool);

在算子中可以在 open 方法里面通过
getRuntimeContext().getExecutionConfig().getGlobalJobParameters(); 获取到配置

aven.wu <[hidden email]> 于2020年3月11日周三 下午3:42写道:

> Hi,大家好!
> 遇到一个问题,在使用flink run
> 提交任务时命令行参数也是就那些被main方法接收的那些,不知道如何在taskManager获取到。导致必须从外部系统(hdfs,文件)来读取例如ES,mysql等连接配置。Flink是否有这种广播命令行参数的能力,如果没有是否会考虑加入这个特性。
>
> Best
> Aven
>
>

Reply | Threaded
Open this post in threaded view
|

Re: 关于Flink 命令行参数广播的问题

tison
Hi Aven,

静态字段的使用可能会很 tricky,因为只有同一个 task 的代码才运行在同一个 classloader 里。我见过想用静态字段做全局 Map
存储的,那个实际上只有并行度设置为 1 的时候语义才对。

你说启动的生命周期执行一些用户代码,那其实就是 RichFunction 的 open
方法,它就是设计来做这个的。具体可以看你的实际业务,未必要搞得这么奇怪(x

Best,
tison.


aven.wu <[hidden email]> 于2020年3月12日周四 上午10:54写道:

> Hello
>
> 还有一个问题,除了在算子的Open方法中获取这个参数还有别的地方可以获取吗?或者在Gobgraph启动的生命周期里面有哪个阶段可以被调用提执行一些用户代码。
>
> 我的需求是需要通过命令行参数初始化一些静态类的属性,全局的静态类会被算子调用以执行某些通用的功能,如果我在open方法中去初始化的话是不太优雅,并且为了保证可用必须在每个算子的Open方法中都调用,对于一些非Rich的算子使用静态方法就会有问题。
>
> Best
> Aven
>
> 发件人: zhisheng
> 发送时间: 2020年3月11日 21:16
> 收件人: user-zh
> 主题: Re: 关于Flink 命令行参数广播的问题
>
> hi,aven.wu
>
> 可以使用 ParameterTool
> 获取到传入的参数,然后通过 env.getConfig().setGlobalJobParameters(parameterTool);
>
> 在算子中可以在 open 方法里面通过
> getRuntimeContext().getExecutionConfig().getGlobalJobParameters(); 获取到配置
>
> aven.wu <[hidden email]> 于2020年3月11日周三 下午3:42写道:
>
> > Hi,大家好!
> > 遇到一个问题,在使用flink run
> >
> 提交任务时命令行参数也是就那些被main方法接收的那些,不知道如何在taskManager获取到。导致必须从外部系统(hdfs,文件)来读取例如ES,mysql等连接配置。Flink是否有这种广播命令行参数的能力,如果没有是否会考虑加入这个特性。
> >
> > Best
> > Aven
> >
> >
>
>