flink1.10連接hive1.1.0的填坑歷程

最近有個項目,需要讀取hive表中的數據寫到Hbase中,正好flink1.10版本剛出來,而且支持連接hive,那就他了。

哪想到這才是噩夢的開始。確定了技術棧,就開始著手寫代碼,按照習慣,官網打開瞅一眼案例:

這是依賴:

依賴

這是代碼:

code

是不是覺得太簡單了,太天真了。

開始構建工程,添加依賴,修改地址,開始本地跑

exception

第一個,這個問題很明顯是kerberos的問題,但是,我對Kerberos的問題一直很頭疼,所以這個問題是同事解決的,給他點個贊。

加上關于kerberos的相關代碼后,本地算是勉強調通了。

最終本地調試代碼:

最終本地調試代碼

本地可以了,上集群測試,先來個簡單的腳本吧

shell

啟動,報錯

error

這個錯誤也很明確,你需要設置hadoop的配置文件的目錄和依賴的目錄(原因是flink從某版本(具體哪個版本記不清了)不再提供hadoop的依賴,所以需要手動添加,具體解決方案,在flink官網說的很清楚,傳送門:https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/deployment/hadoop.html),好辦,修改腳本

shell

重新啟動,緊接著異常

exception

這個問題困惑了我好久,我知道是jar沖突,也知道是哪個jar包,但是不知道排除哪些依賴,后來晚上回家睡覺流程有捋了一下,才恍然大悟

我打包的時候,把flink-shaded-hadoop2的jar包打進了我的依賴中, 導致他和集群上hadoop的jar包沖突,只需要把這個包排掉就行

解決辦法:上傳集群時,去掉這個jar包

<dependency>

? ? <groupId>org.apache.flink</groupId>

? ? <artifactId>flink-shaded-hadoop-2-uber</artifactId>

? ? <version>2.6.5-8.0</version>

? ? <scope>${scope.flink.lib}</scope>

</dependency>

啟動,又見異常:

exception

看到這個我心里有點數了,我導進來hadoop jar包和flink1.10的jar包沖突了,我懵逼了,這咋排??于是果斷換個方案,下載flink-shaded-hadoop-2-uber-2.6.5-7.0.jar直接扔進flink/lib下,解決。

繼續啟動,異常又來:

exception

解決辦法:

<dependency>

? ? ? ? ? ? <groupId>org.apache.hive</groupId>

? ? ? ? ? ? <artifactId>hive-exec</artifactId>

? ? ? ? ? ? <version>1.2.1</version>

? ? ? ? ? ? <exclusions>

? ? ? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? ? ? <groupId>org.codehaus.janino</groupId>

? ? ? ? ? ? ? ? ? ? <artifactId>janino</artifactId>

? ? ? ? ? ? ? ? </exclusion>

? ? ? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? ? ? <groupId>org.codehaus.janino</groupId>

? ? ? ? ? ? ? ? ? ? <artifactId>commons-compiler</artifactId>

? ? ? ? ? ? ? ? </exclusion>

? ? ? ? ? ? </exclusions>

? ? ? ? </dependency>

緊接著,又報錯,

exception

添加依賴:

<dependency>

? ? <groupId>org.apache.thrift</groupId>

? ? <artifactId>libfb303</artifactId>

? ? <version>0.9.2</version>

</dependency>

我以為就到此為止了吧,不,還有個絕的:

exception

看到這個異常,我都懵了。這是啥問題??心態有點崩,找了各種資料,最終終于知道問題所在:

我的hive是cdh版本的,但是我添加的hadoop依賴flink-shaded-hadoop2是apache的。

解決辦法:添加依賴

<dependency>

? ? <groupId>org.apache.hadoop</groupId>

? ? <artifactId>hadoop-core</artifactId>

? ? <version>2.6.0-mr1-cdh5.8.0</version>

</dependency>

至此,我的任務終于跑起來了

result

看到結果,我倍感欣慰,這一路走來太不容易了,心態崩過好幾次,幸好結果是好的。解決問題的過程雖然很痛苦,但是解決了問題后的感覺真的是超級棒!!

note:

flink連接hive處理流任務,讀取hive表的數據時,即使加了limit的字段,也會將全表數據加載到state中,如果表很大,比如全量表,讀起來會很慢,而且超級耗資源,慎用!!

但是,我想總會有解決的辦法(有時間再更新)。期待flink對接hive越來越完善!!

貼出最終code和pom:

1
2
3

<properties>

? ? <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

? ? <flink.version>1.10.0</flink.version>

? ? <scala.binary.version>2.11</scala.binary.version>

? ? <scala.version>2.11.12</scala.version>

? ? <hive.version>1.1.0-cdh5.8.0</hive.version>

? ? <scope.flink.lib>compile</scope.flink.lib>?

</properties>

<dependencies>

? ? <dependency>

? ? ? ? <groupId>org.apache.flink</groupId>

? ? ? ? <artifactId>flink-connector-hive_${scala.binary.version}</artifactId>

? ? ? ? <version>1.10.0</version>

? ? </dependency>

? ? <dependency>

? ? ? ? <groupId>org.apache.flink</groupId>

? ? ? ? <artifactId>flink-shaded-hadoop-2-uber</artifactId>

? ? ? ? <version>2.6.5-8.0</version>

? ? ? ? <scope>${scope.flink.lib}</scope>

? ? </dependency>

? ? <dependency>

? ? ? ? <groupId>org.apache.hadoop</groupId>

? ? ? ? <artifactId>hadoop-mapreduce-client-common</artifactId>

? ? ? ? <version>2.6.0-cdh5.8.0</version>

? ? ? ? <scope>${scope.flink.lib}</scope>

? ? </dependency>

? ? <dependency>

? ? ? ? <groupId>org.apache.hadoop</groupId>

? ? ? ? <artifactId>hadoop-core</artifactId>

? ? ? ? <version>2.6.0-mr1-cdh5.8.0</version>

? ? </dependency>

? ? <dependency>

? ? ? ? <groupId>org.apache.flink</groupId>

? ? ? ? <artifactId>flink-table-api-java-bridge_${scala.binary.version}</artifactId>

? ? ? ? <version>1.10.0</version>

? ? ? ? <scope>${scope.flink.lib}</scope>

? ? </dependency>

? ? <dependency>

? ? ? ? <groupId>org.apache.flink</groupId>

? ? ? ? <artifactId>flink-table-planner-blink_${scala.binary.version}</artifactId>

? ? ? ? <version>1.10.0</version>

? ? ? ? <scope>${scope.flink.lib}</scope>

? ? </dependency>

? ? <dependency>

? ? ? ? <groupId>org.apache.hive</groupId>

? ? ? ? <artifactId>hive-exec</artifactId>

? ? ? ? <version>${hive.version}</version>

? ? ? ? <exclusions>

? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? <groupId>org.codehaus.janino</groupId>

? ? ? ? ? ? ? ? <artifactId>janino</artifactId>

? ? ? ? ? ? </exclusion>

? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? <groupId>org.codehaus.janino</groupId>

? ? ? ? ? ? ? ? <artifactId>commons-compiler</artifactId>

? ? ? ? ? ? </exclusion>

? ? ? ? </exclusions>

? ? </dependency>

? ? <dependency>

? ? ? ? <groupId>org.projectlombok</groupId>

? ? ? ? <artifactId>lombok</artifactId>

? ? ? ? <version>1.16.18</version>

? ? ? ? <scope>${scope.flink.lib}</scope>

? ? </dependency>

? ? <dependency>

? ? ? ? <groupId>org.apache.thrift</groupId>

? ? ? ? <artifactId>libfb303</artifactId>

? ? ? ? <version>0.9.2</version>

? ? </dependency>

? ? <dependency>

? ? ? ? <groupId>org.apache.flink</groupId>

? ? ? ? <artifactId>flink-connector-kafka-0.11_${scala.binary.version}</artifactId>

? ? ? ? <version>${flink.version}</version>

? ? ? ? <exclusions>

? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? <artifactId>slf4j-api</artifactId>

? ? ? ? ? ? ? ? <groupId>org.slf4j</groupId>

? ? ? ? ? ? </exclusion>

? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? <artifactId>slf4j-log4j12</artifactId>

? ? ? ? ? ? ? ? <groupId>org.slf4j</groupId>

? ? ? ? ? ? </exclusion>

? ? ? ? </exclusions>

? ? </dependency>

</dependencies>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容