blink hive catalog吐血整理

1.blink在flink的基礎(chǔ)上做了大量的優(yōu)化,其中有兩點(diǎn):

1.1Catalog

在catalog上做了如下修改和優(yōu)化:

  • 通過(guò)引入全新的 ReadableCatalog and ReadableWritableCatalog 接口統(tǒng)一了 Flink 的內(nèi)部和外部 catalog栖榨。Flink 所有的 catalog 會(huì)被 TableEnvironment 中的 CatalogManager管理龙考。
  • 實(shí)現(xiàn)了兩種新的 catalog - FlinkInMemoryCatalog and HiveCatalog黔姜。FlinkInMemoryCatalog 會(huì)將所有元數(shù)據(jù)存在內(nèi)存中。HiveCatalog 會(huì)連接 Hive metastore 并橋接 Flink 和 Hive 之間的元數(shù)據(jù)分苇。目前彤蔽,這個(gè)HiveCatalog 可以提供讀取 Hive 元數(shù)據(jù)的能力,包括數(shù)據(jù)庫(kù)(databases)挑社,表(tables)陨界,表分區(qū)(table partitions), 簡(jiǎn)單的數(shù)據(jù)類型(simple data types), 表和列的統(tǒng)計(jì)信息(table and column stats)。
  • 重新清晰定義了引用目標(biāo)的層級(jí)痛阻,即 'mycatalog.mydatabase.mytable'菌瘪。通過(guò)定義默認(rèn) catalog 和默認(rèn)數(shù)據(jù)庫(kù),用戶可以將引用層級(jí)簡(jiǎn)單化為 'mytable’阱当。

未來(lái)俏扩,我們還將加入對(duì)更多類型的元數(shù)據(jù)以及catalog的支持。

1.2Hive兼容性

我們的目標(biāo)是在元數(shù)據(jù)(meta data)和數(shù)據(jù)層將 Flink 和 Hive 對(duì)接和打通弊添。

  • 在這個(gè)版本上录淡,F(xiàn)link可以通過(guò)上面提到的HiveCatalog讀取Hive的metaData。
  • 這個(gè)版本實(shí)現(xiàn)了HiveTableSource油坝,使得Flink job可以直接讀取Hive中普通表和分區(qū)表的數(shù)據(jù)嫉戚,以及做分區(qū)的裁剪刨裆。

通過(guò)這個(gè)版本,用戶可以使用Flink SQL讀取已有的Hive meta和data彬檀,做數(shù)據(jù)處理帆啃。未來(lái)我們將在Flink上繼續(xù)加大對(duì)Hive兼容性的支持,包括支持Hive特有的data type窍帝,和Hive UDF等等努潘。

2.如何連接hive 源數(shù)據(jù)

2.1 代碼

通過(guò)flink-sql連接外部數(shù)據(jù)源(比如hive),需要寫一些代碼聲明盯桦。


image.png

2.2 blink sql-client

image.png

3. 環(huán)境準(zhǔn)備

3.1安裝hadoop

參考https://blog.csdn.net/hubin232/article/details/76769265

 cd /usr/local/Cellar/hadoop/3.1.1/libexec/sbin
 ./start-all.sh //即可啟動(dòng) hadoop namenode,secondnamenode,datanode,resource mananger組件

3.2 安裝hive

mac 環(huán)境下brew install hive 即可安裝最新版 (需要先裝mysql或者一個(gè)能連的上mysql也行)

3.3 配置

cd /usr/local/Cellar/hive/3.1.1/libexec/conf
cp hive-default.xml.template hive-site.xml

編輯hive-site.xml及后續(xù)參考http://www.reibang.com/p/5c11073d19d3
安裝后慈俯,建表,插數(shù)據(jù)拥峦。

image.png

3.4.metastore server開啟

注意L臁!略号! 一定要確保hive開啟了 metastore server
lsof -i:9083 查詢是否開啟了刑峡。
開啟方式有兩種

1

/usr/local/Cellar/hive/3.1.1/libexec/hcatalog/sbin/hcat_server.sh start
提示

Started metastore server init, testing if initialized correctly...
Metastore initialized successfully on port[9083].

就說(shuō)明成功了。

2 hive --service metastore (這個(gè)沒試過(guò))

lsof -i:9083


image.png

3.5 為什么要開啟metastore 呢玄柠?

blink catalog架構(gòu)圖


image.png

紅框內(nèi)就是連接的hive metastore,所以需要先開啟 hive 的metastore server突梦。

4. blink源碼修改

1. sql-client Environment 類

 修改位置:
org.apache.flink.table.client.config.Environment
enrich 方法
enrichedEnv.deployment = DeploymentEntry.enrich(env.deployment, properties);
下方加入
enrichedEnv.catalogs = new HashMap<>(env.catalogs);

這塊沒有將catalogs復(fù)制過(guò)去,會(huì)導(dǎo)致從環(huán)境中讀取到的catalogs丟失羽利,用戶永遠(yuǎn)沒發(fā)定義catalog宫患。

2.hive connector

官方支持的hive版本是2.4,我的是3.1.1这弧,會(huì)報(bào)錯(cuò)

[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.NoMatchingTableFactoryException: Could not find a suitable table factory for 'org.apache.flink.table.factories.BatchTableSourceFactory' in
the classpath.

Reason: 
The matching factory 'org.apache.flink.streaming.connectors.hive.HiveTableFactory' doesn't support 'bucketing_version'.

所以要在 flink-connector-hive模塊

在類org.apache.flink.table.catalog.hive.config.HiveTableConfig
加入:
public static final String DEFAULT_TABLE_BUCKETING_VERSION = "bucketing_version";
public static final String DEFAULT_TABLE_COLUMN_STATS_ACCURATE = "column_stats_accurate";
在類org.apache.flink.streaming.connectors.hive.HiveTableFactory 
supportedProperties 方法加入:
properties.add(HiveTableConfig.DEFAULT_TABLE_BUCKETING_VERSION);
properties.add(HiveTableConfig.DEFAULT_TABLE_COLUMN_STATS_ACCURATE);


修改pom


image.png

image.png

否則會(huì)報(bào)找不到HadoopInputFormatCommonBase 這個(gè)類娃闲。

3 jar包替換。

代碼修改后
在sql-client模塊mvn clean install -Dmaven.test.skip -Dcheckstyle.skip -Drat.ignoreErrors=true
將flink-sql-client-1.5.1.jar包拷到 /apache-flink/build-target/opt/sql-client
在flink-connector-hive模塊 mvn clean install -Dmaven.test.skip -Dcheckstyle.skip -Drat.ignoreErrors=true
將flink-connector-hive_2.11-1.5.1.jar拷到/apache-flink/build-target/opt/connectors

5.應(yīng)用

5.1配置

進(jìn)入/apache-flink/build-target/bin
cp ../conf/sql-client-default.ymal sql-client-hive.ymal
修改sql-client-hive.ymal
execution配置:
(streaming模式不支持匾浪,應(yīng)該可以通過(guò)修改flink-connector-hive模塊代碼支持皇帮。)


image.png

catalogs配置:

image.png

5.2.執(zhí)行./sql-client.sh embedded -e sql-client-hive.yaml

image.png
image.png

至此就打通blink的 sql-client與 hive源數(shù)據(jù)了。

總結(jié):在hive環(huán)境的配置比較耗時(shí)間蛋辈,blink源碼catalog的bug得debug才能發(fā)現(xiàn)属拾。過(guò)程比較繁瑣,但是結(jié)果是很好的冷溶,通過(guò)打通catalog渐白,flink就可以像spark一樣讀取并處理hive數(shù)據(jù)了,對(duì)于小公司或者數(shù)據(jù)量不大的情況下挂洛,只選用flink技術(shù)棧就可以做到批流處理礼预。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市虏劲,隨后出現(xiàn)的幾起案子托酸,更是在濱河造成了極大的恐慌,老刑警劉巖柒巫,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件励堡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡堡掏,警方通過(guò)查閱死者的電腦和手機(jī)应结,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泉唁,“玉大人鹅龄,你說(shuō)我怎么就攤上這事⊥ば螅” “怎么了扮休?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拴鸵。 經(jīng)常有香客問我玷坠,道長(zhǎng),這世上最難降的妖魔是什么劲藐? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任八堡,我火速辦了婚禮,結(jié)果婚禮上聘芜,老公的妹妹穿的比我還像新娘兄渺。我一直安慰自己,他們只是感情好汰现,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布挂谍。 她就那樣靜靜地躺著,像睡著了一般服鹅。 火紅的嫁衣襯著肌膚如雪凳兵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天企软,我揣著相機(jī)與錄音庐扫,去河邊找鬼。 笑死仗哨,一個(gè)胖子當(dāng)著我的面吹牛形庭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厌漂,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼萨醒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了苇倡?” 一聲冷哼從身側(cè)響起富纸,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤囤踩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后晓褪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堵漱,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年涣仿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勤庐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡好港,死狀恐怖愉镰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钧汹,我是刑警寧澤丈探,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站崭孤,受9級(jí)特大地震影響类嗤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辨宠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一遗锣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗤形,春花似錦精偿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至霹期,卻和暖如春叶组,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背历造。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工甩十, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吭产。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓侣监,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親臣淤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子橄霉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355