記一次大數據爬坑

前言

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版本的VertxJar來實現。

錯誤信息

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方法論的再認識
大數據分析學習路線

TAG:大數據 | HBase實戰書籍 |