使用Flink SQL客户端时,如何正确设置作业参数?
解决Flink自定义函数通过FunctionContext获取作业参数的问题
首先明确:SET语句仅适用于Flink SQL客户端的会话级配置,无法作为作业参数被FunctionContext.getJobParameter获取,这就是你用SET设置后不生效的原因。以下是两种可行的参数传递方式:
方式一:提交作业时通过--conf传递配置参数
在提交作业的命令中,用--conf指定作业级别的参数,格式为--conf "参数键=参数值":
flink run -c com.your.package.YourMainJob your-job.jar --conf "custom.param=hello-world"
在自定义函数中,直接通过FunctionContext获取:
@Override public void open(FunctionContext context) throws Exception { String paramValue = context.getJobParameter("custom.param", "default-value"); // 使用参数 }
方式二:通过ParameterTool配置全局作业参数
在作业主代码中,将命令行参数转换为ParameterTool并设置为全局作业参数:
import org.apache.flink.api.java.utils.ParameterTool; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; public class YourMainJob { public static void main(String[] args) throws Exception { ParameterTool params = ParameterTool.fromArgs(args); StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.getConfig().setGlobalJobParameters(params); // 构建作业逻辑... env.execute("Your Job Name"); } }
提交作业时直接传入键值对参数:
flink run -c com.your.package.YourMainJob your-job.jar --custom.param hello-world
自定义函数中获取参数的代码和方式一完全一致。
内容的提问来源于stack exchange,提问作者Khoi
相关产品推荐
相关产品推荐

