最近有個項目,需要讀取hive表中的數據寫到Hbase中,正好flink1.10版本剛出來,而且支持連接hive,那就他了。
哪想到這才是噩夢的開始。確定了技術棧,就開始著手寫代碼,按照習慣,官網打開瞅一眼案例:
這是依賴:
這是代碼:
是不是覺得太簡單了,太天真了。
開始構建工程,添加依賴,修改地址,開始本地跑
第一個,這個問題很明顯是kerberos的問題,但是,我對Kerberos的問題一直很頭疼,所以這個問題是同事解決的,給他點個贊。
加上關于kerberos的相關代碼后,本地算是勉強調通了。
最終本地調試代碼:
本地可以了,上集群測試,先來個簡單的腳本吧
啟動,報錯
這個錯誤也很明確,你需要設置hadoop的配置文件的目錄和依賴的目錄(原因是flink從某版本(具體哪個版本記不清了)不再提供hadoop的依賴,所以需要手動添加,具體解決方案,在flink官網說的很清楚,傳送門:https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/deployment/hadoop.html),好辦,修改腳本
重新啟動,緊接著異常
這個問題困惑了我好久,我知道是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>
啟動,又見異常:
看到這個我心里有點數了,我導進來hadoop jar包和flink1.10的jar包沖突了,我懵逼了,這咋排??于是果斷換個方案,下載flink-shaded-hadoop-2-uber-2.6.5-7.0.jar直接扔進flink/lib下,解決。
繼續啟動,異常又來:
解決辦法:
<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>
緊接著,又報錯,
添加依賴:
<dependency>
? ? <groupId>org.apache.thrift</groupId>
? ? <artifactId>libfb303</artifactId>
? ? <version>0.9.2</version>
</dependency>
我以為就到此為止了吧,不,還有個絕的:
看到這個異常,我都懵了。這是啥問題??心態有點崩,找了各種資料,最終終于知道問題所在:
我的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>
至此,我的任務終于跑起來了
看到結果,我倍感欣慰,這一路走來太不容易了,心態崩過好幾次,幸好結果是好的。解決問題的過程雖然很痛苦,但是解決了問題后的感覺真的是超級棒!!
note:
flink連接hive處理流任務,讀取hive表的數據時,即使加了limit的字段,也會將全表數據加載到state中,如果表很大,比如全量表,讀起來會很慢,而且超級耗資源,慎用!!
但是,我想總會有解決的辦法(有時間再更新)。期待flink對接hive越來越完善!!
貼出最終code和pom:
<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>