記一次大數據爬坑
前言
Vertx
Vertx
是一個高效的非同步框架,支持Java、Scala、JavaScript、Kotlin
等多種語言。在非性能調優的場景下,TPS
可以高達2-3萬,同時,支持多種數據源也提供了非同步支持。
Phoenix
大數據的同學肯定對其很了解,是Apache
基金會下的頂級工程,Phoenix
幫助Hbase
提供了SQL
語法的支持,使難用的Hbase
變得簡單易用。
Hbase
用於存儲上百萬的場景數據,
Mysql
用於存儲Streaming
處理和Batch
之後數據量比較少,對SQL
查詢要求比較高的場景數據。
Redis
用於存儲統計數據,比如:PV、UV
等類型數據。
爬坑日記
Scala
版本導致的衝突問題
由於Vertx
提供的Jar
只支持Scala:2.12
版本,而本地環境使用的是Scala:2.11
,出現下方錯誤信息之後,猜想是由於Scala
版本問題導致,擺在我們面前的有兩條路,一條是換Scala
版本號,由於種種原因無法更換版本;另一個方案是選用Vertx提供的Java Jar
,選擇放棄使用Scala
版本,使用Java
版本的Vertx
的Jar
來實現。
錯誤信息
com.github.mauricio.async.db.SSLConfiguration.<init> scala.Product.$init$(Lscala/Product;)V
Vertx
包中Scala
版本衝突
在嘗試完成Scala
包換為Java
之後,問題依舊,分析錯誤信息,猜想可能是com.github.mauricio
相關的包導致的問題,在通過GitHub
和官網文檔中找到了蛛絲馬跡,該包是由Scala
編寫的,就迅速想到了版本號的問題,果不其然,選用的是2.12
,馬上將Maven
文件進行修改,解決了這個問題。
<dependency> <groupId>io.vertx</groupId> <artifactId>vertx-redis-client</artifactId> </dependency> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-mysql-postgresql-client</artifactId> <exclusions> <exclusion> <artifactId>mysql-async_2.12</artifactId> <groupId>com.github.mauricio</groupId> </exclusion> <exclusion> <artifactId>db-async-common_2.12</artifactId> <groupId>com.github.mauricio</groupId> </exclusion> </exclusions> </dependency> <dependency> <artifactId>db-async-common_2.11</artifactId> <groupId>com.github.mauricio</groupId> <version>0.2.21</version> </dependency> <dependency> <artifactId>mysql-async_2.11</artifactId> <groupId>com.github.mauricio</groupId> <version>0.2.21</version> </dependency>
Phoenix
包問題
項目中需要通過使用JDBC
的方式連接Phoenix
,在Spark
項目中使用了如下的依賴實現
<dependency> <groupId>org.apache.phoenix</groupId> <artifactId>phoenix-client</artifactId> <version>${phoenix.version}</version> <classifier>client</classifier></dependency>
但是出現了如下錯誤
Caused by: java.lang.NoSuchMethodError: com.jayway.jsonpath.spi.mapper.JacksonMappingProvider.<init>(jackson-databind)
猜測可能原因是包衝突,但發現Maven
中不存在jsonpath
該相應的依賴,故猜想可能是jackson
包版本導致的衝突,故將parent中的依賴配置移到當前pom
文件中,因為Maven
是就近查找依賴的,但發現還是沒有效果。由於phoenix-client
是一個獨立的包,無法對其exclusion
操作,在同事的提示下,採用的解壓該Jar
包,找到了jayway
相關目錄,將該目錄刪除後進行重新打包,神奇的事發生了,啟動成功了。
Phoenix Driver問題
程序啟動成功,但在測試Vertx-JDBC
連接Phoenix
時,出現找不到Driver
問題,原來phoenix-client
中無法引用到org.apache.phoenix.jdbc.PhoenixDriver
,在Google
之後,使用了如下的Jar
方案
<dependency> <groupId>org.apache.phoenix</groupId> <artifactId>phoenix-core</artifactId> <version>${phoenix.version}</version></dependency>
問題就解決了。
jdbc:phoenix:host1,host2:2181:/hbase
推薦閱讀:
※大數據時代下的遷移學習
※[引子]政務大數據的七大痛點
※技術精品課大放送:學習雲計算大數據,這些技能必不可少
※工業大數據分析實踐:基於CRISP-DM方法論的再認識
※大數據分析學習路線