国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Apache Flink 掃雷系列 - PyFlink如何解決多JAR包依賴問題

開發(fā) 開發(fā)工具
本篇核心介紹了PyFlink的用戶如何解決多JARs依賴作業(yè)提交問題,也許這不是最Nice的解決方法,但至少是你解決多JARs依賴作業(yè)提交的方法之一。

《Apache Flink 掃雷系列》簡介

本篇是《Apache Flink 掃雷系列》的第一篇,所以簡單介紹一下這一系列的特點,本系列所定義的”雷”是指由于目前Apache Flink目前的設(shè)計問題導(dǎo)致的用戶非便利性問題的臨時解決辦法。那么為什么明知道有設(shè)計問題還不進行設(shè)計重構(gòu),避免這些”雷”的存在呢?其實社區(qū)的發(fā)展和我們各個公司內(nèi)部產(chǎn)品發(fā)展一樣,都有一些客觀因素導(dǎo)致實際存在的問題無法及時得到解決,比如,社區(qū)的Release或者內(nèi)部產(chǎn)品發(fā)布的的周期問題,在沒有新的Release之前的一些對用戶非友好的問題就需要有一些“非正規(guī)”的解決方式,或者說是臨時解決方案,這種方案的特點就是,能解決問題,但不是通用性解決手段,只能民間流傳,不能官方宣揚。所以《Apache Flink 掃雷系列》就是為大家提供能夠解決大家現(xiàn)實問題,但是可能不是最佳實踐,大家在這系列中可以有更大的反哺社區(qū)的機會:)

開篇說”雷”

本篇的”雷”是目前針對Apache Flink 1.10集以前版本中,在利用CLI提交作業(yè)時候只能提交一個JAR的功能問題解決,也就是針對命令參數(shù)-j,--jarfile Flink program JAR file. 的問題。目前 -j只允許用戶提供一個JAR包,這在很多場景是不太合理的,不用說用戶自己的JAR包,就單說Flink用戶使用的Connector的JAR,在一個作業(yè)里面就可以能使用多個不同的Connector類型,比如在《PyFlink 場景案例 - PyFlink實現(xiàn)CDN日志實時分析》為例,就用了Kafka,MySql,CSV等多種功能JAR包的依賴。這個普遍的問題就是要用手工方式將這三個JARs合并成一個,然后提交作業(yè)時候用-j選項上傳到集群。

掃雷難度

面對合并多個JAR包,也許Java用戶還好(雖然不便利,但應(yīng)該都會操作),但對于Python用戶,在沒有涉及過Java開發(fā)的情況下,可能要花費一些時間來完成JARs的合并,甚至有可能有種無從下手的感覺。所以本篇主要針對的是不了解Java的Flink Python用戶。

案例選取

為了大家能夠?qū)嶋H的體驗實際效果,我們選取一個具體的案例來說明如果進行多JARs的合并。我們就選取我在2020年3月17日直播中所說的《PyFlink 場景案例 - PyFlink實現(xiàn)CDN日志實時分析》來進行說明。

案例回顧

PyFlink 場景案例 - PyFlink實現(xiàn)CDN日志實時分析》核心是針對灌入Kafka的CDN日志數(shù)據(jù)經(jīng)過PyFlink進行按地區(qū)的下載量,下載速度的統(tǒng)計,最終將統(tǒng)計數(shù)據(jù)寫入到MySql中。同時放入到Kafka的數(shù)據(jù)格式是CSV('format.type' = 'csv')。所以我們依賴的JARs如下:

  • flink-sql-connector-kafka_2.11-1.10.0.jar
  • flink-jdbc_2.11-1.10.0.jar
  • flink-csv-1.10.0-sql-jar.jar
  • mysql-connector-java-8.0.19.jar

我們可以用如下命令下載:

  1. $ curl -O https://repo1.maven.org/maven2/org/apache/flink/flink-sql-connector-kafka_2.11/1.10.0/flink-sql-connector-kafka_2.11-1.10.0.jar 
  2. $ curl -O https://repo1.maven.org/maven2/org/apache/flink/flink-jdbc_2.11/1.10.0/flink-jdbc_2.11-1.10.0.jar 
  3. $ curl -O https://repo1.maven.org/maven2/org/apache/flink/flink-csv/1.10.0/flink-csv-1.10.0-sql-jar.jar 
  4. $ curl -O https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.19/mysql-connector-java-8.0.19.jar 

我們將如上4個JARs下載到某個目錄,我這里下載到本機的temp目錄:

“雷”存在的場景說明

為啥在博客《PyFlink 場景案例 - PyFlink實現(xiàn)CDN日志實時分析》并沒有提到要合并JARs的問題? 是的,這個“雷”的存在是有一定的條件的:

作業(yè)提交的集群環(huán)境沒有預(yù)先安裝你所有需要的JARs(大部分情況都是不會安裝的)

上面條件是必須成立,才會存在掃雷的問題。那么在博客中我在集群環(huán)境預(yù)安裝了說需要的JARs,也就是博客中提到的下載JARs到集群lib目錄

  1. PYFLINK_LIB=python -c "import pyflink;import os;print(os.path.dirname(os.path.abspath(pyflink.__file__))+'/lib')") 

的操作。

合并JARs的注意點

合并JARs的一個很重要的點是涉及到了JAR包的Service Provider機制,詳細規(guī)范詳見。這是讓Python人員是很難注意到的合并重點。JAR包的Service Provider機制會允許在JAR包的META-INF/services目錄下保存Service Provider的配置文件。簡單說就是他為開發(fā)者提供了一種擴展機制,在開發(fā)階段只是定義接口,然后在包含實現(xiàn)的JAR包進行實現(xiàn)配置,就可以調(diào)用到實際接口的實現(xiàn)類。關(guān)于JAR包META-INF目錄結(jié)構(gòu)簡單說明如下:

  • META-INF - 目錄中的下列文件和目錄獲得Java 2平臺的認可與解釋,用來配置應(yīng)用程序、擴展程序、類加載器和服務(wù):
  • MANIFEST.MF - 清單文件,用來定義與擴展和數(shù)據(jù)包相關(guān)的數(shù)據(jù)。
  • INDEX.LIST - 這個文件由JAR工具的新“-i”選項生成,其中包含在一個應(yīng)用程序或擴展中定義的數(shù)據(jù)包的地址信息。它是JarIndex的一部分,被類加載器用來加速類加載過程。
  • x.SF - JAR文件的簽名文件。x代表基礎(chǔ)文件名。
  • x.DSA - 這個簽名塊文件與同名基礎(chǔ)簽名文件有關(guān)。此文件存儲對應(yīng)簽名文件的數(shù)字簽名。
  • services - 這個目錄存儲所有服務(wù)提供程序配置文件。

注意:provider配置文件必須是以UTF-8編碼。

合并操作

1. 解壓JARs

  1. $ mkdir jobjar csv jdbc kafka mysql 

其中jobjar存放最終我們打包的JAR內(nèi)容, csv jdbc kafka mysql存放對應(yīng)的JAR所解壓的內(nèi)容。具體命令如下:

  1. $ unzip flink-csv-1.10.0-sql-jar.jar -d csv/ 
  2. $ unzip flink-sql-connector-kafka_2.11-1.10.0.jar -d kafka/ 
  3. $ unzip flink-jdbc_2.11-1.10.0.jar -d jdbc/ 
  4. $ unzip mysql-connector-java-8.0.19.jar -d mysql 

解壓之后我們會在剛才的目錄得到如下文件內(nèi)容:

我們核心要處理的是class文件夾和 META-INF/services文件夾,如圖csv和kafka的JAR解壓之后的內(nèi)容。其中,Class文件夾可以直接拷貝。但是services要進行同名的合并,比如上用于Flink的Connector的服務(wù)發(fā)現(xiàn)配置org.apache.flink.table.factories.TableFactory是需要將文件內(nèi)容進行合并的。

2. 合并JARs

首先我們創(chuàng)建META-INF和META-INF/services目錄,目錄結(jié)構(gòu)如下:

  1. jincheng:jobjar jincheng.sunjc$ tree -L 2 
  2. └── META-INF 
  3.     └── services 
  4. 2 directories, 0 files 

(1) class文件合并

將csv jdbc kafka mysql的class直接copy到j(luò)objar目錄,如下:

  1. $ cp -rf ../csv/org . 
  2. $ cp -rf ../jdbc/org . 
  3. $ cp -rf ../kafka/org . 
  4. $ cp -rf ../mysql/com . 
  5. $ tree -L 2 
  6.   . 
  7.   ├── META-INF 
  8.   │   └── services 
  9.   ├── com 
  10.   │   └── mysql 
  11.   └── org 
  12.       └── apache 

詳細的目錄結(jié)構(gòu)如下:

(2) services合并

Service Provider是JAR的一個標準,不僅僅Flink的Connector使用了Service Provider機制,同時Kafka使用了配置的服務(wù)發(fā)現(xiàn)。所以我們要將所有的services里面的內(nèi)容按文件名進行合并。以csv和kafka為例:

在CSV里面的META-INF/services里面只有一個和Flink的connector相關(guān)的配置,內(nèi)容如下:

在Kafka里面的META-INF/services里面有Flink的connector相關(guān)的配置和Kafka內(nèi)部使用的配置,內(nèi)容如下:

所以我們需要將Kafka相關(guān)的直接copy到j(luò)objar/META-INF/services/目錄,然后將csv和Kafka關(guān)于org.apache.flink.table.factories.TableFactory的配置進行內(nèi)容合并。合并的內(nèi)容如下:

  1. # Licensed to the Apache Software Foundation (ASF) under 
  2. ... 
  3. ... 
  4. # limitations under the License. 
  5.  
  6. org.apache.flink.formats.csv.CsvRowFormatFactory 
  7. org.apache.flink.streaming.connectors.kafka.KafkaTableSourceSinkFactory 

我們最終將4個JARs的services配置進行合并之后的最終代碼如下:

  1. # Licensed to the Apache Software Foundation (ASF) under 
  2. ... 
  3. ... 
  4. # limitations under the License. 
  5.  
  6. org.apache.flink.formats.csv.CsvRowFormatFactory 
  7. org.apache.flink.streaming.connectors.kafka.KafkaTableSourceSinkFactory 
  8. org.apache.flink.api.java.io.jdbc.JDBCTableSourceSinkFactory 

大家可以嘗試使用的命令如下:

  1. $ cat ../csv/META-INF/services/org.apache.flink.table.factories.TableFactory | grep ^[^#] >> META-INF/services/org.apache.flink.table.factories.TableFactory 
  2. $ cat ../kafka/META-INF/services/org.apache.flink.table.factories.TableFactory | grep ^[^#] >> META-INF/services/org.apache.flink.table.factories.TableFactory 
  3. $ cat ../kafka/META-INF/services/org.apache.flink.kafka.shaded.org.apache.kafka.common.config.provider.ConfigProvider | grep ^[^#] >> META-INF/services/org.apache.flink.kafka.shaded.org.apache.kafka.common.config.provider.ConfigProvider 
  4. $ cat ../jdbc/META-INF/services/org.apache.flink.table.factories.TableFactory | grep ^[^#] >> META-INF/services/org.apache.flink.table.factories.TableFactory 

3. 創(chuàng)建JAR

這一步驟沒有特別強調(diào)的內(nèi)容,直接用用zip或者jar命令進行打包就好了。

  1. $ jincheng:jobjar jincheng.sunjc$ jar -cf myjob.jar META-INF com org 

我最終產(chǎn)生的JAR可以在這里下載,用于對比你自己打包的是否和我的一樣:)

OK,到這里我們就完成了多JARs的合并工作。我們可以嘗試應(yīng)用CLI進行提交命令了。

CLI提交作業(yè)

  • 啟動集群(我修改了flink-conf,將端口更改到4000了)
    1. /usr/local/lib/python3.7/site-packages/pyflink/bin/start-cluster.sh local 
    2. Starting cluster. 
    3. Starting standalonesession daemon on host jincheng.local. 
    4. Starting taskexecutor daemon on host jincheng.local. 
  • 提交作業(yè)

當沒有添加-j選項時候,提交作業(yè)如下:

  1. $PYFLINK_LIB/../bin/flink run -m localhost:4000 -py cdn_demo.py 

報錯如下:

提供正確的-j參數(shù),將我們打包的JAR提交到集群的情況,如下:

  1. $PYFLINK_LIB/../bin/flink run -j ~/temp/jobjar/myjob.jar -m localhost:4000 -py cdn_demo.py 

同時Web控制臺可以查看提交的作業(yè):

小結(jié)

本篇核心介紹了PyFlink的用戶如何解決多JARs依賴作業(yè)提交問題,也許這不是最Nice的解決方法,但至少是你解決多JARs依賴作業(yè)提交的方法之一,祝你 “掃雷” 順利,也期望如果你有更好的解決辦法,留言或者郵件與我分享哦:)!

【本文為51CTO專欄作者“金竹”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文 

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2022-07-12 10:38:25

分布式框架

2019-11-26 14:30:20

Spring循環(huán)依賴Java

2023-10-11 12:35:29

Maven

2019-03-28 16:22:03

華為云

2023-11-28 08:00:00

SpringJava

2012-09-05 11:09:15

SELinux操作系統(tǒng)

2019-08-15 07:43:38

TCP網(wǎng)絡(luò)協(xié)議丟包

2024-08-16 21:47:18

2021-08-18 16:02:29

Windows 11操作系統(tǒng)微軟

2021-08-11 15:35:54

多設(shè)備交互應(yīng)用框架

2022-06-10 17:26:07

數(shù)據(jù)集計算

2024-06-03 08:09:46

2023-10-07 08:40:57

緩存屬性Spring

2010-04-29 17:46:31

Oracle死鎖

2018-09-26 08:44:22

Apache Flin流計算計算模式

2018-09-26 07:50:52

Apache Flin流計算計算模式

2018-10-16 08:54:35

Apache Flin流計算State

2020-12-29 08:34:08

spring循環(huán)依賴開發(fā)

2022-08-17 07:52:31

Spring循環(huán)依賴單例池

2018-10-09 10:55:52

Apache FlinWatermark流計算
點贊
收藏

51CTO技術(shù)棧公眾號

国产精品9999| 日韩母乳在线| 日韩精品黄色网| 欧美freesex| 久久视频在线观看免费| 久久av国产紧身裤| 成人疯狂猛交xxx| 亚洲精品1234| 午夜欧美性电影| 99精品欧美一区二区三区小说| 欧美日韩中文不卡| 亚洲成人资源在线| 在线观看三级视频| 蜜臀久久99精品久久久无需会员| 精品99在线| 天天好比中文综合网| 久久九九全国免费| 国产资源在线看| 色妞在线综合亚洲欧美| 欧美韩日高清| 欧美少妇在线观看| 亚洲日本在线观看| 1区2区3区在线视频| 欧美第一黄网免费网站| 亚洲小说欧美另类社区| 国产亚洲精品网站| 在线观看欧美日本| 亚洲一区导航| 国产欧美日韩一区二区三区| 福利一区在线观看| 免费一级大片| 日韩精品欧美激情| 日韩精品dvd| 成人黄色片免费| 一本久久a久久精品亚洲| 123成人网| 国产98在线|日韩| 国产无人区一区二区三区| 欧美激情办公室videoshd| 欧美激情精品久久久久久免费印度| 熟女视频一区二区三区| 色777狠狠狠综合伊人| 久久99国产精品一区| 欧美日韩在线观看视频| 欧美亚洲综合视频| 999在线观看免费大全电视剧| 91一区一区三区| 动漫一区在线| 国产精品久久9| 成人av中文字幕| 国产网站在线免费观看| 人九九综合九九宗合| 国产精品中文字幕欧美| 91精品国产综合久久久久久豆腐| 欧美性在线视频| 丁香另类激情小说| 成人毛片av在线| 91精品久久久久| 国产精品国产自产拍高清av | 国产一区二区三区91| 福利网在线观看| 欧美天天综合网| 婷婷精品在线观看| 日本丰满少妇xxxx| 亚洲成人在线网| 国产精品普通话对白| 中文视频在线| 欧美性受xxx| 国产亚洲综合在线| 成人精品一区二区三区电影| 一区二区视频在线观看| 欧美美女激情18p| 欧美激情综合色综合啪啪| 可以看美女隐私的网站| 色在人av网站天堂精品| 国产一区二区三区在线看麻豆 | 日韩美女天天操| 欧美精品大片| 免费在线性爱视频| 国产精品一区av| 亚洲尤物在线视频观看| 欧美大胆视频| 嫩草影院在线观看网站成人| 久久影院模特热| 91蜜桃在线观看| 男人亚洲天堂| 水蜜桃色314在线观看| 亚洲女人天堂网| 国产成人综合精品三级| 欧美大胆成人| 中文字幕第一页亚洲| 亚洲高清一区二| 日韩av高清在线观看| 日本孕妇大胆孕交无码| 欧美污视频久久久| 日韩欧美一级精品久久| 老牛嫩草一区二区三区日本| 日本动漫理论片在线观看网站 | 91成人在线视频| 国产精品欧美久久久久一区二区 | 日本成人网址| 国内精品视频在线播放| 3d动漫精品啪啪1区2区免费| 男人的天堂亚洲| 欧美24videosex性欧美| 亚洲一区三区电影在线观看| 亚洲国产婷婷香蕉久久久久久 | 欧美第十八页| 日本一区高清| 九色91国产| 精品成a人在线观看| 国产综合久久久久久鬼色| 欧美日韩女优| 亚洲欧美另类动漫| 国产成人免费av| 欧美一a一片一级一片| 日韩二区在线观看| 国产精品蜜月aⅴ在线| v888av成人| 91在线免费视频| 69精品人人人人| 久久se这里有精品| 国产一区二区在线观| 午夜视频免费在线观看| 极品日韩久久| 日韩电影免费在线观看中文字幕| 成人久久18免费网站麻豆| 欧美亚洲大陆| 98在线视频| 国产中文字幕乱人伦在线观看| 国内伊人久久久久久网站视频| 黄色一区二区三区| 日韩高清一区在线| 好吊妞视频这里有精品| 91在线看片| 日韩欧美一区二| 91精品久久久久久久久久久久久久| 日韩写真欧美这视频| 91论坛在线播放| 欧美日本二区| 国产麻豆久久| 中文字幕在线永久在线视频 | 国产精品123| 九九精品久久| 蜜臀av在线| 成人免费黄色网址| 久久精品国产美女| 欧美成人中文字幕| 在线看国产一区二区| 国产麻豆精品95视频| 欧美日韩在线播放视频| av在线最新| 77777在线| 一区二区视频在线播放| 国产精品999| 亚洲一品av免费观看| 天天综合日日夜夜精品| 国产盗摄视频一区二区三区| 加勒比久久综合| 国产日韩电影| 深夜福利免费在线观看| 久久久久久久久久网| 国产欧美丝袜| 97视频国产在线| 亚洲成av人片在线观看香蕉| 一区二区三区成人在线视频| 国精品**一区二区三区在线蜜桃 | 久久99国产精品| 国内精品久久久久久久久| 欧美一区二区三区播放老司机| 国产精品电影院| 狠狠色狠狠色综合系列| 成人羞羞网站入口免费| 国产精品久久乐| 91精品国产91久久久久久青草| 中文字幕97| 久久久久人妻精品一区三寸| 久久综合伊人77777麻豆| 日韩av成人在线| 亚洲香蕉伊综合在人在线视看| 欧美色区777第一页| 国产精品女同一区二区三区| 国产一区激情在线| 亚洲少妇一区| 99久久www免费| 欧美天堂社区| 亚洲精品一区av| 福利网站在线观看| 色鬼7777久久| 日本wwwwww| 国产综合av在线| 欧美 另类 交| 欧美日韩中文国产一区发布 | 久久亚洲图片| 综合激情网站| 成人在线亚洲| 九九精品久久| 在线成人动漫av| 国产毛片精品| 视频一区国产|