91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Flink區分運行環境的方法是什么

發布時間:2021-12-31 14:31:40 來源:億速云 閱讀:305 作者:iii 欄目:大數據

這篇文章主要介紹“Flink區分運行環境的方法是什么”,在日常操作中,相信很多人在Flink區分運行環境的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Flink區分運行環境的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Flink判斷運行環境(本地、集群)的邏輯如下:

(1)在任務的main方法中,通過 StreamExecutionEnvironment 獲取運行環境

StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();

(2)生成運行環境的工廠類放在ThreadLocal中;threadLocalContextEnvironmentFactory 是StreamExecutionEnvironment類的靜態屬性 

	/** The ThreadLocal used to store {@link StreamExecutionEnvironmentFactory}. */
	private static final ThreadLocal<StreamExecutionEnvironmentFactory> threadLocalContextEnvironmentFactory = new ThreadLocal<>();

①當是本地IDE直接運行任務main方法時,ThreadLocal中獲取到的StreamExecutionEnvironmentFactory為空,此時生成本地運行環境LocalStreamEnvironment

	public static StreamExecutionEnvironment getExecutionEnvironment() {
		return Utils.resolveFactory(threadLocalContextEnvironmentFactory, contextEnvironmentFactory)
			.map(StreamExecutionEnvironmentFactory::createExecutionEnvironment)
			.orElseGet(StreamExecutionEnvironment::createLocalEnvironment);
	}

當ThreadLocal中有StreamExecutionEnvironmentFactory時,則用其createExecutionEnvironment()方法來生成運行環境

②當集群環境時,是如何將StreamExecutionEnvironmentFactory放入到ThreadLocal中?

通過 bin/flink run ....   命令提交jar包到集群運行命令時,該腳本會調用 org.apache.flink.client.cli.CliFrontend  來運行用戶程序,如下:

.......
.......
# Add HADOOP_CLASSPATH to allow the usage of Hadoop file systems
exec $JAVA_RUN $JVM_ARGS $FLINK_ENV_JAVA_OPTS "${log_setting[@]}" -classpath "`manglePathList "$CC_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`" org.apache.flink.client.cli.CliFrontend "$@"

在CliFrontend中依次執行以下方法 main() ->  parseParameters() -> run() -> executeProgram() 

	protected void executeProgram(final Configuration configuration, final PackagedProgram program) throws ProgramInvocationException {
		ClientUtils.executeProgram(new DefaultExecutorServiceLoader(), configuration, program, false, false);
	}

在org.apache.flink.client.ClientUtils的executeProgram()中調用 StreamContextEnvironment.setAsContext(...),StreamContextEnvironment繼承自StreamExecutionEnvironment。setAsContext()代碼如下

	public static void setAsContext(
			final PipelineExecutorServiceLoader executorServiceLoader,
			final Configuration configuration,
			final ClassLoader userCodeClassLoader,
			final boolean enforceSingleJobExecution,
			final boolean suppressSysout) {
		StreamExecutionEnvironmentFactory factory = () -> new StreamContextEnvironment(
			executorServiceLoader,
			configuration,
			userCodeClassLoader,
			enforceSingleJobExecution,
			suppressSysout);
		initializeContextEnvironment(factory);
	}

創建生成運行環境的工廠類實例,在initializeContextEnvironment()方法中把實例放到StreamExecutionEnvironment類的靜態屬性threadLocalContextEnvironmentFactory 中 ,代碼如下

	protected static void initializeContextEnvironment(StreamExecutionEnvironmentFactory ctx) {
		contextEnvironmentFactory = ctx;
		threadLocalContextEnvironmentFactory.set(contextEnvironmentFactory);
	}

這樣在用戶程序 StreamExecutionEnvironment.getExecutionEnvironment() 時,獲取到的運行環境就是StreamContextEnvironment類的setAsContext()方法中生成的

	public static void setAsContext(
			final PipelineExecutorServiceLoader executorServiceLoader,
			final Configuration configuration,
			final ClassLoader userCodeClassLoader,
			final boolean enforceSingleJobExecution,
			final boolean suppressSysout) {
		StreamExecutionEnvironmentFactory factory = () -> new StreamContextEnvironment(
			executorServiceLoader,
			configuration,
			userCodeClassLoader,
			enforceSingleJobExecution,
			suppressSysout);
		......
	}

本地運行環境LocalStreamEnvironment 和 獨立集群、flink on yarn等運行環境StreamContextEnvironment 的主要區別在于,他們的成員屬性 configuration 不同。LocalStreamEnvironment 中是創建的空鍵值對(new Configuration()),而StreamContextEnvironment 是通過 CliFrontend 生成的 Configuration 對象。

到此,關于“Flink區分運行環境的方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴仁县| 三原县| 滨海县| 奇台县| 大邑县| 云林县| 高阳县| 洛南县| 汉寿县| 老河口市| 营口市| 饶河县| 黎城县| 南投市| 新郑市| 大荔县| 仙居县| 龙陵县| 上饶市| 夹江县| 通道| 海门市| 会昌县| 万源市| 双辽市| 会同县| 乐业县| 曲水县| 荔波县| 富平县| 仪陇县| 田东县| 开化县| 滦南县| 海安县| 读书| 麻栗坡县| 习水县| 东山县| 藁城市| 加查县|